* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' @ 2022-08-13 16:17 Andrea Greselin 2022-08-13 17:30 ` Eli Zaretskii 0 siblings, 1 reply; 10+ messages in thread From: Andrea Greselin @ 2022-08-13 16:17 UTC (permalink / raw) To: 57179 [-- Attachment #1: Type: text/plain, Size: 5294 bytes --] Hi all, I have this function (the part at issue here should be the first line): (defun my-recenter-after-jump (window _window-start-after) "Recenter the point after a non-scroll command brings it out of view. This function is meant to be called from the hook ‘window-scroll-functions’." (with-selected-window window (unless (or (> 0.001 (float-time (time-subtract (current-time) buffer-display-time))) ; Don’t run this function after a change of buffer. Non-nil here means the selected window displayed the current buffer less than a thousandth of a second ago, so it was most likely a change of buffer that triggered ‘window-scroll-functions’, not a scroll. See also https://emacs.stackexchange.com/questions/63558/how-to-distinguish-a-scroll-from-a-change-of-buffer-in-a-function-called-from-w ;; Don’t recenter for these ;; - major modes (memq major-mode '(help-mode ; ‘my-recenter-after-jump’ breaks scrolling with SPC/<backspace> in Help mode and Info mode because they don’t obey ‘scroll-preserve-screen-position’ and ‘scroll-error-top-bottom’. Info-mode)) ;; - minor modes isearch-mode ; For Isearch, change the value of ‘scroll-conservatively’ and ‘hscroll-step’ in ‘isearch-update-post-hook’ and ‘isearch-mode-end-hook’. Doing so allows recentering the point even after a purely horizontal scroll. (bound-and-true-p view-mode) ; ‘my-recenter-after-jump’ breaks scrolling with SPC/<backspace> in View mode because View mode doesn’t obey ‘scroll-preserve-screen-position’ and ‘scroll-error-top-bottom’. (bound-and-true-p follow-mode) ;; - commands (and (symbolp last-command) (get last-command 'scroll-command)) ; Don’t check the value of the ‘scroll-command’ property for anonymous commands (it can’t be t anyway). (memq last-command '(recenter-top-bottom query-replace query-replace-regexp ; Query replacement is taken care of by the ‘recentering-on-jump’ advice to ‘perform-replace’, which allows recentering the point after a purely horizontal scroll. previous-line next-line ; Don’t let these commands trigger ‘my-recenter-after-jump’. It happens when Emacs has a moment of lag during which the point slips beyond the scroll margin. previous-logical-line next-logical-line))) (let* ((bottom-line-before (line-number-at-pos (window-end))) (bottom-line-after (line-number-at-pos (window-end nil 'update))) ; NB: ‘window-start’ doesn’t take the ‘update’ argument. (vertical-displacement (- bottom-line-after bottom-line-before))) (unless (> 2 (abs vertical-displacement)) ; The purpose of having the first ‘unless’ separate from this one is to call ‘line-number-at-pos’ only when it’s needed, because it can be slow. See (2 links) https://emacs.stackexchange.com/questions/51648/how-to-detect-the-number-of-lines-scrolled-from-scroll-up-down/51664#51664, https://emacs.stackexchange.com/questions/3821/a-faster-method-to-obtain-line-number-at-pos-in-large-buffers (recenter) (when truncate-lines (my-horizontal-recenter))))))) ; REVIEW: Isn’t there a built-in function for recentering the point horizontally? which I call from `window-scroll-functions` like this (add-hook 'window-scroll-functions #'my-recenter-after-jump) It's worked until I upgraded from v. 28.1 (from Fedora’s repos) to 29.0.50 (commit 6de88b6b02). Now I get Error in window-scroll-functions (my-recenter-after-jump): (wrong-number-of-arguments (lambda (window _window-start-after) "Recenter the point after a non-scroll command brings it out of view. This function is meant to be called from the hook ‘window-scroll-functions’." (let ((save-selected-window--state (internal--before-with-selected-window window))) (save-current-buffer (unwind-protect (progn (select-window (car save-selected-window--state) 'norecord) (if (or (> 0.001 (float-time (time-subtract (current-time) buffer-display-time))) (memq major-mode '(help-mode Info-mode)) isearch-mode (and (boundp 'view-mode) view-mode) (and (boundp 'follow-mode) follow-mode) (and (symbolp last-command) (get last-command 'scroll-command)) (memq last-command '(recenter-top-bottom query-replace query-replace-regexp previous-line next-line previous-logical-line next-logical-line))) nil (let* ((bottom-line-before (line-number-at-pos (window-end))) (bottom-line-after (line-number-at-pos (window-end nil 'update))) (vertical-displacement (- bottom-line-after bottom-line-before))) (if (> 2 (abs vertical-displacement)) nil (recenter) (if truncate-lines (progn (my-horizontal-recenter))))))) (internal--after-with-selected-window save-selected-window--state))))) 0) All the best, Andrea [-- Attachment #2: Type: text/html, Size: 6326 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-13 16:17 bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' Andrea Greselin @ 2022-08-13 17:30 ` Eli Zaretskii 2022-08-13 20:50 ` Michael Heerdegen 2022-08-13 23:07 ` Andrea Greselin 0 siblings, 2 replies; 10+ messages in thread From: Eli Zaretskii @ 2022-08-13 17:30 UTC (permalink / raw) To: Andrea Greselin; +Cc: 57179 > From: Andrea Greselin <greselin.andrea@gmail.com> > Date: Sat, 13 Aug 2022 18:17:54 +0200 > > It's worked until I upgraded from v. 28.1 (from Fedora’s repos) to > 29.0.50 (commit 6de88b6b02). Now I get > > Error in window-scroll-functions (my-recenter-after-jump): > (wrong-number-of-arguments (lambda (window _window-start-after) "Recenter > the point after a non-scroll command brings it out of view. > This function is meant to be called from the hook > ‘window-scroll-functions’." (let ((save-selected-window--state > (internal--before-with-selected-window window))) (save-current-buffer > (unwind-protect (progn (select-window (car save-selected-window--state) The backtrace seems to show that a function that is called is different from the one you show as your hook function. So I think you should look closer into how you set up window-scroll-functions. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-13 17:30 ` Eli Zaretskii @ 2022-08-13 20:50 ` Michael Heerdegen 2022-08-14 0:19 ` Michael Heerdegen 2022-08-15 12:24 ` Alan Mackenzie 2022-08-13 23:07 ` Andrea Greselin 1 sibling, 2 replies; 10+ messages in thread From: Michael Heerdegen @ 2022-08-13 20:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Andrea Greselin, 57179 Eli Zaretskii <eliz@gnu.org> writes: > The backtrace seems to show that a function that is called is > different from the one you show as your hook function. So I think you > should look closer into how you set up window-scroll-functions. I too have seen this problem just yesterday. There must be something going on, it is unlikely that this is a coincidence. In the backtrace I saw that the function had been called by name with zero arguments. But on top of the backtrace the symbol-function had been shown (a closure). I also wondered about that. I verified that the function was only accessible via `window-scroll-functions'. My code did not use the function in any other place. Some entries below in the backtrace was `redisplay' - so... somehow `redisplay' is sometimes calling functions in `window-scroll-functions' with zero arguments. Maybe the buffer local binding of `window-scroll-functions'. Please tell whether this information suffices and you already have some idea or if I should try to create a recipe. I guess this must be related to a recent change from within the last few days. Michael. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-13 20:50 ` Michael Heerdegen @ 2022-08-14 0:19 ` Michael Heerdegen 2022-08-14 7:18 ` Eli Zaretskii 2022-08-14 13:22 ` Alan Mackenzie 2022-08-15 12:24 ` Alan Mackenzie 1 sibling, 2 replies; 10+ messages in thread From: Michael Heerdegen @ 2022-08-14 0:19 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Alan Mackenzie, Andrea Greselin, 57179 [-- Attachment #1: Type: text/plain, Size: 420 bytes --] Michael Heerdegen <michael_heerdegen@web.de> writes: > Please tell whether this information suffices and you already have some > idea or if I should try to create a recipe. I guess this must be > related to a recent change from within the last few days. Reverting a part of 48215c41d1 New debugging facility: backtraces from errors in Lisp called from redisplay (Alan Mackenzie <acm@muc.de> 2022-08-11) like this: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Test-for-57179.patch --] [-- Type: text/x-diff, Size: 944 bytes --] From ffb7c3d558b599bcc84f1bf4fb4388569892d927 Mon Sep 17 00:00:00 2001 From: Michael Heerdegen <michael_heerdegen@web.de> Date: Sun, 14 Aug 2022 02:14:58 +0200 Subject: [PATCH] Test for #57179 --- src/xdisp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 719b131baa..47eaddabce 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -18221,8 +18221,8 @@ run_window_scroll_functions (Lisp_Object window, struct text_pos startp) { specpdl_ref count = SPECPDL_INDEX (); specbind (Qinhibit_quit, Qt); - safe_run_hooks_2 - (Qwindow_scroll_functions, window, make_fixnum (CHARPOS (startp))); + run_hook_with_args_2 (Qwindow_scroll_functions, window, + make_fixnum (CHARPOS (startp))); unbind_to (count, Qnil); SET_TEXT_POS_FROM_MARKER (startp, w->start); /* In case the hook functions switch buffers. */ -- 2.30.2 [-- Attachment #3: Type: text/plain, Size: 106 bytes --] seems to fix my incarnation of this problem. Can it be that? CC'ing Alan (the author). TIA, Michael. ^ permalink raw reply related [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-14 0:19 ` Michael Heerdegen @ 2022-08-14 7:18 ` Eli Zaretskii 2022-08-14 13:22 ` Alan Mackenzie 1 sibling, 0 replies; 10+ messages in thread From: Eli Zaretskii @ 2022-08-14 7:18 UTC (permalink / raw) To: Michael Heerdegen; +Cc: acm, greselin.andrea, 57179 > From: Michael Heerdegen <michael_heerdegen@web.de> > Cc: Andrea Greselin <greselin.andrea@gmail.com>, 57179@debbugs.gnu.org, > Alan Mackenzie <acm@muc.de> > Date: Sun, 14 Aug 2022 02:19:31 +0200 > > Michael Heerdegen <michael_heerdegen@web.de> writes: > > > Please tell whether this information suffices and you already have some > > idea or if I should try to create a recipe. I guess this must be > > related to a recent change from within the last few days. > > Reverting a part of > > 48215c41d1 New debugging facility: backtraces from errors in Lisp called > from redisplay (Alan Mackenzie <acm@muc.de> 2022-08-11) Indeed, the new function safe_run_hooks_2 has a bug. In a build with enable-checking I get an assertion violation in safe_run_hook_funcall, because nargs is not 2 but 4. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-14 0:19 ` Michael Heerdegen 2022-08-14 7:18 ` Eli Zaretskii @ 2022-08-14 13:22 ` Alan Mackenzie 2022-08-14 23:00 ` Michael Heerdegen 2022-08-15 9:42 ` Andrea Greselin 1 sibling, 2 replies; 10+ messages in thread From: Alan Mackenzie @ 2022-08-14 13:22 UTC (permalink / raw) To: Michael Heerdegen; +Cc: acm, Eli Zaretskii, 57179, Andrea Greselin Hello, Michael and Andrea. On Sun, Aug 14, 2022 at 02:19:31 +0200, Michael Heerdegen wrote: > Michael Heerdegen <michael_heerdegen@web.de> writes: > > Please tell whether this information suffices and you already have some > > idea or if I should try to create a recipe. I guess this must be > > related to a recent change from within the last few days. > Reverting a part of > 48215c41d1 New debugging facility: backtraces from errors in Lisp called > from redisplay (Alan Mackenzie <acm@muc.de> 2022-08-11) > like this: > From ffb7c3d558b599bcc84f1bf4fb4388569892d927 Mon Sep 17 00:00:00 2001 > From: Michael Heerdegen <michael_heerdegen@web.de> > Date: Sun, 14 Aug 2022 02:14:58 +0200 > Subject: [PATCH] Test for #57179 > > --- > src/xdisp.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/xdisp.c b/src/xdisp.c > index 719b131baa..47eaddabce 100644 > --- a/src/xdisp.c > +++ b/src/xdisp.c > @@ -18221,8 +18221,8 @@ run_window_scroll_functions (Lisp_Object window, struct text_pos startp) > { > specpdl_ref count = SPECPDL_INDEX (); > specbind (Qinhibit_quit, Qt); > - safe_run_hooks_2 > - (Qwindow_scroll_functions, window, make_fixnum (CHARPOS (startp))); > + run_hook_with_args_2 (Qwindow_scroll_functions, window, > + make_fixnum (CHARPOS (startp))); > unbind_to (count, Qnil); > SET_TEXT_POS_FROM_MARKER (startp, w->start); > /* In case the hook functions switch buffers. */ > -- > 2.30.2 > > seems to fix my incarnation of this problem. Can it be that? CC'ing > Alan (the author). Yes, this was indeed the problem. Can I ask you please, instead of applying your patch (above) to try out the following patch, which works for me. Thanks! diff --git a/src/keyboard.c b/src/keyboard.c index 8a2b7d58c4..1d7125a0a3 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1832,8 +1832,16 @@ adjust_point_for_property (ptrdiff_t last_pt, bool modified) static Lisp_Object safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *args) { - eassert (nargs == 2); - return call0 (args[1]); + eassert (nargs >= 2 && nargs <= 4); + switch (nargs) + { + case 2: + return call0 (args[1]); + case 3: + return call1 (args[1], args[2]); + default: + return call2 (args[1], args[2], args[3]); + } } /* Subroutine for safe_run_hooks: handle an error by clearing out the function @@ -1878,11 +1886,27 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, Lisp_Object *args) static Lisp_Object safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args) { - eassert (nargs == 2); + eassert (nargs >= 2 && nargs <= 4); /* Yes, run_hook_with_args works with args in the other order. */ - internal_condition_case_n (safe_run_hooks_1, - 2, ((Lisp_Object []) {args[1], args[0]}), - Qt, safe_run_hooks_error); + switch (nargs) + { + case 2: + internal_condition_case_n (safe_run_hooks_1, + 2, ((Lisp_Object []) {args[1], args[0]}), + Qt, safe_run_hooks_error); + break; + case 3: + internal_condition_case_n (safe_run_hooks_1, + 3, ((Lisp_Object []) {args[1], args[0], args[2]}), + Qt, safe_run_hooks_error); + break; + default: + internal_condition_case_n (safe_run_hooks_1, + 4, ((Lisp_Object []) + {args[1], args[0], args[2], args[3]}), + Qt, safe_run_hooks_error); + break; + } return Qnil; } > TIA, > Michael. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply related [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-14 13:22 ` Alan Mackenzie @ 2022-08-14 23:00 ` Michael Heerdegen 2022-08-15 9:42 ` Andrea Greselin 1 sibling, 0 replies; 10+ messages in thread From: Michael Heerdegen @ 2022-08-14 23:00 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, 57179, Andrea Greselin Alan Mackenzie <acm@muc.de> writes: > Hello, Michael and Andrea. > [patch...] Thanks. Yes, seems my case is fixed, and I didn't see any new problems so far. Michael. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-14 13:22 ` Alan Mackenzie 2022-08-14 23:00 ` Michael Heerdegen @ 2022-08-15 9:42 ` Andrea Greselin 1 sibling, 0 replies; 10+ messages in thread From: Andrea Greselin @ 2022-08-15 9:42 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Michael Heerdegen, Eli Zaretskii, 57179 [-- Attachment #1: Type: text/plain, Size: 219 bytes --] On Sun, 14 Aug 2022 at 15:22, Alan Mackenzie <acm@muc.de> wrote: > > Can I ask you please, instead of applying your patch (above) to try > > out the following patch, which works for me. > It fixes my bug too. Andrea [-- Attachment #2: Type: text/html, Size: 567 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-13 20:50 ` Michael Heerdegen 2022-08-14 0:19 ` Michael Heerdegen @ 2022-08-15 12:24 ` Alan Mackenzie 1 sibling, 0 replies; 10+ messages in thread From: Alan Mackenzie @ 2022-08-15 12:24 UTC (permalink / raw) To: Michael Heerdegen, Andrea Greselin; +Cc: Eli Zaretskii, 57179-done Hello, Michael and Andrea. Thanks for testing my patch. I have just committed the patch to master, and I am closing the bug with this post. On Sat, Aug 13, 2022 at 22:50:47 +0200, Michael Heerdegen wrote: > Eli Zaretskii <eliz@gnu.org> writes: > > The backtrace seems to show that a function that is called is > > different from the one you show as your hook function. So I think you > > should look closer into how you set up window-scroll-functions. > I too have seen this problem just yesterday. There must be something > going on, it is unlikely that this is a coincidence. > In the backtrace I saw that the function had been called by name with > zero arguments. But on top of the backtrace the symbol-function had > been shown (a closure). I also wondered about that. > I verified that the function was only accessible via > `window-scroll-functions'. My code did not use the function in any > other place. > Some entries below in the backtrace was `redisplay' - so... somehow > `redisplay' is sometimes calling functions in `window-scroll-functions' > with zero arguments. Maybe the buffer local binding of > `window-scroll-functions'. > Please tell whether this information suffices and you already have some > idea or if I should try to create a recipe. I guess this must be > related to a recent change from within the last few days. > Michael. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' 2022-08-13 17:30 ` Eli Zaretskii 2022-08-13 20:50 ` Michael Heerdegen @ 2022-08-13 23:07 ` Andrea Greselin 1 sibling, 0 replies; 10+ messages in thread From: Andrea Greselin @ 2022-08-13 23:07 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 57179 [-- Attachment #1: Type: text/plain, Size: 388 bytes --] On Sat, 13 Aug 2022 at 19:30, Eli Zaretskii <eliz@gnu.org> wrote: > > > The backtrace seems to show that a function that is called is > > different from the one you show as your hook function. So I think you > > should look closer into how you set up window-scroll-functions. > ‘my-recenter-after-jump’ is the only thing I add to ‘window-scroll-functions’. Andrea [-- Attachment #2: Type: text/html, Size: 708 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-08-15 12:24 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-13 16:17 bug#57179: 29.0.50: 'wrong-number-of-arguments' for function of two arguments called from 'window-scroll-functions' Andrea Greselin 2022-08-13 17:30 ` Eli Zaretskii 2022-08-13 20:50 ` Michael Heerdegen 2022-08-14 0:19 ` Michael Heerdegen 2022-08-14 7:18 ` Eli Zaretskii 2022-08-14 13:22 ` Alan Mackenzie 2022-08-14 23:00 ` Michael Heerdegen 2022-08-15 9:42 ` Andrea Greselin 2022-08-15 12:24 ` Alan Mackenzie 2022-08-13 23:07 ` Andrea Greselin
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).