Package: emacs;
Reported by: Yikai Zhao <yikai <at> z1k.dev>
Date: Wed, 26 Jul 2023 02:11:01 UTC
Severity: normal
Found in version 30.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 64866 in the body.
You can then email your comments to 64866 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 02:11:01 GMT) Full text and rfc822 format available.Yikai Zhao <yikai <at> z1k.dev>
:bug-gnu-emacs <at> gnu.org
.
(Wed, 26 Jul 2023 02:11:01 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Yikai Zhao <yikai <at> z1k.dev> To: bug-gnu-emacs <at> gnu.org Subject: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 10:10:08 +0800
After updating to recent master version of emacs, emacsclient would block for an extra 2 seconds when some error is raised from command. Minimal reproducable command: emacsclient -s <...> -e '(error "x")' Expected behavior: this command should return immediately Current behavior: this command take 2 second Why it affects me: I bind some keyboard shortcut globally to a script to move either from emacs window or i3wm window. It does something like this: emacsclient -e '(windmove-right)' || i3-msg focus right It rely on the behavior that, if I'm currently in the rightmost emacs buffer, '(windmove-right)' would return an error and fallback to use i3-msg to move to another frame. With this bug I mentioned, it would introduce 2-second delay on this action. In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) of 2023-07-23 built on lilac-0 Repository revision: 5d2d28458d0eb378a7e94363ef716e8648ef129a Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101008 System Description: Arch Linux Configured using: 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-modules --without-libotf --without-m17n-flt --without-gconf --with-native-compilation=yes --with-native-compilation=aot --with-sound=no --with-xwidgets --with-tree-sitter --without-gpm '--program-transform-name=s/\([ec]tags\)/\1.emacs/' 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -g -ffile-prefix-map=/build/emacs-native-comp-git/src=/usr/src/debug/emacs-native-comp-git -flto=auto' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto'' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=fcitx locale-coding-system: utf-8-unix Major mode: VTerm Minor modes in effect: sudo-edit-indicator-mode: t windmove-mode: t projectile-mode: t recentf-mode: t global-git-commit-mode: t magit-auto-revert-mode: t pixel-scroll-precision-mode: t server-mode: t winner-mode: t global-auto-revert-mode: t save-place-mode: t vertico-mode: t which-key-mode: t global-evil-visualstar-mode: t evil-visualstar-mode: t evil-snipe-mode: t evil-snipe-local-mode: t evil-owl-mode: t global-evil-surround-mode: t evil-surround-mode: t evil-commentary-mode: t evil-mode: t evil-local-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t buffer-read-only: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/blahgeek/.emacs.d/lib/cmake-mode/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode /home/blahgeek/.emacs.d/lib/protobuf-mode/protobuf-mode hides /usr/share/emacs/site-lisp/protobuf-mode /home/blahgeek/.emacs.d/lib/transient/lisp/transient hides /usr/share/emacs/30.0.50/lisp/transient /home/blahgeek/.emacs.d/lib/use-package/use-package hides /usr/share/emacs/30.0.50/lisp/use-package/use-package /home/blahgeek/.emacs.d/lib/use-package/use-package-lint hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-lint /home/blahgeek/.emacs.d/lib/use-package/use-package-jump hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-jump /home/blahgeek/.emacs.d/lib/use-package/use-package-ensure hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-ensure /home/blahgeek/.emacs.d/lib/use-package/use-package-ensure-system-package hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-ensure-system-package /home/blahgeek/.emacs.d/lib/use-package/use-package-diminish hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-diminish /home/blahgeek/.emacs.d/lib/use-package/use-package-delight hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-delight /home/blahgeek/.emacs.d/lib/use-package/use-package-core hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-core /home/blahgeek/.emacs.d/lib/use-package/use-package-bind-key hides /usr/share/emacs/30.0.50/lisp/use-package/use-package-bind-key /home/blahgeek/.emacs.d/lib/use-package/bind-key hides /usr/share/emacs/30.0.50/lisp/use-package/bind-key Features: (shadow sort mail-extr emacsbug evil-collection-woman woman evil-collection-man man rfc2104 sudo-edit conf-mode cl-print pulse consult-xref jka-compr evil-collection-shortdoc shortdoc dired-aux dired-x help-fns tramp-cmds windmove tramp-cache time-stamp lsp-diagnostics lsp-modeline evil-collection-view view lsp-zig lsp-tilt lsp-steep lsp-svelte lsp-sqls lsp-ruby-syntax-tree lsp-ruby-lsp lsp-yaml lsp-xml lsp-vimscript lsp-vhdl lsp-volar lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typeprof lsp-ttcn3 lsp-toml lsp-terraform lsp-tex lsp-sorbet lsp-solargraph lsp-rust lsp-rf lsp-ruff-lsp lsp-remark lsp-racket lsp-r lsp-purescript lsp-pylsp lsp-pyls lsp-pwsh lsp-php lsp-pls lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-magik lsp-nix lsp-nim lsp-nginx lsp-mint lsp-marksman lsp-markdown lsp-lua lsp-kotlin lsp-json lsp-javascript lsp-idris lsp-haxe lsp-groovy lsp-hack lsp-graphql lsp-glsl lsp-gleam lsp-go lsp-completion lsp-gdscript lsp-fsharp lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elixir lsp-elm lsp-dockerfile lsp-dhall lsp-d lsp-css lsp-csharp gnutls lsp-crystal lsp-cmake lsp-clojure lsp-semantic-tokens lsp-clangd dom lsp-beancount lsp-bash lsp-astro lsp-ansible lsp-angular lsp-ada lsp-actionscript lsp-haskell haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation haskell-string haskell-sort-imports haskell-lexeme haskell-align-imports haskell-complete-module haskell-ghc-support evil-collection-flymake flymake-proc flymake etags fileloop generator dabbrev haskell-customize lsp-pyright lsp-mode lsp-protocol evil-collection-xref xref spinner network-stream nsm evil-collection-markdown-mode markdown-mode lv inline ht ewoc vertico-directory evil-vimish-fold vimish-fold f f-shortdoc git-gutter-fringe fringe-helper git-gutter flycheck-posframe posframe flycheck-google-cpplint evil-collection-flycheck flycheck ligature whitespace hl-line display-line-numbers elec-pair hl-todo dtrt-indent tempel copilot evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete org-list org-footnote org-faces org-entities evil-collection-outline noutline outline ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs evil-collection-calendar cal-menu calendar cal-loaddefs org-version org-compat org-macs editorconfig editorconfig-core editorconfig-core-handle editorconfig-fnmatch s jsonrpc xonsh-mode evil-collection-sh-script sh-script smie executable evil-collection-python python treesit orderless projectile project evil-collection-grep grep ibuf-ext evil-collection-ibuffer ibuffer ibuffer-loaddefs recentf tree-widget wid-edit evil-collection-consult consult autoinsert vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs evil-collection-log-view log-view evil-collection-vc-git vc-git vc vc-dispatcher bug-reference company-keywords company-dabbrev-code company-dabbrev company-capf company-files company magit-bookmark evil-collection-magit magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit evil-collection-package-menu package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util url-handlers magit-repos magit-apply magit-wip magit-log which-func evil-collection-imenu imenu magit-diff smerge-mode diff evil-collection-diff-mode diff-mode git-commit evil-collection-log-edit log-edit message sendmail mailcap yank-media puny rfc822 mml mml-sec evil-collection-epa epa derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor magit-mode transient magit-git magit-base evil-collection-magit-section magit-section cursor-sensor crm dash time pixel-scroll cua-base auth-source-pass url-parse url-vars server fcitx dbus xml winner evil-collection-vterm vterm evil-collection-bookmark bookmark pp face-remap evil-collection-compile compile text-property-search evil-collection-term term disp-table ehelp find-func vterm-module term/xterm xterm cc-styles cc-align cc-engine cc-vars cc-defs google-c-style autorevert filenotify saveplace tramp-sh tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat xdg shell pcomplete evil-collection-comint comint ansi-osc parse-time iso8601 time-date auth-source eieio eieio-core password-cache json map ansi-color cus-load evil-collection-vertico vertico compat solarized-light-theme solarized-theme solarized solarized-faces color evil-collection-which-key which-key fringe-scale switch-buffer-functions evil-visualstar evil-snipe evil-owl format-spec evil-surround evil-commentary evil-commentary-integration evil-collection-tabulated-list evil-collection-tab-bar evil-collection-simple evil-collection-replace evil-collection-process-menu evil-collection-info evil-collection-indent evil-collection-image image-mode evil-collection-dired dired dired-loaddefs exif evil-collection-help evil-collection-elisp-mode evil-collection-eldoc evil-collection-buff-menu evil-collection annalist evil evil-integration evil-maps evil-commands reveal evil-jumps evil-command-window evil-search evil-ex evil-types evil-macros evil-repeat evil-states evil-core advice evil-common thingatpt rect evil-digraphs evil-vars ring edmacro kmacro byte-opt delight comp comp-cstr warnings icons cl-macs gv use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core yaml-mode-autoloads xonsh-mode-autoloads with-editor-autoloads which-key-autoloads wgrep-autoloads vterm-autoloads vimrc-mode-autoloads vimish-fold-autoloads vertico-autoloads use-package-autoloads treepy-autoloads transient-autoloads tempel-autoloads switch-buffer-functions-autoloads suggest-autoloads sudo-edit-autoloads spinner-autoloads solarized-theme-autoloads s-autoloads rust-mode-autoloads rg-autoloads rainbow-mode-autoloads pydoc-autoloads protobuf-mode-autoloads projectile-autoloads pr-review-autoloads posframe-autoloads popup-autoloads pkg-info-autoloads package-lint-autoloads org-tree-slide-autoloads orderless-autoloads markdown-mode-autoloads magit-autoloads lv-autoloads lua-mode-autoloads lsp-pyright-autoloads lsp-mode-autoloads lsp-haskell-autoloads loop-autoloads llama-autoloads ligature-autoloads kotlin-mode-autoloads just-mode-autoloads jsonnet-mode-autoloads jinja2-mode-autoloads ht-autoloads hl-todo-autoloads haskell-mode-autoloads groovy-mode-autoloads gptel-autoloads goto-chg-autoloads google-c-style-autoloads go-mode-autoloads gn-mode-autoloads git-link-autoloads git-gutter-fringe-autoloads git-gutter-autoloads ghub-autoloads fringe-helper-autoloads flycheck-posframe-autoloads flycheck-package-autoloads flycheck-autoloads fish-mode-autoloads fcitx-autoloads f-autoloads exec-path-from-shell-autoloads evil-visualstar-autoloads evil-vimish-fold-autoloads evil-surround-autoloads evil-snipe-autoloads evil-owl-autoloads evil-commentary-autoloads evil-collection-autoloads evil-autoloads epl-autoloads epkg-autoloads embark-autoloads emacsql-autoloads emacs-fringe-scale-autoloads editorconfig-autoloads dumb-jump-autoloads dtrt-indent-autoloads dockerfile-mode-autoloads devdocs-browser-autoloads delight-autoloads dash-autoloads cuda-mode-autoloads corfu-autoloads copilot-autoloads consult-flycheck-autoloads consult-autoloads compat-autoloads company-emoji-autoloads company-autoloads cmake-mode-autoloads closql-autoloads bpftrace-mode-autoloads borg-autoloads bazel-autoloads rx annalist-autoloads cl-extra help-mode add-node-modules-path-autoloads cl-seq borg loaddefs-gen generate-lisp-file lisp-mnt radix-tree subr-x pcase info cl-loaddefs cl-lib bytecomp byte-compile rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads xwidget-internal dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 914042 1065405) (symbols 48 49562 0) (strings 32 230924 32235) (string-bytes 1 8178630) (vectors 16 107518) (vector-slots 8 2649746 403281) (floats 8 648 8033) (intervals 56 29932 3912) (buffers 984 39))
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 02:30:02 GMT) Full text and rfc822 format available.Message #8 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Yikai Zhao <yikai <at> z1k.dev> Cc: 64866 <at> debbugs.gnu.org Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 05:30:11 +0300
> From: Yikai Zhao <yikai <at> z1k.dev> > Date: Wed, 26 Jul 2023 10:10:08 +0800 > > > After updating to recent master version of emacs, emacsclient would > block for an extra 2 seconds when some error is raised from command. That's deliberate: we want to allow the user to see the error message. It is not a bug. > Why it affects me: > > I bind some keyboard shortcut globally to a script to move either from > emacs window or i3wm window. It does something like this: > > emacsclient -e '(windmove-right)' || i3-msg focus right > > It rely on the behavior that, if I'm currently in the rightmost emacs > buffer, '(windmove-right)' would return an error and fallback to use > i3-msg to move to another frame. With this bug I mentioned, it would > introduce 2-second delay on this action. I don't think your quite special use case is a reason good enough to prevent users from seeing error messages. An error message that cannot be read is useless. Sorry.
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 15:52:02 GMT) Full text and rfc822 format available.Message #11 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Yikai Zhao <yikai <at> z1k.dev> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 64866 <at> debbugs.gnu.org Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 23:50:43 +0800
Thanks for your reply. That's OK, I understand your point. Previously I thought this should be treated as a bug because in my mind, "emacsclient -e xxxx" is similar to "emacs --eval=xxx" (and further, similar to "python -c xxxx"), which is a general interface to evaluate code (but maybe in a specific environment (the server)). In that case, arbitrarily sleeping some extra seconds in some valid evaluation scenarios seems unexpected. Now I can see why that's not the case as the primary function of emacsclient is to "tell a running Emacs to visit a file". For any others who may be interested, my use case can be workaround by using a slightly more complex command: RES="$(emacsclient -e "(condition-case nil (progn (windmove-right) t) (error nil))")" if [ "$RES" != "t" ]; then return 1 fi On Wed, Jul 26, 2023 at 10:29 AM Eli Zaretskii <eliz <at> gnu.org> wrote: > > > From: Yikai Zhao <yikai <at> z1k.dev> > > Date: Wed, 26 Jul 2023 10:10:08 +0800 > > > > > > After updating to recent master version of emacs, emacsclient would > > block for an extra 2 seconds when some error is raised from command. > > That's deliberate: we want to allow the user to see the error message. > It is not a bug. > > > Why it affects me: > > > > I bind some keyboard shortcut globally to a script to move either from > > emacs window or i3wm window. It does something like this: > > > > emacsclient -e '(windmove-right)' || i3-msg focus right > > > > It rely on the behavior that, if I'm currently in the rightmost emacs > > buffer, '(windmove-right)' would return an error and fallback to use > > i3-msg to move to another frame. With this bug I mentioned, it would > > introduce 2-second delay on this action. > > I don't think your quite special use case is a reason good enough to > prevent users from seeing error messages. An error message that > cannot be read is useless. > > Sorry.
Eli Zaretskii <eliz <at> gnu.org>
:Yikai Zhao <yikai <at> z1k.dev>
:Message #16 received at 64866-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Yikai Zhao <yikai <at> z1k.dev> Cc: 64866-done <at> debbugs.gnu.org Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 18:58:24 +0300
> From: Yikai Zhao <yikai <at> z1k.dev> > Date: Wed, 26 Jul 2023 23:50:43 +0800 > Cc: 64866 <at> debbugs.gnu.org > > That's OK, I understand your point. Previously I thought this should > be treated as a bug because in my mind, "emacsclient -e xxxx" is > similar to "emacs --eval=xxx" (and further, similar to "python -c > xxxx"), which is a general interface to evaluate code (but maybe in a > specific environment (the server)). In that case, arbitrarily sleeping > some extra seconds in some valid evaluation scenarios seems > unexpected. Now I can see why that's not the case as the primary > function of emacsclient is to "tell a running Emacs to visit a file". > > > For any others who may be interested, my use case can be workaround by > using a slightly more complex command: > > RES="$(emacsclient -e "(condition-case nil (progn (windmove-right) > t) (error nil))")" > if [ "$RES" != "t" ]; then > return 1 > fi Thanks, I'm therefore closing this bug.
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 18:08:01 GMT) Full text and rfc822 format available.Message #19 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Jim Porter <jporterbugs <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org>, Yikai Zhao <yikai <at> z1k.dev> Cc: 64866 <at> debbugs.gnu.org Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 11:07:24 -0700
On 7/25/2023 7:30 PM, Eli Zaretskii wrote: > I don't think your quite special use case is a reason good enough to > prevent users from seeing error messages. An error message that > cannot be read is useless. In this case, the user *can* see the error though: it's printed in the terminal that they called `emacsclient -e '(error "oops")'` from. Even without the 2 second delay, I don't think there would be any loss of information to the user (at least not that I can see). I've actually seen a related issue come up elsewhere: in our regression tests. When testing programmable completion in Eshell, I had to let-bind 'minibuffer-message-timeout' to 0 to prevent the 2 second delay, which occurred even in batch mode. (See 'em-cmpl-test/variable-ref-completion/directory' in "test/lisp/eshell/em-cmpl-tests.el".) I'm not sure why this delay is present in batch mode. (Going back to the original bug report, I'd consider 'emacsclient -e blah' to be analogous to batch mode.) Strangely, I tried running this and I still see a 2 second delay: emacsclient -e '(let ((minibuffer-message-timeout 0)) (error "oops"))' I'm not sure why that doesn't work...
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 18:48:02 GMT) Full text and rfc822 format available.Message #22 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Jim Porter <jporterbugs <at> gmail.com> Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 21:48:39 +0300
> Date: Wed, 26 Jul 2023 11:07:24 -0700 > Cc: 64866 <at> debbugs.gnu.org > From: Jim Porter <jporterbugs <at> gmail.com> > > On 7/25/2023 7:30 PM, Eli Zaretskii wrote: > > I don't think your quite special use case is a reason good enough to > > prevent users from seeing error messages. An error message that > > cannot be read is useless. > > In this case, the user *can* see the error though: it's printed in the > terminal that they called `emacsclient -e '(error "oops")'` from. emacsclient writes the error message to its stderr, but it immediately exits. When it exits and the Emacs frame is deleted, if it was a TTY frame which was displayed on that sane terminal, the message is deleted because Emacs clears the terminal when it deletes the frame. I guess your experience is from GUI frames or something? But even in that case it is not guaranteed that the error message will be seen, because emacsclient could be called with -nowait and in background. So I consider relying on this message as not a good idea, especially for error messages that usually tell something about the problem. Imagine the frustration of a user who sees the message flashing, but cannot read it. I think the delay that sometimes gets in the way is a small price to pay for this important feature. > Strangely, I tried running this and I still see a 2 second delay: > > emacsclient -e '(let ((minibuffer-message-timeout 0)) (error "oops"))' > > I'm not sure why that doesn't work... Why did you think it should? According to its documentation it only affects minibuffer-message. The 2-sec delay in the above case is done by an explicit call to sit-for with a hard-coded argument of 2 sec. See server-return-error.
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Wed, 26 Jul 2023 19:49:02 GMT) Full text and rfc822 format available.Message #25 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Jim Porter <jporterbugs <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 12:48:38 -0700
On 7/26/2023 11:48 AM, Eli Zaretskii wrote: > emacsclient writes the error message to its stderr, but it immediately > exits. When it exits and the Emacs frame is deleted, if it was a TTY > frame which was displayed on that sane terminal, the message is > deleted because Emacs clears the terminal when it deletes the frame. > > I guess your experience is from GUI frames or something? But even in > that case it is not guaranteed that the error message will be seen, > because emacsclient could be called with -nowait and in background. I was testing this without any frames (well, except for the invisible daemon frame). I see what you mean, though. Since most uses of "emacsclient" involve creating/using an Emacs frame, it makes sense that the code would be oriented around that case. > Why did you think it should? According to its documentation it only > affects minibuffer-message. The 2-sec delay in the above case is done > by an explicit call to sit-for with a hard-coded argument of 2 sec. > See server-return-error. Thanks for the pointer to this code. Looking at it, it doesn't seem easy to avoid this delay without causing the problems that you've mentioned.
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Thu, 27 Jul 2023 04:48:02 GMT) Full text and rfc822 format available.Message #28 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Jim Porter <jporterbugs <at> gmail.com> Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Thu, 27 Jul 2023 07:48:09 +0300
> Date: Wed, 26 Jul 2023 12:48:38 -0700 > Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev > From: Jim Porter <jporterbugs <at> gmail.com> > > On 7/26/2023 11:48 AM, Eli Zaretskii wrote: > > Why did you think it should? According to its documentation it only > > affects minibuffer-message. The 2-sec delay in the above case is done > > by an explicit call to sit-for with a hard-coded argument of 2 sec. > > See server-return-error. > > Thanks for the pointer to this code. Looking at it, it doesn't seem easy > to avoid this delay without causing the problems that you've mentioned. Yes, see bug#63629 for the problems that code attempts to solve.
bug-gnu-emacs <at> gnu.org
:bug#64866
; Package emacs
.
(Thu, 27 Jul 2023 05:35:02 GMT) Full text and rfc822 format available.Message #31 received at 64866 <at> debbugs.gnu.org (full text, mbox):
From: Jim Porter <jporterbugs <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev Subject: Re: bug#64866: 30.0.50; Emacsclient block for 2 seconds when error is raised from command Date: Wed, 26 Jul 2023 22:34:11 -0700
On 7/26/2023 9:48 PM, Eli Zaretskii wrote: >> Date: Wed, 26 Jul 2023 12:48:38 -0700 >> Cc: 64866 <at> debbugs.gnu.org, yikai <at> z1k.dev >> From: Jim Porter <jporterbugs <at> gmail.com> >> >> On 7/26/2023 11:48 AM, Eli Zaretskii wrote: >>> Why did you think it should? According to its documentation it only >>> affects minibuffer-message. The 2-sec delay in the above case is done >>> by an explicit call to sit-for with a hard-coded argument of 2 sec. >>> See server-return-error. >> >> Thanks for the pointer to this code. Looking at it, it doesn't seem easy >> to avoid this delay without causing the problems that you've mentioned. > > Yes, see bug#63629 for the problems that code attempts to solve. Thanks. I'll take a look at that in more detail in the next week or so, since at this point I'm just curious as to whether there's a way to get the best of both worlds. (At minimum, maybe I can add a regression test.)
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Thu, 24 Aug 2023 11:24:10 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.