aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/simple.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/simple.el')
-rw-r--r--lisp/simple.el23
1 files changed, 15 insertions, 8 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index 8c7e88d04bc..c0ba5477b56 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5300,14 +5300,21 @@ current object."
5300 (setq pos1 pos2 pos2 swap))) 5300 (setq pos1 pos2 pos2 swap)))
5301 (if (> (cdr pos1) (car pos2)) (error "Don't have two things to transpose")) 5301 (if (> (cdr pos1) (car pos2)) (error "Don't have two things to transpose"))
5302 (atomic-change-group 5302 (atomic-change-group
5303 (let (word2) 5303 ;; This sequence of insertions attempts to preserve marker
5304 ;; FIXME: We first delete the two pieces of text, so markers that 5304 ;; positions at the start and end of the transposed objects.
5305 ;; used to point to after the text end up pointing to before it :-( 5305 (let* ((word (buffer-substring (car pos2) (cdr pos2)))
5306 (setq word2 (delete-and-extract-region (car pos2) (cdr pos2))) 5306 (len1 (- (cdr pos1) (car pos1)))
5307 (goto-char (car pos2)) 5307 (len2 (length word))
5308 (insert (delete-and-extract-region (car pos1) (cdr pos1))) 5308 (boundary (make-marker)))
5309 (goto-char (car pos1)) 5309 (set-marker boundary (car pos2))
5310 (insert word2)))) 5310 (goto-char (cdr pos1))
5311 (insert-before-markers word)
5312 (setq word (delete-and-extract-region (car pos1) (+ (car pos1) len1)))
5313 (goto-char boundary)
5314 (insert word)
5315 (goto-char (+ boundary len1))
5316 (delete-region (point) (+ (point) len2))
5317 (set-marker boundary nil))))
5311 5318
5312(defun backward-word (&optional arg) 5319(defun backward-word (&optional arg)
5313 "Move backward until encountering the beginning of a word. 5320 "Move backward until encountering the beginning of a word.