summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-12-03 11:16:41 +0200
committerEli Zaretskii <eliz@gnu.org>2022-12-03 11:16:41 +0200
commit3623d5c195dba3a663380e6a40fac3ea5b1cb491 (patch)
tree83c4bf510af7ada308d9603aa83d9699e6d09a4f
parent17d40c163e088e25152aedcfb18d733cc8e54756 (diff)
downloademacs-3623d5c195dba3a663380e6a40fac3ea5b1cb491.tar.gz
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.
-rw-r--r--lisp/emacs-lisp/easy-mmode.el4
-rw-r--r--lisp/progmodes/gud.el223
2 files changed, 138 insertions, 89 deletions
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)