Function: transpose-subr-1
transpose-subr-1 is a byte-compiled function defined in simple.el.gz.
Signature
(transpose-subr-1 POS1 POS2)
Source Code
;; Defined in /usr/src/emacs/lisp/simple.el.gz
(defun transpose-subr-1 (pos1 pos2)
(when (> (car pos1) (cdr pos1)) (setq pos1 (cons (cdr pos1) (car pos1))))
(when (> (car pos2) (cdr pos2)) (setq pos2 (cons (cdr pos2) (car pos2))))
(when (> (car pos1) (car pos2))
(let ((swap pos1))
(setq pos1 pos2 pos2 swap)))
(if (> (cdr pos1) (car pos2)) (error "Don't have two things to transpose"))
(atomic-change-group
;; This sequence of insertions attempts to preserve marker
;; positions at the start and end of the transposed objects.
(let* ((word (buffer-substring (car pos2) (cdr pos2)))
(len1 (- (cdr pos1) (car pos1)))
(len2 (length word))
(boundary (make-marker)))
(set-marker boundary (car pos2))
(goto-char (cdr pos1))
(insert-before-markers word)
(setq word (delete-and-extract-region (car pos1) (+ (car pos1) len1)))
(goto-char boundary)
(insert word)
(goto-char (+ boundary len1))
(delete-region (point) (+ (point) len2))
(set-marker boundary nil))))