From: Tassilo Horn <tsdh@gnu.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Jonas Bernoulli <jonas@bernoul.li>, 43716@debbugs.gnu.org
Subject: bug#43716: 28.0.50; Error with emacsclient <file>:
Date: Wed, 30 Sep 2020 17:51:24 +0200 [thread overview]
Message-ID: <87lfgrb6v7.fsf@gnu.org> (raw)
In-Reply-To: <87zh5748v6.fsf@gnus.org> (Lars Ingebrigtsen's message of "Wed, 30 Sep 2020 16:50:05 +0200")
Lars Ingebrigtsen <larsi@gnus.org> writes:
Hi Lars,
>> I found it. :-)
>>
>> lib-src/emacsclient.c
>> 2095 fprintf (stderr, "*ERROR*: %s", str);
>
> Ah! So the Emacs server reports it back to the client as an error.
> No wonder there's no backtrace here. :-/
>
> What about the following patch -- if that's the correct condition-case
> that's catching all this, then it should give you a backtrace in the
> server Emacs after reloading server.el.
That doesn't work but pointed into the right direction. I've edebugged
`server-process-filter' now, and the Wrong number of arguments message
appears when the (server-execute ...) form is evaluated.
--8<---------------cut here---------------start------------->8---
(process-put
proc 'continuation
(lambda ()
(with-current-buffer (get-buffer-create server-buffer)
;; Use the same cwd as the emacsclient, if possible, so
;; relative file names work correctly, even in `eval'.
(let ((default-directory
(if (and dir (file-directory-p dir))
dir default-directory)))
(server-execute proc files nowait commands
dontkill frame tty-name)))))
--8<---------------cut here---------------end--------------->8---
So I edebugged server-execute, and the error happens when calling
`server-switch-buffer' in:
--8<---------------cut here---------------start------------->8---
(cond
((or isearch-mode (minibufferp))
nil)
((and frame (null buffers))
(run-hooks 'server-after-make-frame-hook)
(message "%s" (substitute-command-keys
"When done with this frame, type \\[delete-frame]")))
((not (null buffers))
(run-hooks 'server-after-make-frame-hook)
(server-switch-buffer
(car buffers) nil (cdr (car files))
;; When triggered from "emacsclient -c", we popped up a
;; new frame. Ensure that we switch to the requested
;; buffer in that frame, and not in some other frame
;; where it may be displayed.
(plist-get (process-plist proc) 'frame))
--8<---------------cut here---------------end--------------->8---
And that is *advised* by with-editor.el (used by Magit):
--8<---------------cut here---------------start------------->8---
server-switch-buffer is a Lisp closure in ‘server.el’.
(server-switch-buffer &optional NEXT-BUFFER KILLED-ONE FILEPOS THIS-FRAME-ONLY)
This function has :around advice:
‘server-switch-buffer--with-editor-server-window-alist’.
--8<---------------cut here---------------end--------------->8---
From with-editor.el:
--8<---------------cut here---------------start------------->8---
(defun server-switch-buffer--with-editor-server-window-alist
(fn &optional next-buffer killed-one filepos)
"Honor `with-editor-server-window-alist' (which see)."
(let ((server-window (with-current-buffer
(or next-buffer (current-buffer))
(when with-editor-mode
(setq with-editor-previous-winconf
(current-window-configuration)))
(with-editor-server-window))))
(funcall fn next-buffer killed-one filepos)))
(advice-add 'server-switch-buffer :around
'server-switch-buffer--with-editor-server-window-alist)
--8<---------------cut here---------------end--------------->8---
I've added Jonas to the Cc. What breaks the advice is the new
`this-frame-only' parameter of `server-switch-buffer' Lars introduced on
master with 7f2c35d0287.
I guess with-editor.el needs to discriminate by emacs version or use a
&rest argument in the advice and checking the individual 3 (emacs < 28)
or 4 (emacs 28) arguments separately.
Bye,
Tassilo
next prev parent reply other threads:[~2020-09-30 15:51 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-30 7:03 bug#43716: 28.0.50; Error with emacsclient <file>: Tassilo Horn
2020-09-30 13:03 ` Lars Ingebrigtsen
2020-09-30 13:58 ` Tassilo Horn
2020-09-30 14:07 ` Lars Ingebrigtsen
2020-09-30 14:27 ` Eli Zaretskii
2020-09-30 14:38 ` Tassilo Horn
2020-09-30 14:54 ` Eli Zaretskii
2020-09-30 14:30 ` Tassilo Horn
2020-09-30 14:50 ` Lars Ingebrigtsen
2020-09-30 15:51 ` Tassilo Horn [this message]
2020-09-30 17:08 ` Tassilo Horn
2020-10-01 15:33 ` Tassilo Horn
2020-10-01 3:30 ` Lars Ingebrigtsen
2020-09-30 17:59 ` Noam Postavsky
2020-09-30 18:10 ` Lars Ingebrigtsen
2020-09-30 14:42 ` Andreas Schwab
2020-09-30 14:40 ` Andreas Schwab
2020-09-30 14:44 ` Tassilo Horn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lfgrb6v7.fsf@gnu.org \
--to=tsdh@gnu.org \
--cc=43716@debbugs.gnu.org \
--cc=jonas@bernoul.li \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).