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.

Full log


View this message in rfc822 format

From: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>
To: 77755 <at> debbugs.gnu.org
Subject: bug#77755: 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)]

This bug report was last modified 32 days ago.

Previous Next


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