Fix conflict between matlab-shell debugging and C++ (or other language) debugging.

Fix conflict between matlab-shell debugging and C++ (or other language) debugging.
- matlab-shell debugging previously leveraged gud.el for debugging of *.m files.
- C++ debugging also leverages gud.el for debugging.
- Only one instance of a gud.el debugger can be active. If you run two, say
  *.m debugging and C++ debugging. Then you get odd errors such as the
  ebbreak not being recognized by gdb.
To fix these issue, I copied gud.el and made a new namespace "mlgud". I also
removed a lot of unused code from mlgud.el, though there's still more that can
be removed. Now one can debug *.m files and *.cpp files in one Emacs session.
This commit is contained in:
John Ciolfi 2022-03-11 14:55:04 -05:00
parent c945bf5025
commit 45febb409c
6 changed files with 1851 additions and 487 deletions

View file

@ -1,3 +1,16 @@
2022-03-11 John Ciolfi <ciolfi@mathworks.com>
* matlab-netshell.el, matlab-shell-gud.el, matlab-shell.el, matlab.el, mlgud.el
Fix conflict between matlab-shell debugging and C++ (or other language) debugging.
- matlab-shell debugging previously leveraged gud.el for debugging of *.m files.
- C++ debugging also leverages gud.el for debugging.
- Only one instance of a gud.el debugger can be active. If you run two, say
*.m debugging and C++ debugging. Then you get odd errors such as the
ebbreak not being recognized by gdb.
To fix these issue, I copied gud.el and made a new namespace "mlgud". I also
removed a lot of unused code from mlgud.el, though there's still more that can
be removed. Now one can debug *.m files and *.cpp files in one Emacs session.
2021-11-22 Uwe Brauer <oub@mat.ucm.es> 2021-11-22 Uwe Brauer <oub@mat.ucm.es>
* company-matlab-shell.el: 677 correct a silly typo * company-matlab-shell.el: 677 correct a silly typo

View file

@ -122,7 +122,7 @@ response from some Emacs based request."
;; Interpret the command. ;; Interpret the command.
(cond ((string= "init" cmd) (cond ((string= "init" cmd)
;; Make sure GUD bindings are available, but do so in ;; Make sure GUD bindings are available, but do so in
;; the netshell buffer so when gud bundings run, they ;; the netshell buffer so when mlgud bundings run, they
;; don't stomp on C-c matlab-mode bindings. ;; don't stomp on C-c matlab-mode bindings.
(with-current-buffer (process-buffer proc) (with-current-buffer (process-buffer proc)
(matlab-shell-mode-gud-enable-bindings)) (matlab-shell-mode-gud-enable-bindings))

View file

@ -21,13 +21,13 @@
;; ;;
;; GUD (grand unified debugger) support for MATLAB shell. ;; GUD (grand unified debugger) support for MATLAB shell.
;; ;;
;; Includes setting up gud mode in the shell, and all filters, etc specific ;; Includes setting up mlgud mode in the shell, and all filters, etc specific
;; to supporting gud. ;; to supporting mlgud.
(require 'matlab-shell) (require 'matlab-shell)
(eval-and-compile (eval-and-compile
(require 'gud) (require 'mlgud)
(require 'eieio) (require 'eieio)
) )
@ -52,16 +52,16 @@ Disable this option if the tooltips are too slow in your setup."
(defmacro matlab-at-fcn (cmd) (defmacro matlab-at-fcn (cmd)
"Define CMD to be a GUD command that works w/ shell or netshell." "Define CMD to be a GUD command that works w/ shell or netshell."
;; Note `arg' comes from gud-def declaration ;; Note `arg' comes from mlgud-def declaration
`(if (matlab-shell-active-p) `(if (matlab-shell-active-p)
(gud-call (concat ,cmd "%%") arg) (mlgud-call (concat ,cmd "%%") arg)
(if (matlab-netshell-active-p) (if (matlab-netshell-active-p)
(matlab-netshell-eval (gud-format-command ,cmd arg)) (matlab-netshell-eval (mlgud-format-command ,cmd arg))
(error "No MATLAB shell active")))) (error "No MATLAB shell active"))))
(defmacro matlab-gud-fcn (cmd) (defmacro matlab-gud-fcn (cmd)
"Define CMD forms to be sent to a MATLAB shell." "Define CMD forms to be sent to a MATLAB shell."
;; Note `arg' comes from gud-def declaration ;; Note `arg' comes from mlgud-def declaration
`(if gud-matlab-debug-active `(if gud-matlab-debug-active
(matlab-at-fcn ,cmd) (matlab-at-fcn ,cmd)
(error "MATLAB debugging not active"))) (error "MATLAB debugging not active")))
@ -70,37 +70,37 @@ Disable this option if the tooltips are too slow in your setup."
(defun matlab-shell-mode-gud-enable-bindings () (defun matlab-shell-mode-gud-enable-bindings ()
"Enable GUD features for `matlab-shell' in the current buffer." "Enable GUD features for `matlab-shell' in the current buffer."
;; Make sure this is safe to use gud to debug MATLAB ;; Make sure this is safe to use mlgud to debug MATLAB
(when (not (fboundp 'gud-def)) (when (not (fboundp 'mlgud-def))
(error "Your Emacs is missing `gud-def' which means matlab-shell won't work correctly. Stopping")) (error "Your Emacs is missing `mlgud-def' which means matlab-shell won't work correctly. Stopping"))
(gud-def gud-break (matlab-at-fcn "ebstop in %d%f at %l") "\C-b" "Set breakpoint at current line.") (mlgud-def mlgud-break (matlab-at-fcn "ebstop in %d%f at %l") "Set breakpoint at current line.")
(gud-def gud-remove (matlab-at-fcn "ebclear in %d%f at %l") "\C-x" "Remove breakpoint at current line.") (mlgud-def mlgud-remove (matlab-at-fcn "ebclear in %d%f at %l") "Remove breakpoint at current line.")
(gud-def gud-step (matlab-gud-fcn "dbstep in") "\C-s" "Step one source line, possibly into a function.") (mlgud-def mlgud-step (matlab-gud-fcn "dbstep in") "Step one source line, possibly into a function.")
(gud-def gud-next (matlab-gud-fcn "dbstep %p") "\C-n" "Step over one source line.") (mlgud-def mlgud-next (matlab-gud-fcn "dbstep %p") "Step over one source line.")
(gud-def gud-cont (matlab-gud-fcn "dbcont") "\C-r" "Continue with display.") (mlgud-def mlgud-cont (matlab-gud-fcn "dbcont") "Continue execution.")
(gud-def gud-stop-subjob (matlab-gud-fcn "dbquit") "\C-q" "Quit debugging.") ;; gud toolbar stop (mlgud-def mlgud-stop-subjob (matlab-gud-fcn "dbquit") "Quit debugging.") ;; mlgud toolbar stop
(gud-def gud-finish (matlab-gud-fcn "dbstep out") "\C-f" "Finish executing current function.") (mlgud-def mlgud-finish (matlab-gud-fcn "dbstep out") "Finish executing current function.")
(gud-def gud-up (matlab-gud-fcn "dbup") "<" "Up N stack frames (numeric arg).") (mlgud-def mlgud-up (matlab-gud-fcn "dbup") "Up N stack frames (numeric arg).")
(gud-def gud-down (matlab-gud-fcn "dbdown") ">" "Down N stack frames (numeric arg).") (mlgud-def mlgud-down (matlab-gud-fcn "dbdown") "Down N stack frames (numeric arg).")
(gud-def gud-list-breakpoints (matlab-at-fcn "ebstatus") "\C-v" "List breakpoints") (mlgud-def mlgud-list-breakpoints (matlab-at-fcn "ebstatus") "List breakpoints")
(gud-def gud-show-stack (matlab-at-fcn "ebstack") "\C-w" "Show stack") (mlgud-def mlgud-show-stack (matlab-at-fcn "ebstack") "Show stack")
;; using (gud-def gud-print "%e" "\C-p" "Eval expression at point") fails ;; using (mlgud-def mlgud-print "%e" "\C-p" "Eval expression at point") fails
;; (gud-def gud-print "% gud-print not available" "\C-p" "gud-print not available.") ;; (mlgud-def mlgud-print "% mlgud-print not available" "\C-p" "mlgud-print not available.")
(when window-system (when window-system
(setq gud-matlab-tool-bar-map (setq gud-matlab-tool-bar-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(dolist (x '((gud-break . "gud/break") (dolist (x '((mlgud-break . "gud/break")
(gud-remove . "gud/remove") (mlgud-remove . "gud/remove")
(gud-cont . "gud/cont") (mlgud-cont . "gud/cont")
(gud-next . "gud/next") (mlgud-next . "gud/next")
(gud-step . "gud/step") (mlgud-step . "gud/step")
(gud-finish . "gud/finish") (mlgud-finish . "gud/finish")
(gud-stop-subjob . "gud/stop") (mlgud-stop-subjob . "gud/stop")
(mlg-show-stack . "gud/all") (mlg-show-stack . "gud/all")
(gud-list-breakpoints . "describe") (mlgud-list-breakpoints . "describe")
)) ))
(tool-bar-local-item-from-menu (tool-bar-local-item-from-menu
(car x) (cdr x) map matlab-mode-map)) (car x) (cdr x) map matlab-mode-map))
@ -108,8 +108,8 @@ Disable this option if the tooltips are too slow in your setup."
) )
(if (fboundp 'gud-make-debug-menu) (if (fboundp 'mlgud-make-debug-menu)
(gud-make-debug-menu)) (mlgud-make-debug-menu))
(when (boundp 'tool-bar-map) ; not --without-x (when (boundp 'tool-bar-map) ; not --without-x
(kill-local-variable 'tool-bar-map)) (kill-local-variable 'tool-bar-map))
@ -118,27 +118,25 @@ Disable this option if the tooltips are too slow in your setup."
;;;###autoload ;;;###autoload
(defun matlab-shell-gud-startup () (defun matlab-shell-gud-startup ()
"Configure GUD when a new `matlab-shell' is initialized." "Configure GUD when a new `matlab-shell' is initialized."
(gud-mode) (mlgud-mode)
;; type of gud mode ;; type of mlgud mode
(setq gud-minor-mode 'matlab) (setq mlgud-minor-mode 'matlab)
;; This starts us supporting gud tooltips. ;; This starts us supporting mlgud tooltips.
(add-to-list 'gud-tooltip-modes 'matlab-mode) (add-to-list 'mlgud-tooltip-modes 'matlab-mode)
(make-local-variable 'gud-marker-filter) (make-local-variable 'mlgud-marker-filter)
(setq gud-marker-filter 'gud-matlab-marker-filter) (setq mlgud-marker-filter 'gud-matlab-marker-filter)
(make-local-variable 'gud-find-file) (make-local-variable 'mlgud-find-file)
(setq gud-find-file 'gud-matlab-find-file) (setq mlgud-find-file 'gud-matlab-find-file)
;; XEmacs doesn't seem to have this concept already. Oh well. (global-matlab-shell-inactive-gud-minor-mode 1)
(make-local-variable 'gud-marker-acc)
(setq gud-marker-acc nil)
;; Setup our debug tracker. ;; Setup our debug tracker.
(add-hook 'matlab-shell-prompt-appears-hook #'gud-matlab-debug-tracker) (add-hook 'matlab-shell-prompt-appears-hook #'gud-matlab-debug-tracker)
(gud-set-buffer)) (mlgud-set-buffer))
;;; GUD Functions ;;; GUD Functions
(defun gud-matlab-massage-args (file args) (defun gud-matlab-massage-args (file args)
@ -157,8 +155,8 @@ FILE is ignored, and ARGS is returned."
f)) f))
(buf (find-file-noselect realfname t))) (buf (find-file-noselect realfname t)))
(set-buffer buf) (set-buffer buf)
(if (fboundp 'gud-make-debug-menu) (if (fboundp 'mlgud-make-debug-menu)
(gud-make-debug-menu)) (mlgud-make-debug-menu))
buf))) buf)))
@ -167,6 +165,10 @@ FILE is ignored, and ARGS is returned."
;; MATLAB's process filter handles output from the MATLAB process and ;; MATLAB's process filter handles output from the MATLAB process and
;; interprets it for formatting text, and for running the debugger. ;; interprets it for formatting text, and for running the debugger.
(defvar matlab-shell-gud--marker-acc "")
(make-variable-buffer-local 'matlab-shell-gud--marker-acc)
(defvar gud-matlab-marker-regexp-plain-prompt "^K?>>" (defvar gud-matlab-marker-regexp-plain-prompt "^K?>>"
"Regular expression for finding a prompt.") "Regular expression for finding a prompt.")
@ -182,20 +184,20 @@ FILE is ignored, and ARGS is returned."
(defun gud-matlab-marker-filter (string) (defun gud-matlab-marker-filter (string)
"Filters STRING for the Unified Debugger based on MATLAB output." "Filters STRING for the Unified Debugger based on MATLAB output."
(setq gud-marker-acc (concat gud-marker-acc string)) (setq matlab-shell-gud--marker-acc (concat matlab-shell-gud--marker-acc string))
(let ((output "") (frame nil)) (let ((output "") (frame nil))
;; ERROR DELIMITERS ;; ERROR DELIMITERS
;; Newer MATLAB's wrap error text in {^H }^H characters. ;; Newer MATLAB's wrap error text in {^H }^H characters.
;; Convert into something COMINT won't delete so we can scan them. ;; Convert into something COMINT won't delete so we can scan them.
(while (string-match "{" gud-marker-acc) (while (string-match "{" matlab-shell-gud--marker-acc)
(setq gud-marker-acc (replace-match matlab-shell-errortext-start-text t t gud-marker-acc 0))) (setq matlab-shell-gud--marker-acc (replace-match matlab-shell-errortext-start-text t t matlab-shell-gud--marker-acc 0)))
(while (string-match "}" gud-marker-acc) (while (string-match "}" matlab-shell-gud--marker-acc)
(setq gud-marker-acc (replace-match matlab-shell-errortext-end-text t t gud-marker-acc 0))) (setq matlab-shell-gud--marker-acc (replace-match matlab-shell-errortext-end-text t t matlab-shell-gud--marker-acc 0)))
;; DEBUG PROMPTS ;; DEBUG PROMPTS
(when (string-match gud-matlab-marker-regexp-K>> gud-marker-acc) (when (string-match gud-matlab-marker-regexp-K>> matlab-shell-gud--marker-acc)
;; Newer MATLAB's don't print useful info. We'll have to ;; Newer MATLAB's don't print useful info. We'll have to
;; search backward for the previous line to see if a frame was ;; search backward for the previous line to see if a frame was
@ -206,7 +208,7 @@ FILE is ignored, and ARGS is returned."
;; If no echo, force an echo ;; If no echo, force an echo
"disp(['dbhotlink()%%%' newline]);dbhotlink();\n"))) "disp(['dbhotlink()%%%' newline]);dbhotlink();\n")))
;;(when matlab-shell-io-testing (message "!!> [%s]" dbhlcmd)) ;;(when matlab-shell-io-testing (message "!!> [%s]" dbhlcmd))
(process-send-string (get-buffer-process gud-comint-buffer) dbhlcmd) (process-send-string (get-buffer-process mlgud-comint-buffer) dbhlcmd)
) )
(setq gud-matlab-dbhotlink t) (setq gud-matlab-dbhotlink t)
) )
@ -216,26 +218,26 @@ FILE is ignored, and ARGS is returned."
;; process output. Don't output anything until a K prompt is seen after the display ;; process output. Don't output anything until a K prompt is seen after the display
;; of the dbhotlink command. ;; of the dbhotlink command.
(when gud-matlab-dbhotlink (when gud-matlab-dbhotlink
(let ((start (string-match "dbhotlink()%%%" gud-marker-acc)) (let ((start (string-match "dbhotlink()%%%" matlab-shell-gud--marker-acc))
(endprompt nil)) (endprompt nil))
(if start (if start
(progn (progn
(setq output (substring gud-marker-acc 0 start) (setq output (substring matlab-shell-gud--marker-acc 0 start)
gud-marker-acc (substring gud-marker-acc start)) matlab-shell-gud--marker-acc (substring matlab-shell-gud--marker-acc start))
;; The hotlink text will persist until we see the K prompt. ;; The hotlink text will persist until we see the K prompt.
(when (string-match gud-matlab-marker-regexp-plain-prompt gud-marker-acc) (when (string-match gud-matlab-marker-regexp-plain-prompt matlab-shell-gud--marker-acc)
(setq endprompt (match-end 0)) (setq endprompt (match-end 0))
;; (when matlab-shell-io-testing (message "!!xx [%s]" (substring gud-marker-acc 0 endprompt))) ;; (when matlab-shell-io-testing (message "!!xx [%s]" (substring matlab-shell-gud--marker-acc 0 endprompt)))
;; We're done with the text! ;; We're done with the text!
;; Capture the text that describes the new stack frame. ;; Capture the text that describes the new stack frame.
(save-match-data (save-match-data
(let* ((expr-end (match-beginning 0)) (let* ((expr-end (match-beginning 0))
(m1 (string-match "dbhotlink()%%%\n" gud-marker-acc)) (m1 (string-match "dbhotlink()%%%\n" matlab-shell-gud--marker-acc))
(expr-start (match-end 0)) (expr-start (match-end 0))
(expression (substring gud-marker-acc expr-start expr-end))) (expression (substring matlab-shell-gud--marker-acc expr-start expr-end)))
(when (> (length expression) 0) (when (> (length expression) 0)
(condition-case ERR (condition-case ERR
@ -251,17 +253,17 @@ FILE is ignored, and ARGS is returned."
)) ))
;;Remove it from the accumulator. ;;Remove it from the accumulator.
(setq gud-marker-acc (substring gud-marker-acc endprompt)) (setq matlab-shell-gud--marker-acc (substring matlab-shell-gud--marker-acc endprompt))
;; If we got all this at the same time, push output back onto the accumulator for ;; If we got all this at the same time, push output back onto the accumulator for
;; the next code bit to push it out. ;; the next code bit to push it out.
(setq gud-marker-acc (concat output gud-marker-acc) (setq matlab-shell-gud--marker-acc (concat output matlab-shell-gud--marker-acc)
output "" output ""
gud-matlab-dbhotlink nil) gud-matlab-dbhotlink nil)
)) ))
;; Else, waiting for a link, but hasn't shown up yet. ;; Else, waiting for a link, but hasn't shown up yet.
;; TODO - what can I do here to fix var setting if it gets ;; TODO - what can I do here to fix var setting if it gets
;; locked? ;; locked?
(when (string-match gud-matlab-marker-regexp->> gud-marker-acc) (when (string-match gud-matlab-marker-regexp->> matlab-shell-gud--marker-acc)
;; A non-k prompt showed up. We're not going to get out request. ;; A non-k prompt showed up. We're not going to get out request.
(setq gud-matlab-dbhotlink nil)) (setq gud-matlab-dbhotlink nil))
))) )))
@ -281,23 +283,23 @@ FILE is ignored, and ARGS is returned."
nil nil
;; Finish off this part of the output. None of our special stuff ;; Finish off this part of the output. None of our special stuff
;; ends with a \n, so display those as they show up... ;; ends with a \n, so display those as they show up...
(while (string-match "^[^\n]*\n" gud-marker-acc) (while (string-match "^[^\n]*\n" matlab-shell-gud--marker-acc)
(setq output (concat output (substring gud-marker-acc 0 (match-end 0))) (setq output (concat output (substring matlab-shell-gud--marker-acc 0 (match-end 0)))
gud-marker-acc (substring gud-marker-acc (match-end 0)))) matlab-shell-gud--marker-acc (substring matlab-shell-gud--marker-acc (match-end 0))))
(if (string-match (concat gud-matlab-marker-regexp-plain-prompt "\\s-*$") gud-marker-acc) (if (string-match (concat gud-matlab-marker-regexp-plain-prompt "\\s-*$") matlab-shell-gud--marker-acc)
(setq output (concat output gud-marker-acc) (setq output (concat output matlab-shell-gud--marker-acc)
gud-marker-acc "")) matlab-shell-gud--marker-acc ""))
;; Check our output for a prompt, and existence of a frame. ;; Check our output for a prompt, and existence of a frame.
;; If this is true, throw out the debug arrow stuff. ;; If this is true, throw out the debug arrow stuff.
(if (and (string-match (concat gud-matlab-marker-regexp->> "\\s-*$") output) (if (and (string-match (concat gud-matlab-marker-regexp->> "\\s-*$") output)
gud-last-last-frame) mlgud-last-last-frame)
(progn (progn
;; Clean up gud stuff. ;; Clean up mlgud stuff.
(setq overlay-arrow-position nil (setq overlay-arrow-position nil
gud-last-last-frame nil mlgud-last-last-frame nil
gud-overlay-arrow-position nil) mlgud-overlay-arrow-position nil)
;; If stack is showing, clean it up. ;; If stack is showing, clean it up.
(let* ((buff (mlg-set-stack nil)) (let* ((buff (mlg-set-stack nil))
(win (get-buffer-window buff))) (win (get-buffer-window buff)))
@ -311,19 +313,19 @@ FILE is ignored, and ARGS is returned."
;; Check for any text that would be embarrassing to display partially. ;; Check for any text that would be embarrassing to display partially.
;; If we don't see any, feel free to dump the rest of the accumulation buffer ;; If we don't see any, feel free to dump the rest of the accumulation buffer
(unless (or (string-match (regexp-quote "<a href=") gud-marker-acc) (unless (or (string-match (regexp-quote "<a href=") matlab-shell-gud--marker-acc)
(string-match (regexp-quote "<EMACSCAP") gud-marker-acc) (string-match (regexp-quote "<EMACSCAP") matlab-shell-gud--marker-acc)
(string-match (regexp-quote "<ERROR") gud-marker-acc)) (string-match (regexp-quote "<ERROR") matlab-shell-gud--marker-acc))
(setq output (concat output gud-marker-acc) (setq output (concat output matlab-shell-gud--marker-acc)
gud-marker-acc "") matlab-shell-gud--marker-acc "")
) )
) )
(if frame (setq gud-last-frame frame)) (if frame (setq mlgud-last-frame frame))
(when matlab-shell-io-testing (when matlab-shell-io-testing
(message "-->[%s] [%s]" output gud-marker-acc)) (message "-->[%s] [%s]" output matlab-shell-gud--marker-acc))
;;(message "Looking for prompt in %S" output) ;;(message "Looking for prompt in %S" output)
(when (and (not matlab-shell-suppress-prompt-hooks) (when (and (not matlab-shell-suppress-prompt-hooks)
@ -395,8 +397,8 @@ LONGESTNAME specifies the how long the longest name we can expect is."
(let ((file (oref (nth (1- newframe) mlg-stack) file)) (let ((file (oref (nth (1- newframe) mlg-stack) file))
(line (oref (nth (1- newframe) mlg-stack) line))) (line (oref (nth (1- newframe) mlg-stack) line)))
(if (< line 0) (setq line (- line))) (if (< line 0) (setq line (- line)))
(setq gud-last-frame (cons file line)) (setq mlgud-last-frame (cons file line))
;;(message "Gud FRAME set to %S" gud-last-frame) ;;(message "Gud FRAME set to %S" mlgud-last-frame)
) )
) )
@ -825,17 +827,21 @@ Call debug activate/deactivate features."
(beginning-of-line) (beginning-of-line)
(cond (cond
((and gud-matlab-debug-active (looking-at gud-matlab-marker-regexp->>)) ((and gud-matlab-debug-active (looking-at gud-matlab-marker-regexp->>))
;; Debugger was active and we are back at prompt
(setq gud-matlab-debug-active nil) (setq gud-matlab-debug-active nil)
(when (boundp 'tool-bar-map) ; not --without-x (when (boundp 'tool-bar-map) ; not --without-x
(with-current-buffer (matlab-shell-active-p) (kill-local-variable 'tool-bar-map))) (with-current-buffer (matlab-shell-active-p) (kill-local-variable 'tool-bar-map)))
(global-matlab-shell-gud-minor-mode -1) (global-matlab-shell-gud-minor-mode -1)
(global-matlab-shell-inactive-gud-minor-mode 1)
(run-hooks 'gud-matlab-debug-deactivate-hook)) (run-hooks 'gud-matlab-debug-deactivate-hook))
((and (not gud-matlab-debug-active) (looking-at gud-matlab-marker-regexp-K>>)) ((and (not gud-matlab-debug-active) (looking-at gud-matlab-marker-regexp-K>>))
;; Debugger was NOT active and we are now in debug prompt
(setq gud-matlab-debug-active t) (setq gud-matlab-debug-active t)
(when (boundp 'tool-bar-map) ; not --without-x (when (boundp 'tool-bar-map) ; not --without-x
(with-current-buffer (matlab-shell-active-p) (with-current-buffer (matlab-shell-active-p)
(setq-local tool-bar-map gud-matlab-tool-bar-map))) (setq-local tool-bar-map gud-matlab-tool-bar-map)))
(global-matlab-shell-gud-minor-mode 1) (global-matlab-shell-gud-minor-mode 1)
(global-matlab-shell-inactive-gud-minor-mode -1)
(run-hooks 'gud-matlab-debug-activate-hook)) (run-hooks 'gud-matlab-debug-activate-hook))
(t (t
;; All clear ;; All clear
@ -855,89 +861,41 @@ Call debug activate/deactivate features."
(setq key (1+ key))) (setq key (1+ key)))
(define-key km "h" 'matlab-shell-gud-mode-help) (define-key km "h" 'matlab-shell-gud-mode-help)
;; gud bindings. ;; mlgud bindings.
(define-key km "b" 'gud-break) (define-key km "b" 'mlgud-break)
(define-key km "x" 'gud-remove) (define-key km "x" 'mlgud-remove)
(define-key km "c" 'gud-cont) (define-key km "c" 'mlgud-cont)
(define-key km "s" 'gud-step) (define-key km " " 'mlgud-step)
(define-key km " " 'gud-step) (define-key km "s" 'mlgud-step)
(define-key km "n" 'gud-next) (define-key km "n" 'mlgud-next)
(define-key km "f" 'gud-finish) (define-key km "f" 'mlgud-finish)
(define-key km "q" 'gud-stop-subjob) (define-key km "q" 'mlgud-stop-subjob)
;(define-key km "u" 'gud-up) (define-key km "<" 'mlgud-up)
;(define-key km "d" 'gud-down) (define-key km ">" 'mlgud-down)
(define-key km "<" 'gud-up)
(define-key km ">" 'gud-down)
(define-key km "w" 'mlg-show-stack) (define-key km "w" 'mlg-show-stack)
(define-key km "v" 'gud-list-breakpoints) (define-key km "v" 'mlgud-list-breakpoints)
(define-key km "e" 'matlab-shell-gud-show-symbol-value) (define-key km "e" 'matlab-shell-gud-show-symbol-value)
;; (define-key km "p" gud-print)
;;(define-key km "" 'matlab-shell-gud-mode-edit)
(define-key km "\C-x\C-q" 'matlab-shell-gud-mode-edit) ; like toggle-read-only (define-key km "\C-x\C-q" 'matlab-shell-gud-mode-edit) ; like toggle-read-only
km) km)
"Keymap used by matlab mode maintainers.") "Keymap used by matlab mode maintainers.")
;;;###autoload (defun matlab-shell-gud-mode-help-notice ()
(define-minor-mode matlab-shell-gud-minor-mode "Default binding for most keys in `matlab-shell-gud-minor-mode'.
"Minor mode activated when `matlab-shell' K>> prompt is active. Shows a help message in the mini buffer."
This minor mode makes MATLAB buffers read only so simple keystrokes (interactive)
activate debug commands. It also enables tooltips to appear when the (error "MATLAB shell GUD minor-mode: Press 'h' for help, 'e' to go back to editing"))
mouse hovers over a symbol when debugging.
\\<matlab-shell-gud-minor-mode-map>
Debug commands are:
\\[matlab-shell-gud-mode-edit] - Edit file (toggle read-only)
Allows editing file without causing MATLAB to exit debug mode.
\\[gud-break] - Add breakpoint (ebstop in FILE at point)
\\[gud-remove] - Remove breakpoint (ebclear in FILE at point)
\\[gud-list-breakpoints] - List breakpoints (ebstatus)
\\[gud-step] - Step (dbstep in)
\\[gud-next] - Next (dbstep)
\\[gud-finish] - Finish function (dbstep out)
\\[gud-cont] - Continue (dbcont)
\\[matlab-shell-gud-show-symbol-value] - Evaluate expression
\\[mlg-show-stack] - Where am I (ebstack)
\\[gud-stop-subjob] - Quit (dbquit)"
nil " MGUD" matlab-shell-gud-minor-mode-map
;; Make the buffer read only (defun matlab-shell-gud-mode-help ()
(if matlab-shell-gud-minor-mode "Show the default binding for most keys in `matlab-shell-gud-minor-mode'."
(progn (interactive)
;; Enable (describe-minor-mode 'matlab-shell-gud-minor-mode))
(when (buffer-file-name) (setq buffer-read-only t))
(when matlab-shell-debug-tooltips-p
(gud-tooltip-mode 1)
(add-hook 'tooltip-functions 'gud-matlab-tooltip-tips)
)
;; Replace gud's toolbar which keeps stomping
;; on our toolbar.
(make-local-variable 'gud-tool-bar-map)
(setq gud-tool-bar-map gud-matlab-tool-bar-map)
)
;; Disable
(when (buffer-file-name)
(setq buffer-read-only (not (file-writable-p (buffer-file-name)))))
;; Always disable tooltips, in case configured while in the mode. (defun matlab-shell-gud-mode-edit ()
(gud-tooltip-mode -1) "Turn off `matlab-shell-gud-minor-mode' so you can edit again."
(remove-hook 'tooltip-functions 'gud-matlab-tooltip-tips) (interactive)
(global-matlab-shell-gud-minor-mode -1))
;; Disable the debug toolboar
(when (boundp 'tool-bar-map) ; not --without-x
(kill-local-variable 'tool-bar-map))
)
)
;;;###autoload
(define-global-minor-mode global-matlab-shell-gud-minor-mode
matlab-shell-gud-minor-mode
(lambda ()
"Should we turn on in this buffer? Only if in a MATLAB mode."
(when (eq major-mode 'matlab-mode)
(matlab-shell-gud-minor-mode 1)))
)
(defun matlab-shell-gud-show-symbol-value (sym) (defun matlab-shell-gud-show-symbol-value (sym)
"Show the value of the symbol SYM under point from MATLAB shell." "Show the value of the symbol SYM under point from MATLAB shell."
@ -954,39 +912,133 @@ Debug commands are:
(matlab-output-to-temp-buffer "*MATLAB Help*" txt) (matlab-output-to-temp-buffer "*MATLAB Help*" txt)
(message "Error evaluating MATLAB expression")))) (message "Error evaluating MATLAB expression"))))
;;;###autoload
(define-minor-mode matlab-shell-gud-minor-mode
"Minor mode activated when `matlab-shell' K>> prompt is active.
This minor mode makes MATLAB buffers read only so simple keystrokes
activate debug commands. It also enables tooltips to appear when the
mouse hovers over a symbol when debugging.
\\<matlab-shell-gud-minor-mode-map>
Debug commands are:
\\[matlab-shell-gud-mode-edit] - Edit file (toggle read-only)
Allows editing file without causing MATLAB to exit debug mode.
\\[mlgud-break] - Add breakpoint (ebstop in FILE at point)
\\[mlgud-remove] - Remove breakpoint (ebclear in FILE at point)
\\[mlgud-list-breakpoints] - List breakpoints (ebstatus)
\\[mlgud-step] - Step (dbstep in)
\\[mlgud-next] - Next (dbstep)
\\[mlgud-finish] - Finish function (dbstep out)
\\[mlgud-cont] - Continue (dbcont)
\\[matlab-shell-gud-show-symbol-value] - Evaluate expression
\\[mlg-show-stack] - Where am I (ebstack)
\\[mlgud-stop-subjob] - Quit (dbquit)"
nil " MGUD" matlab-shell-gud-minor-mode-map
(defun matlab-shell-gud-mode-edit () ;; Make the buffer read only
"Turn off `matlab-shell-gud-minor-mode' so you can edit again." (if matlab-shell-gud-minor-mode
(interactive) (progn
(global-matlab-shell-gud-minor-mode -1)) ;; Enable
(when (buffer-file-name) (setq buffer-read-only t))
(when matlab-shell-debug-tooltips-p
(mlgud-tooltip-mode 1)
(add-hook 'tooltip-functions 'gud-matlab-tooltip-tips)
)
;; Replace mlgud's toolbar which keeps stomping
;; on our toolbar.
(make-local-variable 'mlgud-tool-bar-map)
(setq mlgud-tool-bar-map gud-matlab-tool-bar-map)
)
;; Disable
(when (buffer-file-name)
(setq buffer-read-only (not (file-writable-p (buffer-file-name)))))
(defun matlab-shell-gud-mode-help-notice () ;; Always disable tooltips, in case configured while in the mode.
"Default binding for most keys in `matlab-shell-gud-minor-mode'. (mlgud-tooltip-mode -1)
Shows a help message in the mini buffer." (remove-hook 'tooltip-functions 'gud-matlab-tooltip-tips)
(interactive)
(error "MATLAB shell GUD minor-mode: Press 'h' for help, 'e' to go back to editing"))
(defun matlab-shell-gud-mode-help () ;; Disable the debug toolboar
(when (boundp 'tool-bar-map) ; not --without-x
(kill-local-variable 'tool-bar-map))))
;;;###autoload
(define-global-minor-mode global-matlab-shell-gud-minor-mode
matlab-shell-gud-minor-mode
(lambda ()
"Should we turn on in this buffer? Only if in a MATLAB mode."
(when (eq major-mode 'matlab-mode)
(matlab-shell-gud-minor-mode 1))))
;;; MATLAB SHELL Inactive GUD Minor Mode
(defvar matlab-shell-inactive-gud-minor-mode-map
(let ((km (make-sparse-keymap)))
(define-key km "\C-c\C-d\C-h" 'matlab-shell-inactive-gud-mode-help)
;; mlgud bindings when debugger is inactive. When inactive, only bindings such as mlgud-break
;; make sense. However, we also keep these bindings when the debugger is active for consistency.
(define-key km (kbd "C-c C-d b") 'mlgud-break)
(define-key km (kbd "C-c C-d x") 'mlgud-remove)
(define-key km (kbd "C-c C-d c") 'mlgud-cont)
(define-key km (kbd "C-c C-d SPC") 'mlgud-step)
(define-key km (kbd "C-c C-d s") 'mlgud-step)
(define-key km (kbd "C-c C-d n") 'mlgud-next)
(define-key km (kbd "C-c C-d f") 'mlgud-finish)
(define-key km (kbd "C-c C-d q") 'mlgud-stop-subjob)
(define-key km (kbd "C-c C-d <") 'mlgud-up)
(define-key km (kbd "C-c C-d >") 'mlgud-down)
(define-key km (kbd "C-c C-d w") 'mlg-show-stack)
(define-key km (kbd "C-c C-d v") 'mlgud-list-breakpoints)
(define-key km (kbd "C-c C-d e") 'matlab-shell-gud-show-symbol-value)
km)
"Keymap used by matlab mode maintainers.")
;;;###autoload
(define-minor-mode matlab-shell-inactive-gud-minor-mode
"Minor mode activated when `matlab-shell' K>> prompt is inactive.
\\<matlab-shell-inactive-gud-minor-mode-map>
Debug commands are:
\\[mlgud-break] - Add breakpoint (ebstop in FILE at point)
\\[mlgud-remove] - Remove breakpoint (ebclear in FILE at point)
\\[mlgud-list-breakpoints] - List breakpoints (ebstatus)
"
nil " I-MGUD" matlab-shell-inactive-gud-minor-mode-map
;; Always disable tooltips, in case configured while in the mode.
(mlgud-tooltip-mode -1)
(remove-hook 'tooltip-functions 'gud-matlab-tooltip-tips)
(when (boundp 'tool-bar-map) ; not --without-x
(kill-local-variable 'tool-bar-map)))
(defun matlab-shell-inactive-gud-mode-help ()
"Show the default binding for most keys in `matlab-shell-gud-minor-mode'." "Show the default binding for most keys in `matlab-shell-gud-minor-mode'."
(interactive) (interactive)
(describe-minor-mode 'matlab-shell-gud-minor-mode) (describe-minor-mode 'matlab-shell-gud-minor-mode))
)
;;;###autoload
(define-global-minor-mode global-matlab-shell-inactive-gud-minor-mode
matlab-shell-inactive-gud-minor-mode
(lambda ()
"Should we turn on in this buffer? Only if in a MATLAB mode."
(when (eq major-mode 'matlab-mode)
(matlab-shell-inactive-gud-minor-mode 1))))
;;; Tooltips ;;; Tooltips
;; ;;
;; Using the gud tooltip feature for a bunch of setup, but then ;; Using the mlgud tooltip feature for a bunch of setup, but then
;; just override the tooltip fcn (see the mode) with this function ;; just override the tooltip fcn (see the mode) with this function
;; as an additional piece. ;; as an additional piece.
(defun gud-matlab-tooltip-tips (event) (defun gud-matlab-tooltip-tips (event)
"Implementation of the tooltip feature for MATLAB. "Implementation of the tooltip feature for MATLAB.
Much of this was copied from `gud-tooltip-tips'. Much of this was copied from `mlgud-tooltip-tips'.
This function must return nil if it doesn't handle EVENT." This function must return nil if it doesn't handle EVENT."
(when (and (eventp event) (tooltip-event-buffer event)) (when (and (eventp event) (tooltip-event-buffer event))
(with-current-buffer (tooltip-event-buffer event) (with-current-buffer (tooltip-event-buffer event)
(when (and gud-tooltip-mode (when (and mlgud-tooltip-mode
matlab-shell-gud-minor-mode matlab-shell-gud-minor-mode
(buffer-name gud-comint-buffer) ; might be killed (buffer-name mlgud-comint-buffer) ; might be killed
) )
(let ((expr (matlab-shell-gud-find-tooltip-expression event)) (let ((expr (matlab-shell-gud-find-tooltip-expression event))
(txt nil)) (txt nil))
@ -997,7 +1049,7 @@ This function must return nil if it doesn't handle EVENT."
(when (not (string-match "ERRORTXT" txt)) (when (not (string-match "ERRORTXT" txt))
(tooltip-show (concat expr "=\n" txt) (tooltip-show (concat expr "=\n" txt)
(or gud-tooltip-echo-area (or mlgud-tooltip-echo-area
tooltip-use-echo-area tooltip-use-echo-area
(not tooltip-mode))) (not tooltip-mode)))
t))))))) t)))))))
@ -1055,6 +1107,6 @@ if it looks like a function call, it will return nil."
;; LocalWords: COMINT errortext dbhlcmd comint endprompt mello mlg EMACSCAP ;; LocalWords: COMINT errortext dbhlcmd comint endprompt mello mlg EMACSCAP
;; LocalWords: defclass initarg defmethod longestname namefmt propertize oref ;; LocalWords: defclass initarg defmethod longestname namefmt propertize oref
;; LocalWords: newstack nreverse newframe namelen cnt prev MStack BP del NBPS ;; LocalWords: newstack nreverse newframe namelen cnt prev MStack BP del NBPS
;; LocalWords: defface bp oset ol eol overlayp MBreakpoints MGUD gud's ;; LocalWords: defface bp oset ol eol overlayp MBreakpoints MGUD mlgud's
;; LocalWords: toolboar minibuffer ERRORTXT eventp emacstipstring posn pstate ;; LocalWords: toolboar minibuffer ERRORTXT eventp emacstipstring posn pstate
;; LocalWords: ppss sexp ;; LocalWords: ppss sexp

View file

@ -31,7 +31,7 @@
(require 'server) (require 'server)
(eval-and-compile (eval-and-compile
(require 'gud) (require 'mlgud)
(require 'shell) (require 'shell)
) )
@ -563,7 +563,7 @@ Try C-h f matlab-shell RET"))
;;; PROCESS FILTERS & SENTINEL ;;; PROCESS FILTERS & SENTINEL
;; ;;
;; These are wrappers around the GUD filters so we can pre and post process ;; These are wrappers around the GUD filters so we can pre and post process
;; decisions by comint and gud. ;; decisions by comint and mlgud.
(defvar matlab-shell-capturetext-start-text "<EMACSCAP>" (defvar matlab-shell-capturetext-start-text "<EMACSCAP>"
"Text used as simple signal for text that should be captured.") "Text used as simple signal for text that should be captured.")
(defvar matlab-shell-capturetext-end-text "</EMACSCAP>" (defvar matlab-shell-capturetext-end-text "</EMACSCAP>"
@ -635,7 +635,7 @@ STRING is the recent output from PROC to be filtered."
matlab-shell-flush-accumulation-buffer nil)) matlab-shell-flush-accumulation-buffer nil))
(with-current-buffer buff (with-current-buffer buff
(gud-filter proc string)) (mlgud-filter proc string))
;; In case things get switched around on us ;; In case things get switched around on us
(with-current-buffer buff (with-current-buffer buff
@ -656,7 +656,7 @@ PROC is the function which experienced a change in state.
STRING is a description of what happened." STRING is a description of what happened."
(let ((buff (process-buffer proc))) (let ((buff (process-buffer proc)))
(with-current-buffer buff (with-current-buffer buff
(gud-sentinel proc string)))) (mlgud-sentinel proc string))))
;;; COMINT support fcns ;;; COMINT support fcns
;; ;;
@ -1933,8 +1933,8 @@ If DEBUG is non-nil, then setup GUD debugging features."
(goto-char (point-min)) (goto-char (point-min))
(forward-line (1- (string-to-number el))) (forward-line (1- (string-to-number el)))
(when debug (when debug
(setq gud-last-frame (cons (buffer-file-name) (string-to-number el))) (setq mlgud-last-frame (cons (buffer-file-name) (string-to-number el)))
(gud-display-frame)) (mlgud-display-frame))
(setq ec (string-to-number ec)) (setq ec (string-to-number ec))
(if (> ec 0) (forward-char (1- ec))))) (if (> ec 0) (forward-char (1- ec)))))
@ -1953,7 +1953,7 @@ If DEBUG is non-nil, then setup GUD debugging features."
(matlab-find-other-window-file-line-column ef el ec debug))) (matlab-find-other-window-file-line-column ef el ec debug)))
((string-match "^matlab:*\\(.*\\)$" url) ((string-match "^matlab:*\\(.*\\)$" url)
(process-send-string (process-send-string
(get-buffer-process gud-comint-buffer) (get-buffer-process mlgud-comint-buffer)
(concat (substring url (match-beginning 1) (match-end 1)) "\n"))))) (concat (substring url (match-beginning 1) (match-end 1)) "\n")))))
(defun matlab-shell-last-error () (defun matlab-shell-last-error ()
@ -2413,12 +2413,13 @@ Return the name of the temporary file."
(goto-char (point-min)) (goto-char (point-min))
(dolist (F functions) (dolist (F functions)
(save-excursion (save-excursion
;; Copy all local functions to script. (when (re-search-forward (semantic-tag-name F) nil t)
;; Found, copy it in.
(let ((ft (matlab-semantic-tag-text F orig))) (let ((ft (matlab-semantic-tag-text F orig)))
(goto-char (point-max)) (goto-char (point-max))
(insert "% Copy of " (semantic-tag-name F) "\n\n") (insert "% Copy of " (semantic-tag-name F) "\n\n")
(insert ft) (insert ft)
(insert "\n%%\n"))) (insert "\n%%\n"))))
) )
;; Save buffer, and setup ability to run this new script. ;; Save buffer, and setup ability to run this new script.
@ -2460,31 +2461,31 @@ Argument FNAME specifies if we should echo the region to the command line."
;;; matlab-shell.el ends here ;;; matlab-shell.el ends here
;; LocalWords: el Ludlam zappo compat comint gud Slience defcustom el cb ;; LocalWords: el Ludlam zappo compat comint mlgud Slience defcustom el cb
;; LocalWords: nodesktop defface autostart netshell emacsclient errorscanning ;; LocalWords: nodesktop defface autostart netshell emacsclient errorscanning
;; LocalWords: cco defun setq Keymaps keymap kbd featurep fboundp subprocess ;; LocalWords: cco defun setq Keymaps keymap kbd featurep fboundp subprocess
;; LocalWords: online EDU postoutput progn subjob eol mlfile emacsinit msbn pc ;; LocalWords: online EDU postoutput progn subjob eol mlfile emacsinit msbn pc
;; LocalWords: Thx Chappaz windowid dirtrackp dbhot erroexamples Ludlam zappo ;; LocalWords: Thx Chappaz windowid dirtrackp dbhot erroexamples Ludlam zappo
;; LocalWords: compat comint gud Slience defcustom nodesktop defface emacscd ;; LocalWords: compat comint mlgud Slience defcustom nodesktop defface emacscd
;; LocalWords: autostart netshell emacsclient errorscanning cco defun setq el ;; LocalWords: autostart netshell emacsclient errorscanning cco defun setq el
;; LocalWords: Keymaps keymap kbd featurep fboundp subprocess online EDU ;; LocalWords: Keymaps keymap kbd featurep fboundp subprocess online EDU
;; LocalWords: postoutput progn subjob eol mlfile emacsinit msbn pc Thx Ludlam ;; LocalWords: postoutput progn subjob eol mlfile emacsinit msbn pc Thx Ludlam
;; LocalWords: Chappaz windowid dirtrackp dbhot erroexamples cdr ENDPT dolist ;; LocalWords: Chappaz windowid dirtrackp dbhot erroexamples cdr ENDPT dolist
;; LocalWords: overlaystack mref deref errortext ERRORTXT Missmatched zappo ;; LocalWords: overlaystack mref deref errortext ERRORTXT Missmatched zappo
;; LocalWords: shellerror dbhotlink realfname aset buf noselect tcp auth ef ;; LocalWords: shellerror dbhotlink realfname aset buf noselect auth ef
;; LocalWords: dbhotlinks compat comint gud Slience defcustom capturetext ;; LocalWords: dbhotlinks compat comint mlgud Slience defcustom capturetext
;; LocalWords: nodesktop defface autostart netshell emacsclient errorscanning ;; LocalWords: nodesktop defface autostart netshell emacsclient errorscanning
;; LocalWords: cco defun setq Keymaps keymap kbd featurep fboundp subprocess ;; LocalWords: cco defun setq Keymaps keymap kbd featurep fboundp subprocess
;; LocalWords: online EDU postoutput progn subjob eol mlfile emacsinit msbn pc ;; LocalWords: online EDU postoutput progn subjob eol mlfile emacsinit msbn pc
;; LocalWords: Thx Chappaz windowid dirtrackp dbhot erroexamples cdr ENDPT ;; LocalWords: Thx Chappaz windowid dirtrackp dbhot erroexamples cdr ENDPT
;; LocalWords: dolist overlaystack mref deref errortext ERRORTXT Missmatched ;; LocalWords: dolist overlaystack mref deref errortext ERRORTXT Missmatched
;; LocalWords: shellerror dbhotlink realfname aset buf noselect tcp auth ef ;; LocalWords: shellerror dbhotlink realfname aset buf noselect auth ef
;; LocalWords: dbhotlinks dbhlcmd endprompt mello pmark memq promptend ;; LocalWords: dbhotlinks dbhlcmd endprompt mello pmark memq promptend
;; LocalWords: numchars integerp emacsdocomplete mycmd ba nreverse EMACSCAP ;; LocalWords: numchars integerp emacsdocomplete mycmd ba nreverse EMACSCAP
;; LocalWords: emacsdocompletion subfield fil byteswap stringp cbuff mapcar bw ;; LocalWords: emacsdocompletion subfield fil byteswap stringp cbuff mapcar bw
;; LocalWords: FCN's alist BUILTINFLAG dired bol bobp numberp lattr princ ;; LocalWords: FCN's alist BUILTINFLAG dired bol bobp numberp lattr princ
;; LocalWords: minibuffer fn matlabregex stackexchange doesnt lastcmd Emacsen ;; LocalWords: minibuffer fn matlabregex stackexchange doesnt lastcmd Emacsen
;; LocalWords: notimeout stacktop eltest testme localfcn LF mlx meth fileref ;; LocalWords: notimeout stacktop eltest testme localfcn LF meth fileref
;; LocalWords: funcall ec basec sk ignoredups boundp nondirectory edir sexp iq ;; LocalWords: funcall ec basec sk ignoredups boundp nondirectory edir sexp iq
;; LocalWords: Fixup mapc ltype noshow emacsrunregion cnt commandline elipsis ;; LocalWords: Fixup mapc ltype noshow emacsrunregion cnt commandline elipsis
;; LocalWords: newf bss fname nt initcmd nsa ecc ecca clientcmd buffname ;; LocalWords: newf bss fname nt initcmd nsa ecc ecca clientcmd buffname

View file

@ -594,25 +594,25 @@ point, but it will be restored for them."
["Edit File (toggle read-only)" matlab-shell-gud-mode-edit ["Edit File (toggle read-only)" matlab-shell-gud-mode-edit
:help "Exit MATLAB debug minor mode to edit without exiting MATLAB's K>> prompt." :help "Exit MATLAB debug minor mode to edit without exiting MATLAB's K>> prompt."
:visible gud-matlab-debug-active ] :visible gud-matlab-debug-active ]
["Add Breakpoint (ebstop in FILE at point)" gud-break ["Add Breakpoint (ebstop in FILE at point)" mlgud-break
:active (matlab-shell-active-p) :active (matlab-shell-active-p)
:help "When MATLAB debugger is active, set break point at current M-file point"] :help "When MATLAB debugger is active, set break point at current M-file point"]
["Remove Breakpoint (ebclear in FILE at point)" gud-remove ["Remove Breakpoint (ebclear in FILE at point)" mlgud-remove
:active (matlab-shell-active-p) :active (matlab-shell-active-p)
:help "Show all active breakpoints in a separate buffer." ] :help "When MATLAB debugger is active, remove break point in FILE at point." ]
["List Breakpoints (ebstatus)" gud-list-breakpoints ["List Breakpoints (ebstatus)" mlgud-list-breakpoints
:active (matlab-shell-active-p) :active (matlab-shell-active-p)
:help "List active breakpoints."] :help "List active breakpoints."]
["Step (dbstep in)" gud-step ["Step (dbstep in)" mlgud-step
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, step into line"] :help "When MATLAB debugger is active, step into line"]
["Next (dbstep)" gud-next ["Next (dbstep)" mlgud-next
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, step one line"] :help "When MATLAB debugger is active, step one line"]
["Finish function (dbstep out)" gud-finish ["Finish function (dbstep out)" mlgud-finish
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, run to end of function"] :help "When MATLAB debugger is active, run to end of function"]
["Continue (dbcont)" gud-cont ["Continue (dbcont)" mlgud-cont
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, run to next break point or finish"] :help "When MATLAB debugger is active, run to next break point or finish"]
["Evaluate Expression" matlab-shell-gud-show-symbol-value ["Evaluate Expression" matlab-shell-gud-show-symbol-value
@ -621,14 +621,14 @@ point, but it will be restored for them."
["Show Stack" mlg-show-stack ["Show Stack" mlg-show-stack
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, show the stack in a buffer."] :help "When MATLAB debugger is active, show the stack in a buffer."]
;;; Advertise these more if we can get them working w/ gud's frame show. ;;; Advertise these more if we can get them working w/ mlgud's frame show.
;;; ["Up Call Stack (dbup)" gud-up ;;; ["Up Call Stack (dbup)" mlgud-up
;;; :active gud-matlab-debug-active ;;; :active gud-matlab-debug-active
;;; :help "When MATLAB debugger is active and at break point, go up a frame"] ;;; :help "When MATLAB debugger is active and at break point, go up a frame"]
;;; ["Down Call Stack (dbdown)" gud-down ;;; ["Down Call Stack (dbdown)" mlgud-down
;;; :active gud-matlab-debug-active ;;; :active gud-matlab-debug-active
;;; :help "When MATLAB debugger is active and at break point, go down a frame"] ;;; :help "When MATLAB debugger is active and at break point, go down a frame"]
["Quit debugging (dbquit)" gud-stop-subjob ["Quit debugging (dbquit)" mlgud-stop-subjob
:active gud-matlab-debug-active :active gud-matlab-debug-active
:help "When MATLAB debugger is active, stop debugging"] :help "When MATLAB debugger is active, stop debugging"]
) )
@ -3243,10 +3243,10 @@ desired. Optional argument FAST is not used."
;;; matlab.el ends here ;;; matlab.el ends here
;; LocalWords: el Wette mwette caltech edu Ludlam eludlam defconst online mfiles ebstop ebclear ;; LocalWords: el Wette mwette caltech edu Ludlam eludlam defconst online mfiles ebstop ebclear
;; LocalWords: compat easymenu defcustom CASEINDENT COMMANDINDENT sexp defun ebstatus mlg gud's ;; LocalWords: compat easymenu defcustom CASEINDENT COMMANDINDENT sexp defun ebstatus mlg mlgud's
;; LocalWords: mmode setq progn sg Fns Alist elipsis vf functionname vers subjob flb fle elisp ;; LocalWords: mmode setq progn sg Fns Alist elipsis vf functionname vers subjob flb fle elisp
;; LocalWords: minibuffer featurep fboundp facep zmacs defface cellbreak bcend lastcompute noblock ;; LocalWords: minibuffer featurep fboundp facep zmacs defface cellbreak bcend lastcompute noblock
;; LocalWords: cellbreaks overline keymap torkel ispell gud allstring strchar decl lcbounds setcar ;; LocalWords: cellbreaks overline keymap torkel ispell mlgud allstring strchar decl lcbounds setcar
;; LocalWords: bs eu bc ec searchlim eol charvec Matchers ltype cdr if'd setcdr bcwrapped ;; LocalWords: bs eu bc ec searchlim eol charvec Matchers ltype cdr if'd setcdr bcwrapped
;; LocalWords: uicontext setcolor mld keywordlist mapconcat pragmas Classdefs ;; LocalWords: uicontext setcolor mld keywordlist mapconcat pragmas Classdefs
;; LocalWords: dem Za Imenu imenu alist prog reindent unindent boundp fn ;; LocalWords: dem Za Imenu imenu alist prog reindent unindent boundp fn

1298
mlgud.el Normal file

File diff suppressed because it is too large Load diff