Subject: bug#73773: 31.0.50; void-variable subword-mode in python-mode

From: Stephen Berman <[email-masked]>
Date: Sat, 12 Oct 2024 17:47:20 +0200

0. emacs -Q
1. M-x menu-bar-mode (disable menu bar)
3. Visit a file in python-mode, e.g. modules/modhelp.py in the Emacs
   sources.
4. Pressing <f10> or C-mouse-3 pops up the global menu as usual.
5. M-x toggle-debug-on-error
6. Now pressing <f10> or C-mouse-3 does not pop up the global menu but
   instead a *Backtrace* buffer pops open displaying "Lisp error:
   (void-variable subword-mode)".

This is due to the following commit:

commit 29a760711731ce49965079e72d76b26ef3b7bcb4
Author:     Stefan Kangas <[email-masked]>
AuthorDate: Sat Sep 21 14:07:29 2024 +0200
Commit:     Stefan Kangas <[email-masked]>
CommitDate: Sat Sep 21 14:08:09 2024 +0200

  Add subword-mode toggle to python-mode menu

  * lisp/progmodes/python.el (python-mode-map): Add subword-mode
  toggle to menu.

The attached patch fixes this problem.

In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.2) of 2024-10-12 built on strobelfssd
Repository revision: c3600916b6942b2a9797ec2248d29cb337c7c6fa
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101013
System Description: Linux From Scratch r12.2-17-systemd

Configured using:
 'configure -C 'CFLAGS=-Og -g3' PKG_CONFIG_PATH=/opt/qt6/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 812e28268c2..4e3b18a327b 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -361,6 +361,11 @@ python-mode-map
   ;; Utilities
   "<remap> <complete-symbol>" #'completion-at-point)
 
+;; Define this so invoking menu-bar-open in a python-mode buffer does
+;; not cause a void-variable error when subword-mode is not loaded,
+;; menu-bar-mode is disabled and debug-on-error is enabled (bug#xxx).
+(defvar subword-mode nil)
+
 (easy-menu-define python-menu python-mode-map
   "Menu used for ´python-mode'."
   '("Python"