* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar @ 2023-01-08 10:46 Mickey Petersen 2023-01-09 3:39 ` Yuan Fu 2023-01-09 20:35 ` Yuan Fu 0 siblings, 2 replies; 7+ messages in thread From: Mickey Petersen @ 2023-01-08 10:46 UTC (permalink / raw) To: 60654 The defvar `transpose-sexps-function' holds on to a lambda function. Would it be possible to make it an actual function? Its purpose is rather important as it is the default transposition function that was moved out of `transpose-sexps'. Being able to reliably access it when `transpose-sexps-function' is overriden is useful. In GNU Emacs 30.0.50 (build 6, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, cairo version 1.16.0) of 2023-01-02 built on mickey-work Repository revision: c209802f7b3721a1b95113290934a23fee88f678 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12013000 System Description: Ubuntu 20.04.3 LTS Configured using: 'configure --with-native-compilation --with-json --with-mailutils --without-compress-install --with-imagemagick CC=gcc-10' ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-08 10:46 bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar Mickey Petersen @ 2023-01-09 3:39 ` Yuan Fu 2023-01-09 6:23 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 20:35 ` Yuan Fu 1 sibling, 1 reply; 7+ messages in thread From: Yuan Fu @ 2023-01-09 3:39 UTC (permalink / raw) To: Mickey Petersen; +Cc: Theodor Thornhill, 60654 Mickey Petersen <mickey@masteringemacs.org> writes: > The defvar `transpose-sexps-function' holds on to a lambda function. > Would it be possible to make it an actual function? Its purpose is > rather important as it is the default transposition function that was > moved out of `transpose-sexps'. Being able to reliably access it when > `transpose-sexps-function' is overriden is useful. CC’d Theo. Yuan ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-09 3:39 ` Yuan Fu @ 2023-01-09 6:23 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 6:57 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 7+ messages in thread From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-09 6:23 UTC (permalink / raw) To: Yuan Fu, Mickey Petersen; +Cc: 60654 On 9 January 2023 04:39:34 CET, Yuan Fu <casouri@gmail.com> wrote: > >Mickey Petersen <mickey@masteringemacs.org> writes: > >> The defvar `transpose-sexps-function' holds on to a lambda function. >> Would it be possible to make it an actual function? Its purpose is >> rather important as it is the default transposition function that was >> moved out of `transpose-sexps'. Being able to reliably access it when >> `transpose-sexps-function' is overriden is useful. > >CC’d Theo. > >Yuan Thanks yuan. Yeah I'll make this change and call the new function transpose-sexps-default-function. Apologies for any inconvenience :) Theo ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-09 6:23 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-09 6:57 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 8:47 ` Mickey Petersen 0 siblings, 1 reply; 7+ messages in thread From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-09 6:57 UTC (permalink / raw) To: Yuan Fu, Mickey Petersen; +Cc: 60654 [-- Attachment #1: Type: text/plain, Size: 808 bytes --] Theodor Thornhill <theo@thornhill.no> writes: > On 9 January 2023 04:39:34 CET, Yuan Fu <casouri@gmail.com> wrote: >> >>Mickey Petersen <mickey@masteringemacs.org> writes: >> >>> The defvar `transpose-sexps-function' holds on to a lambda function. >>> Would it be possible to make it an actual function? Its purpose is >>> rather important as it is the default transposition function that was >>> moved out of `transpose-sexps'. Being able to reliably access it when >>> `transpose-sexps-function' is overriden is useful. >> >>CC’d Theo. >> >>Yuan > > Thanks yuan. > > Yeah I'll make this change and call the new function transpose-sexps-default-function. > > Apologies for any inconvenience :) > > Theo How about this, Mickey. Is this something you can work with? Theo [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Add-named-defun-for-transpose-sexps-default-function.patch --] [-- Type: text/x-patch, Size: 4355 bytes --] From 442cb4676d359faf23abb15799338f2025c797cb Mon Sep 17 00:00:00 2001 From: Theodor Thornhill <theo@thornhill.no> Date: Mon, 9 Jan 2023 07:52:38 +0100 Subject: [PATCH] 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 60dab575da6..3aa8f2abb77 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 690968ca938..c8c5542caee 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -8436,37 +8436,39 @@ transpose-words (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 -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-09 6:57 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-09 8:47 ` Mickey Petersen 2023-01-09 12:20 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 7+ messages in thread From: Mickey Petersen @ 2023-01-09 8:47 UTC (permalink / raw) To: Theodor Thornhill; +Cc: Yuan Fu, 60654 Theodor Thornhill <theo@thornhill.no> writes: > Theodor Thornhill <theo@thornhill.no> writes: > >> On 9 January 2023 04:39:34 CET, Yuan Fu <casouri@gmail.com> wrote: >>> >>>Mickey Petersen <mickey@masteringemacs.org> writes: >>> >>>> The defvar `transpose-sexps-function' holds on to a lambda function. >>>> Would it be possible to make it an actual function? Its purpose is >>>> rather important as it is the default transposition function that was >>>> moved out of `transpose-sexps'. Being able to reliably access it when >>>> `transpose-sexps-function' is overriden is useful. >>> >>>CC’d Theo. >>> >>>Yuan >> >> Thanks yuan. >> >> Yeah I'll make this change and call the new function transpose-sexps-default-function. >> >> Apologies for any inconvenience :) >> >> Theo > > > How about this, Mickey. Is this something you can work with? > Looks perfect. Nice one, Theo. Kind regards, Mickey. > Theo > > [2. text/x-patch; 0001-Add-named-defun-for-transpose-sexps-default-function.patch]... ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-09 8:47 ` Mickey Petersen @ 2023-01-09 12:20 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 0 replies; 7+ messages in thread From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-09 12:20 UTC (permalink / raw) To: Mickey Petersen; +Cc: Yuan Fu, 60654 Mickey Petersen <mickey@masteringemacs.org> writes: > Theodor Thornhill <theo@thornhill.no> writes: > >> Theodor Thornhill <theo@thornhill.no> writes: >> >>> On 9 January 2023 04:39:34 CET, Yuan Fu <casouri@gmail.com> wrote: >>>> >>>>Mickey Petersen <mickey@masteringemacs.org> writes: >>>> >>>>> The defvar `transpose-sexps-function' holds on to a lambda function. >>>>> Would it be possible to make it an actual function? Its purpose is >>>>> rather important as it is the default transposition function that was >>>>> moved out of `transpose-sexps'. Being able to reliably access it when >>>>> `transpose-sexps-function' is overriden is useful. >>>> >>>>CC’d Theo. >>>> >>>>Yuan >>> >>> Thanks yuan. >>> >>> Yeah I'll make this change and call the new function transpose-sexps-default-function. >>> >>> Apologies for any inconvenience :) >>> >>> Theo >> >> >> How about this, Mickey. Is this something you can work with? >> > > Looks perfect. Nice one, Theo. > > Kind regards, > > Mickey. > Great! Yuan, can you install for me? Theo ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar 2023-01-08 10:46 bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar Mickey Petersen 2023-01-09 3:39 ` Yuan Fu @ 2023-01-09 20:35 ` Yuan Fu 1 sibling, 0 replies; 7+ messages in thread From: Yuan Fu @ 2023-01-09 20:35 UTC (permalink / raw) To: Theodor Thornhill; +Cc: 60654-done, Mickey Petersen Theodor Thornhill <theo@thornhill.no> writes: > Mickey Petersen <mickey@masteringemacs.org> writes: > >> Theodor Thornhill <theo@thornhill.no> writes: >> >>> Theodor Thornhill <theo@thornhill.no> writes: >>> >>>> On 9 January 2023 04:39:34 CET, Yuan Fu <casouri@gmail.com> wrote: >>>>> >>>>>Mickey Petersen <mickey@masteringemacs.org> writes: >>>>> >>>>>> The defvar `transpose-sexps-function' holds on to a lambda function. >>>>>> Would it be possible to make it an actual function? Its purpose is >>>>>> rather important as it is the default transposition function that was >>>>>> moved out of `transpose-sexps'. Being able to reliably access it when >>>>>> `transpose-sexps-function' is overriden is useful. >>>>> >>>>>CC’d Theo. >>>>> >>>>>Yuan >>>> >>>> Thanks yuan. >>>> >>>> Yeah I'll make this change and call the new function transpose-sexps-default-function. >>>> >>>> Apologies for any inconvenience :) >>>> >>>> Theo >>> >>> >>> How about this, Mickey. Is this something you can work with? >>> >> >> Looks perfect. Nice one, Theo. >> >> Kind regards, >> >> Mickey. >> > > Great! Yuan, can you install for me? > > Theo Sure, I applied it to trunk. Yuan ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-09 20:35 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-08 10:46 bug#60654: 30.0.50; tree-sitter: `transpose-sexps-function' uses a lambda in a defvar Mickey Petersen 2023-01-09 3:39 ` Yuan Fu 2023-01-09 6:23 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 6:57 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 8:47 ` Mickey Petersen 2023-01-09 12:20 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-09 20:35 ` Yuan Fu
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).