[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/expand-region e1b099a62f 1/2: expand-region-core: Fix e
|
From: |
ELPA Syncer |
|
Subject: |
[elpa] externals/expand-region e1b099a62f 1/2: expand-region-core: Fix excursions when expensive |
|
Date: |
Thu, 4 Jan 2024 12:58:26 -0500 (EST) |
branch: externals/expand-region
commit e1b099a62ff3c718d1bd8a100f516b3dff035dd2
Author: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Commit: Magnar Sveen <magnars@gmail.com>
expand-region-core: Fix excursions when expensive
expand-region-core.el (er--expand-region-1, er--save-excursion): When
`er-save-excursion` is expensive, such as when using Org-mode's
`org-save-outline-visibility`, calling it repeatedly for each function
in `er/try-expand-list' is prohibitive. Fix by only calling it once
around the expansion trials, and using `save-mark-and-excursion`
around each expansion function.
---
expand-region-core.el | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/expand-region-core.el b/expand-region-core.el
index c239fd1f99..1f60dbe974 100644
--- a/expand-region-core.el
+++ b/expand-region-core.el
@@ -72,8 +72,7 @@
`(save-excursion ,@body))))
(defmacro er--save-excursion (&rest body)
- `(let ((action (lambda ()
- (save-mark-and-excursion ,@body))))
+ `(let ((action (lambda () ,@body)))
(if er/save-mode-excursion
(funcall er/save-mode-excursion action)
(funcall action))))
@@ -109,17 +108,18 @@ moving point or mark as little as possible."
(skip-chars-forward er--space-str)
(setq start (point)))
- (while try-list
- (er--save-excursion
- (ignore-errors
- (funcall (car try-list))
- (when (and (region-active-p)
- (er--this-expansion-is-better start end best-start
best-end))
- (setq best-start (point))
- (setq best-end (mark))
- (when (and er--show-expansion-message (not (minibufferp)))
- (message "%S" (car try-list))))))
- (setq try-list (cdr try-list)))
+ (er--save-excursion
+ (while try-list
+ (ignore-errors
+ (save-mark-and-excursion
+ (funcall (car try-list))
+ (when (and (region-active-p)
+ (er--this-expansion-is-better start end best-start
best-end))
+ (setq best-start (point))
+ (setq best-end (mark))
+ (when (and er--show-expansion-message (not (minibufferp)))
+ (message "%S" (car try-list))))))
+ (setq try-list (cdr try-list))))
(setq deactivate-mark nil)
;; if smart cursor enabled, decide to put it at start or end of region: