emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 4d1d43e41f: Add named defun for transpose-sexps-default-function


From: Yuan Fu
Subject: master 4d1d43e41f: Add named defun for transpose-sexps-default-function (bug#60654)
Date: Mon, 9 Jan 2023 15:34:32 -0500 (EST)

branch: master
commit 4d1d43e41fafaa5beecba57686f5d5f4146746c8
Author: Theodor Thornhill <theo@thornhill.no>
Commit: Yuan Fu <casouri@gmail.com>

    Add named defun for transpose-sexps-default-function (bug#60654)
    
    * lisp/simple.el (transpose-sexps-default-function): Move the lambda
    into its own function.
    (transpose-sexps-function): Refer to it by name.
    * etc/NEWS: Mention the change.
---
 etc/NEWS       |  4 ++++
 lisp/simple.el | 64 ++++++++++++++++++++++++++++++----------------------------
 2 files changed, 37 insertions(+), 31 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 60dab575da..3aa8f2abb7 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -57,6 +57,10 @@ trash when deleting.  Default is nil.
 Emacs now can set this variable to customize the behavior of the
 'transpose-sexps' function.
 
+** New function 'transpose-sexps-default-function'.
+The previous implementation is moved into its own function, to be
+bound by transpose-sexps-function'.
+
 ** New function 'treesit-transpose-sexps'.
 treesit.el now unconditionally sets 'transpose-sexps-function' for all
 Tree-sitter modes.  This functionality utilizes the new
diff --git a/lisp/simple.el b/lisp/simple.el
index 690968ca93..c8c5542cae 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -8436,37 +8436,39 @@ are interchanged."
   (interactive "*p")
   (transpose-subr 'forward-word arg))
 
-(defvar transpose-sexps-function
-  (lambda (arg)
-    ;; Here we should try to simulate the behavior of
-    ;; (cons (progn (forward-sexp x) (point))
-    ;;       (progn (forward-sexp (- x)) (point)))
-    ;; Except that we don't want to rely on the second forward-sexp
-    ;; putting us back to where we want to be, since forward-sexp-function
-    ;; might do funny things like infix-precedence.
-    (if (if (> arg 0)
-           (looking-at "\\sw\\|\\s_")
-         (and (not (bobp))
-              (save-excursion
-                 (forward-char -1)
-                 (looking-at "\\sw\\|\\s_"))))
-        ;; Jumping over a symbol.  We might be inside it, mind you.
-       (progn (funcall (if (> arg 0)
-                           #'skip-syntax-backward #'skip-syntax-forward)
-                       "w_")
-              (cons (save-excursion (forward-sexp arg) (point)) (point)))
-      ;; Otherwise, we're between sexps.  Take a step back before jumping
-      ;; to make sure we'll obey the same precedence no matter which
-      ;; direction we're going.
-      (funcall (if (> arg 0) #'skip-syntax-backward #'skip-syntax-forward)
-               " .")
-      (cons (save-excursion (forward-sexp arg) (point))
-           (progn (while (or (forward-comment (if (> arg 0) 1 -1))
-                             (not (zerop (funcall (if (> arg 0)
-                                                      #'skip-syntax-forward
-                                                    #'skip-syntax-backward)
-                                                  ".")))))
-                  (point)))))
+(defun transpose-sexps-default-function (arg)
+  "Default method to locate a pair of points for transpose-sexps."
+  ;; Here we should try to simulate the behavior of
+  ;; (cons (progn (forward-sexp x) (point))
+  ;;       (progn (forward-sexp (- x)) (point)))
+  ;; Except that we don't want to rely on the second forward-sexp
+  ;; putting us back to where we want to be, since forward-sexp-function
+  ;; might do funny things like infix-precedence.
+  (if (if (> arg 0)
+         (looking-at "\\sw\\|\\s_")
+       (and (not (bobp))
+            (save-excursion
+               (forward-char -1)
+               (looking-at "\\sw\\|\\s_"))))
+      ;; Jumping over a symbol.  We might be inside it, mind you.
+      (progn (funcall (if (> arg 0)
+                         #'skip-syntax-backward #'skip-syntax-forward)
+                     "w_")
+            (cons (save-excursion (forward-sexp arg) (point)) (point)))
+    ;; Otherwise, we're between sexps.  Take a step back before jumping
+    ;; to make sure we'll obey the same precedence no matter which
+    ;; direction we're going.
+    (funcall (if (> arg 0) #'skip-syntax-backward #'skip-syntax-forward)
+             " .")
+    (cons (save-excursion (forward-sexp arg) (point))
+         (progn (while (or (forward-comment (if (> arg 0) 1 -1))
+                           (not (zerop (funcall (if (> arg 0)
+                                                    #'skip-syntax-forward
+                                                  #'skip-syntax-backward)
+                                                ".")))))
+                (point)))))
+
+(defvar transpose-sexps-function #'transpose-sexps-default-function
   "If non-nil, `transpose-sexps' delegates to this function.
 
 This function takes one argument ARG, a number.  Its expected



reply via email to

[Prev in Thread] Current Thread [Next in Thread]