summaryrefslogtreecommitdiff
path: root/lisp/rect.el
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2019-06-24 19:10:32 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2019-06-24 19:12:41 +0200
commit35c72aea449a0e05849cff8d8ad4b9bde25cebb5 (patch)
tree40b4faf4f3deb50b919439442a70860c1a28d743 /lisp/rect.el
parent9f5f5ae6386fe1ea9f31bd760d7ffd293d274502 (diff)
downloademacs-35c72aea449a0e05849cff8d8ad4b9bde25cebb5.tar.gz
rectangle--pos-cols shouldn't move point
* lisp/rect.el (rectangle--pos-cols): Don't move point while calculating the values (bug#25777).
Diffstat (limited to 'lisp/rect.el')
-rw-r--r--lisp/rect.el55
1 files changed, 28 insertions, 27 deletions
diff --git a/lisp/rect.el b/lisp/rect.el
index ecf6da13817..34f79e3ed3c 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -77,34 +77,35 @@ Point is at the end of the segment of this line within the rectangle."
;; At this stage, we don't know which of start/end is point/mark :-(
;; And in case start=end, it might still be that point and mark have
;; different crutches!
- (let ((cw (window-parameter window 'rectangle--point-crutches)))
- (cond
- ((eq start (car cw))
- (let ((sc (cdr cw))
- (ec (if (eq end (car rectangle--mark-crutches))
- (cdr rectangle--mark-crutches)
- (if rectangle--mark-crutches
- (setq rectangle--mark-crutches nil))
- (goto-char end) (current-column))))
- (if (eq start end) (cons (min sc ec) (max sc ec)) (cons sc ec))))
- ((eq end (car cw))
- (if (eq start (car rectangle--mark-crutches))
- (cons (cdr rectangle--mark-crutches) (cdr cw))
+ (save-excursion
+ (let ((cw (window-parameter window 'rectangle--point-crutches)))
+ (cond
+ ((eq start (car cw))
+ (let ((sc (cdr cw))
+ (ec (if (eq end (car rectangle--mark-crutches))
+ (cdr rectangle--mark-crutches)
+ (if rectangle--mark-crutches
+ (setq rectangle--mark-crutches nil))
+ (goto-char end) (current-column))))
+ (if (eq start end) (cons (min sc ec) (max sc ec)) (cons sc ec))))
+ ((eq end (car cw))
+ (if (eq start (car rectangle--mark-crutches))
+ (cons (cdr rectangle--mark-crutches) (cdr cw))
+ (if rectangle--mark-crutches (setq rectangle--mark-crutches nil))
+ (cons (progn (goto-char start) (current-column)) (cdr cw))))
+ ((progn
+ (if cw (setf (window-parameter nil 'rectangle--point-crutches) nil))
+ (eq start (car rectangle--mark-crutches)))
+ (let ((sc (cdr rectangle--mark-crutches))
+ (ec (progn (goto-char end) (current-column))))
+ (if (eq start end) (cons (min sc ec) (max sc ec)) (cons sc ec))))
+ ((eq end (car rectangle--mark-crutches))
+ (cons (progn (goto-char start) (current-column))
+ (cdr rectangle--mark-crutches)))
+ (t
(if rectangle--mark-crutches (setq rectangle--mark-crutches nil))
- (cons (progn (goto-char start) (current-column)) (cdr cw))))
- ((progn
- (if cw (setf (window-parameter nil 'rectangle--point-crutches) nil))
- (eq start (car rectangle--mark-crutches)))
- (let ((sc (cdr rectangle--mark-crutches))
- (ec (progn (goto-char end) (current-column))))
- (if (eq start end) (cons (min sc ec) (max sc ec)) (cons sc ec))))
- ((eq end (car rectangle--mark-crutches))
- (cons (progn (goto-char start) (current-column))
- (cdr rectangle--mark-crutches)))
- (t
- (if rectangle--mark-crutches (setq rectangle--mark-crutches nil))
- (cons (progn (goto-char start) (current-column))
- (progn (goto-char end) (current-column)))))))
+ (cons (progn (goto-char start) (current-column))
+ (progn (goto-char end) (current-column))))))))
(defun rectangle--col-pos (col kind)
(let ((c (move-to-column col)))