aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Fogel2018-03-19 12:21:03 -0500
committerKarl Fogel2018-03-19 12:22:05 -0500
commit6d2e8fdd102d2d4f5105898c15813fd8dcd0907f (patch)
treea9be3ea8d115b996aa8ce6b2201590c91f938eea
parent903e3d43310638014a33fec64700e7db8e0774d0 (diff)
downloademacs-6d2e8fdd102d2d4f5105898c15813fd8dcd0907f.tar.gz
emacs-6d2e8fdd102d2d4f5105898c15813fd8dcd0907f.zip
Revert move of interactive `transpose-regions' to Lisp
This reverts my commit 3a3aa0e056a of 2018-03-18 at 21:43:18 UTC. I thought consensus had been reached, but it had not: Eli Zaretskii felt the pre-3a3aa0e056a situation was fine and would not like to see it changed without at least further discussion.
-rw-r--r--lisp/simple.el28
-rw-r--r--src/editfns.c22
2 files changed, 19 insertions, 31 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index 543fa08233c..fa93cf87c7a 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -7014,34 +7014,6 @@ With argument 0, interchanges line point is in with line mark is in."
7014 (forward-line arg)))) 7014 (forward-line arg))))
7015 arg)) 7015 arg))
7016 7016
7017(defun transpose-regions (startr1 endr1 startr2 endr2 &optional leave-markers)
7018 "Transpose region STARTR1 to ENDR1 with STARTR2 to ENDR2.
7019The regions should not be overlapping, because the size of the buffer is
7020never changed in a transposition.
7021
7022Optional fifth arg LEAVE-MARKERS, if non-nil, means don't update
7023any markers that happen to be located in the regions.
7024
7025Transposing beyond buffer boundaries is an error.
7026
7027Interactively, STARTR1 and ENDR1 are point and mark; STARTR2 and ENDR2
7028are the last two marks pushed to the mark ring; LEAVE-MARKERS is nil.
7029If a prefix argument N is given, STARTR2 and ENDR2 are the two
7030successive marks N entries back in the mark ring. A negative prefix
7031argument instead counts forward from the oldest mark in the mark
7032ring."
7033 (interactive
7034 (if (< (length mark-ring) 2)
7035 (error "Other region must be marked before transposing two regions")
7036 (let* ((num (if current-prefix-arg
7037 (prefix-numeric-value current-prefix-arg)
7038 0))
7039 (ring-length (length mark-ring))
7040 (eltnum (mod num ring-length))
7041 (eltnum2 (mod (1+ num) ring-length)))
7042 (list (point) (mark) (elt mark-ring eltnum) (elt mark-ring eltnum2)))))
7043 (transpose-regions-internal startr1 endr1 startr2 endr2 leave-markers))
7044
7045;; FIXME seems to leave point BEFORE the current object when ARG = 0, 7017;; FIXME seems to leave point BEFORE the current object when ARG = 0,
7046;; which seems inconsistent with the ARG /= 0 case. 7018;; which seems inconsistent with the ARG /= 0 case.
7047;; FIXME document SPECIAL. 7019;; FIXME document SPECIAL.
diff --git a/src/editfns.c b/src/editfns.c
index e24867298e1..d26319441b3 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -5112,7 +5112,16 @@ transpose_markers (ptrdiff_t start1, ptrdiff_t end1,
5112 } 5112 }
5113} 5113}
5114 5114
5115DEFUN ("transpose-regions-internal", Ftranspose_regions_internal, Stranspose_regions_internal, 4, 5, 0, 5115DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
5116 "(if (< (length mark-ring) 2)\
5117 (error \"Other region must be marked before transposing two regions\")\
5118 (let* ((num (if current-prefix-arg\
5119 (prefix-numeric-value current-prefix-arg)\
5120 0))\
5121 (ring-length (length mark-ring))\
5122 (eltnum (mod num ring-length))\
5123 (eltnum2 (mod (1+ num) ring-length)))\
5124 (list (point) (mark) (elt mark-ring eltnum) (elt mark-ring eltnum2))))",
5116 doc: /* Transpose region STARTR1 to ENDR1 with STARTR2 to ENDR2. 5125 doc: /* Transpose region STARTR1 to ENDR1 with STARTR2 to ENDR2.
5117The regions should not be overlapping, because the size of the buffer is 5126The regions should not be overlapping, because the size of the buffer is
5118never changed in a transposition. 5127never changed in a transposition.
@@ -5120,7 +5129,14 @@ never changed in a transposition.
5120Optional fifth arg LEAVE-MARKERS, if non-nil, means don't update 5129Optional fifth arg LEAVE-MARKERS, if non-nil, means don't update
5121any markers that happen to be located in the regions. 5130any markers that happen to be located in the regions.
5122 5131
5123Transposing beyond buffer boundaries is an error. */) 5132Transposing beyond buffer boundaries is an error.
5133
5134Interactively, STARTR1 and ENDR1 are point and mark; STARTR2 and ENDR2
5135are the last two marks pushed to the mark ring; LEAVE-MARKERS is nil.
5136If a prefix argument N is given, STARTR2 and ENDR2 are the two
5137successive marks N entries back in the mark ring. A negative prefix
5138argument instead counts forward from the oldest mark in the mark
5139ring. */)
5124 (Lisp_Object startr1, Lisp_Object endr1, Lisp_Object startr2, Lisp_Object endr2, Lisp_Object leave_markers) 5140 (Lisp_Object startr1, Lisp_Object endr1, Lisp_Object startr2, Lisp_Object endr2, Lisp_Object leave_markers)
5125{ 5141{
5126 register ptrdiff_t start1, end1, start2, end2; 5142 register ptrdiff_t start1, end1, start2, end2;
@@ -5565,5 +5581,5 @@ functions if all the text being accessed has this property. */);
5565 defsubr (&Swiden); 5581 defsubr (&Swiden);
5566 defsubr (&Snarrow_to_region); 5582 defsubr (&Snarrow_to_region);
5567 defsubr (&Ssave_restriction); 5583 defsubr (&Ssave_restriction);
5568 defsubr (&Stranspose_regions_internal); 5584 defsubr (&Stranspose_regions);
5569} 5585}