[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 4d1d43e41f: Add named defun for transpose-sexps-default-function (bug#60654),
Yuan Fu <=