From: Eli Zaretskii Date: Sat, 3 Dec 2022 09:16:41 +0000 (+0200) Subject: Revert "Make easy-mmode-defmap obsolete and adjust only caller" X-Git-Tag: emacs-29.0.90~1368 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3623d5c195dba3a663380e6a40fac3ea5b1cb491;p=emacs.git Revert "Make easy-mmode-defmap obsolete and adjust only caller" This reverts commit 8bb5c1bfec0929f2ba419e1c503f5acc01c336c2. That commit lost too many useful features in the GUD menus and caused several bugs, the last of them bug#59769. Do not merge to master. --- diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 7d54a84687b..8de4d8a9c2d 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -725,7 +725,9 @@ The M, BS, and ARGS arguments are as per that function. DOC is the constant's documentation. This macro is deprecated; use `defvar-keymap' instead." - (declare (doc-string 3) (indent 1) (obsolete defvar-keymap "29.1")) + ;; FIXME: Declare obsolete in favor of `defvar-keymap'. It is still + ;; used for `gud-menu-map' and `gud-minor-mode-map', so fix that first. + (declare (doc-string 3) (indent 1)) `(defconst ,m (easy-mmode-define-keymap ,bs nil (if (boundp ',m) ,m) ,(cons 'list args)) ,doc)) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 6ffcf497b93..143fa8c6798 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -159,96 +159,143 @@ Used to gray out relevant toolbar icons.") (t (comint-interrupt-subjob))))) -(defvar-keymap gud-mode-map - ;; Will inherit from comint-mode via define-derived-mode. - :doc "`gud-mode' keymap.") +(easy-mmode-defmap gud-menu-map + '(([help] "Info (debugger)" . gud-goto-info) + ([tooltips] menu-item "Show GUD tooltips" gud-tooltip-mode + :enable (and (not emacs-basic-display) + (display-graphic-p) + (fboundp 'x-show-tip)) + :visible (memq gud-minor-mode + '(gdbmi guiler dbx sdb xdb pdb)) + :button (:toggle . gud-tooltip-mode)) + ([refresh] "Refresh" . gud-refresh) + ([run] menu-item "Run" gud-run + :enable (not gud-running) + :visible (or (memq gud-minor-mode '(gdb dbx jdb)) + (and (eq gud-minor-mode 'gdbmi) + (or (not (gdb-show-run-p)) + (bound-and-true-p + gdb-active-process))))) + ([go] . (menu-item (if (bound-and-true-p gdb-active-process) + "Continue" "Run") + gud-go + :visible (and (eq gud-minor-mode 'gdbmi) + (gdb-show-run-p)))) + ([stop] menu-item "Stop" gud-stop-subjob + :visible (or (not (memq gud-minor-mode '(gdbmi pdb))) + (and (eq gud-minor-mode 'gdbmi) + (gdb-show-stop-p)))) + ([until] menu-item "Continue to selection" gud-until + :enable (not gud-running) + :visible (and (memq gud-minor-mode '(gdbmi gdb perldb)) + (gud-tool-bar-item-visible-no-fringe))) + ([remove] menu-item "Remove Breakpoint" gud-remove + :enable (not gud-running) + :visible (gud-tool-bar-item-visible-no-fringe)) + ([tbreak] menu-item "Temporary Breakpoint" gud-tbreak + :enable (not gud-running) + :visible (memq gud-minor-mode + '(gdbmi gdb sdb xdb))) + ([break] menu-item "Set Breakpoint" gud-break + :enable (not gud-running) + :visible (gud-tool-bar-item-visible-no-fringe)) + ([up] menu-item "Up Stack" gud-up + :enable (not gud-running) + :visible (memq gud-minor-mode + '(gdbmi gdb guiler dbx xdb jdb pdb))) + ([down] menu-item "Down Stack" gud-down + :enable (not gud-running) + :visible (memq gud-minor-mode + '(gdbmi gdb guiler dbx xdb jdb pdb))) + ([pp] menu-item "Print S-expression" gud-pp + :enable (and (not gud-running) + (bound-and-true-p gdb-active-process)) + :visible (and (string-equal + (buffer-local-value + 'gud-target-name gud-comint-buffer) + "emacs") + (eq gud-minor-mode 'gdbmi))) + ([print*] . (menu-item (if (eq gud-minor-mode 'jdb) + "Dump object" + "Print Dereference") + gud-pstar + :enable (not gud-running) + :visible (memq gud-minor-mode '(gdbmi gdb jdb)))) + ([print] menu-item "Print Expression" gud-print + :enable (not gud-running)) + ([watch] menu-item "Watch Expression" gud-watch + :enable (not gud-running) + :visible (eq gud-minor-mode 'gdbmi)) + ([finish] menu-item "Finish Function" gud-finish + :enable (not gud-running) + :visible (memq gud-minor-mode + '(gdbmi gdb guiler xdb jdb pdb))) + ([stepi] menu-item "Step Instruction" gud-stepi + :enable (not gud-running) + :visible (memq gud-minor-mode '(gdbmi gdb dbx))) + ([nexti] menu-item "Next Instruction" gud-nexti + :enable (not gud-running) + :visible (memq gud-minor-mode '(gdbmi gdb dbx))) + ([step] menu-item "Step Line" gud-step + :enable (not gud-running)) + ([next] menu-item "Next Line" gud-next + :enable (not gud-running)) + ([cont] menu-item "Continue" gud-cont + :enable (not gud-running) + :visible (not (eq gud-minor-mode 'gdbmi)))) + "Menu for `gud-mode'." + :name "Gud") + +(easy-mmode-defmap gud-minor-mode-map + (append + `(([menu-bar debug] . ("Gud" . ,gud-menu-map))) + ;; Get tool bar like functionality from the menu bar on a text only + ;; terminal. + (unless window-system + `(([menu-bar down] + . (,(propertize "down" 'face 'font-lock-doc-face) . gud-down)) + ([menu-bar up] + . (,(propertize "up" 'face 'font-lock-doc-face) . gud-up)) + ([menu-bar finish] + . (,(propertize "finish" 'face 'font-lock-doc-face) . gud-finish)) + ([menu-bar step] + . (,(propertize "step" 'face 'font-lock-doc-face) . gud-step)) + ([menu-bar next] + . (,(propertize "next" 'face 'font-lock-doc-face) . gud-next)) + ([menu-bar until] menu-item + ,(propertize "until" 'face 'font-lock-doc-face) gud-until + :visible (memq gud-minor-mode '(gdbmi gdb perldb))) + ([menu-bar cont] menu-item + ,(propertize "cont" 'face 'font-lock-doc-face) gud-cont + :visible (not (eq gud-minor-mode 'gdbmi))) + ([menu-bar run] menu-item + ,(propertize "run" 'face 'font-lock-doc-face) gud-run + :visible (memq gud-minor-mode '(gdbmi gdb dbx jdb))) + ([menu-bar go] menu-item + ,(propertize " go " 'face 'font-lock-doc-face) gud-go + :visible (and (eq gud-minor-mode 'gdbmi) + (gdb-show-run-p))) + ([menu-bar stop] menu-item + ,(propertize "stop" 'face 'font-lock-doc-face) gud-stop-subjob + :visible (or (and (eq gud-minor-mode 'gdbmi) + (gdb-show-stop-p)) + (not (eq gud-minor-mode 'gdbmi)))) + ([menu-bar print] + . (,(propertize "print" 'face 'font-lock-doc-face) . gud-print)) + ([menu-bar tools] . undefined) + ([menu-bar buffer] . undefined) + ([menu-bar options] . undefined) + ([menu-bar edit] . undefined) + ([menu-bar file] . undefined)))) + "Map used in visited files.") -(defvar-keymap gud-minor-mode-map - :parent gud-mode-map) +(setf (alist-get 'gud-minor-mode minor-mode-map-alist) + gud-minor-mode-map) -(easy-menu-define gud-menu-map gud-mode-map - "Menu for `gud-mode'." - '("Gud" - ["Continue" gud-cont - :enable (not gud-running) - :visible (not (eq gud-minor-mode 'gdbmi))] - ["Next Line" gud-next - :enable (not gud-running)] - ["Step Line" gud-step - :enable (not gud-running)] - ["Next Instruction" gud-nexti - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb dbx))] - ["Step Instruction" gud-stepi - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb dbx))] - ["Finish Function" gud-finish - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb guiler xdb jdb pdb))] - ["Watch Expression" gud-watch - :enable (not gud-running) - :visible (eq gud-minor-mode 'gdbmi)] - ["Print Expression" gud-print - :enable (not gud-running)] - ["Dump object-Derefenrece" gud-pstar - :label (if (eq gud-minor-mode 'jdb) - "Dump object" - "Print Dereference") - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb jdb))] - ["Print S-expression" gud-pp - :enable (and (not gud-running) - (bound-and-true-p gdb-active-process)) - :visible (and (string-equal - (buffer-local-value - 'gud-target-name gud-comint-buffer) - "emacs") - (eq gud-minor-mode 'gdbmi))] - ["Down Stack" gud-down - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb guiler dbx xdb jdb pdb))] - ["Up Stack" gud-up - :enable (not gud-running) - :visible (memq gud-minor-mode - '(gdbmi gdb guiler dbx xdb jdb pdb))] - ["Set Breakpoint" gud-break - :enable (not gud-running) - :visible (gud-tool-bar-item-visible-no-fringe)] - ["Temporary Breakpoint" gud-tbreak - :enable (not gud-running) - :visible (memq gud-minor-mode '(gdbmi gdb sdb xdb))] - ["Remove Breakpoint" gud-remove - :enable (not gud-running) - :visible (gud-tool-bar-item-visible-no-fringe)] - ["Continue to selection" gud-until - :enable (not gud-running) - :visible (and (memq gud-minor-mode '(gdbmi gdb perldb)) - (gud-tool-bar-item-visible-no-fringe))] - ["Stop" gud-stop-subjob - :visible (or (not (memq gud-minor-mode '(gdbmi pdb))) - (and (eq gud-minor-mode 'gdbmi) - (gdb-show-stop-p)))] - ["Continue-Run" gud-go - :label (if (bound-and-true-p gdb-active-process) - "Continue" "Run") - :visible (and (eq gud-minor-mode 'gdbmi) - (gdb-show-run-p))] - ["Run" gud-run - :enable (not gud-running) - :visible (or (memq gud-minor-mode '(gdb dbx jdb)) - (and (eq gud-minor-mode 'gdbmi) - (or (not (gdb-show-run-p)) - (bound-and-true-p - gdb-active-process))))] - ["Refresh" gud-refresh] - ["Show GUD tooltips" gud-tooltip-mode - :enable (and (not emacs-basic-display) - (display-graphic-p) - (fboundp 'x-show-tip)) - :visible (memq gud-minor-mode - '(gdbmi guiler dbx sdb xdb pdb)) - :button (:toggle . gud-tooltip-mode)] - ["Info (debugger)" gud-goto-info])) +(defvar gud-mode-map + ;; Will inherit from comint-mode via define-derived-mode. + (make-sparse-keymap) + "`gud-mode' keymap.") (setf (alist-get 'gud-minor-mode minor-mode-map-alist) gud-minor-mode-map)