GNU bug report logs - #77755
31.0.50; Synchronous man does not handle error cases properly

Previous Next

Package: emacs;

Reported by: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>

Date: Fri, 11 Apr 2025 22:21:02 UTC

Severity: normal

Fixed in version 31.0.50

Done: Juri Linkov <juri <at> linkov.net>

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 77755 in the body.
You can then email your comments to 77755 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


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#77755; Package emacs. (Fri, 11 Apr 2025 22:21:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 11 Apr 2025 22:21:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; Synchronous man does not handle error cases properly
Date: Sat, 12 Apr 2025 00:19:27 +0200
[Message part 1 (text/plain, inline)]
This is about some deficiencies with the user option
`Man-prefer-synchronous-call', which got added in Emacs 30.  So it is in
fact also a bug in Emacs 30.  (Thanks to Sebastian for adding that new
option, prior to Emacs 30 I have been using my private hacks to get
synchronous man page invocations.)

Anyway, when using a non-nil value for that option, some edge/error
cases behave awkwardly:


1. ./src/emacs -Q --eval '(setq Man-prefer-synchronous-call t)'

   M-x man RET foobarbaz RET

   Results in the error "Can't find the foobarbaz manpage" (OK) with the
   minibuffer window being selected (not OK).

   The minibuffer being selected is IMO a result of the following form
   from function `Man-bgproc-sentinel':

     (let ((old-window (old-selected-window)))
       (when (window-live-p old-window)
         (select-window old-window)))

   IIUC, that form (or its predecessor) got added by Juri in bug#38164,
   commit 611b85b6 to keep the minibuffer selected when an async `man'
   fails at the time when the user is operating in the minibuffer.

   Unfortunately, that hack ensures that the minibuffer is *always*
   selected if a synchronous `man' fails.


2. ./src/emacs -Q --eval '(setq Man-prefer-synchronous-call t)'

   M-x man RET -k foobarbaz RET

   Results in the error "Can't find the k foobarbaz manpage" (not OK),
   again with the minibuffer window being selected (not OK).

   With async `man' this results in the error message "-k foobarbaz: no
   matches", which I consider OK.

   Here the problem is IMO that the following branch to detect failing
   "man -k" calls in function `Man-bgproc-sentinel':

     ((and (string-match "\\(\\`\\|\\s-\\)-k\\s-" Man-arguments)
           (eq (process-status process) 'exit)
           (= (process-exit-status process) 0)
           (= (point-min) (point-max)))
      (setq message (format "%s: no matches" Man-arguments)
            delete-buff t))

   never gets selected in the synchronous case since the `(eq
   (process-status process) 'exit)' form always evaluates to nil for
   that case.


The attached tentative patch would fix both issues.

What do you think?


In GNU Emacs 31.0.50 (build 25, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.16.0) of 2025-04-11 built on sappc2
Repository revision: 695edc5b55bec645fe2df8924513826b202022b6
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12201009
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure --with-native-compilation --with-mailutils'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINERAMA XINPUT2 XPM XRANDR GTK3
ZLIB

Important settings:
  value of $LC_COLLATE: POSIX
  value of $LC_TIME: POSIX
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr comp-run bytecomp byte-compile comp-common rx
emacsbug lisp-mnt message mailcap yank-media puny dired dired-loaddefs
rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config
gnus-util text-property-search time-date subr-x mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
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 touch-screen 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 dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames native-compile emacs)

Memory information:
((conses 16 58466 9024) (symbols 48 6197 0) (strings 32 15326 1600)
 (string-bytes 1 470967) (vectors 16 9931)
 (vector-slots 8 139569 9476) (floats 8 22 13) (intervals 56 242 0)
 (buffers 984 10))
[0001-Better-handle-errors-after-sync-man-invocations.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#77755; Package emacs. (Tue, 15 Apr 2025 18:23:04 GMT) Full text and rfc822 format available.

Message #8 received at 77755 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>
Cc: 77755 <at> debbugs.gnu.org
Subject: Re: bug#77755: 31.0.50; Synchronous man does not handle error cases
 properly
Date: Tue, 15 Apr 2025 21:21:25 +0300
close 77755 31.0.50
thanks

> The attached tentative patch would fix both issues.
>
> What do you think?

Thanks, everything looks correct, so I pushed your patch.




bug marked as fixed in version 31.0.50, send any further explanations to 77755 <at> debbugs.gnu.org and Jens Schmidt <jschmidt4gnu <at> vodafonemail.de> Request was from Juri Linkov <juri <at> linkov.net> to control <at> debbugs.gnu.org. (Tue, 15 Apr 2025 18:23:08 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 14 May 2025 11:25:13 GMT) Full text and rfc822 format available.

This bug report was last modified 31 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.