-
-\f
-;;; Tips for `gud'
-
-(defvar tooltip-gud-original-filter nil
- "Process filter to restore after GUD output has been received.")
-
-
-(defvar tooltip-gud-dereference nil
- "Non-nil means print expressions with a `*' in front of them.
-For C this would dereference a pointer expression.")
-
-
-(defvar tooltip-gud-event nil
- "The mouse movement event that led to a tooltip display.
-This event can be examined by forms in TOOLTIP-GUD-DISPLAY.")
-
-
-(defvar tooltip-gud-debugger nil
- "A symbol describing the debugger running under GUD.")
-
-
-(defun tooltip-gud-toggle-dereference ()
- "Toggle whether tooltips should show `* expr' or `expr'."
- (interactive)
- (setq tooltip-gud-dereference (not tooltip-gud-dereference))
- (when (interactive-p)
- (message "Dereferencing is now %s."
- (if tooltip-gud-dereference "on" "off"))))
-
-
-(defun tooltip-gud-process-output (process output)
- "Process debugger output and show it in a tooltip window."
- (set-process-filter process tooltip-gud-original-filter)
- (tooltip-show (tooltip-strip-prompt process output)))
-
-
-(defun tooltip-gud-print-command (expr)
- "Return a suitable command to print the expression EXPR.
-If TOOLTIP-GUD-DEREFERENCE is t, also prepend a `*' to EXPR."
- (when tooltip-gud-dereference
- (setq expr (concat "*" expr)))
- (case tooltip-gud-debugger
- ((gdb dbx) (concat "print " expr))
- (xdb (concat "p " expr))
- (sdb (concat expr "/"))
- (perldb expr)))
-
-
-(defun tooltip-gud-tips (event)
- "Show tip for identifier or selection under the mouse.
-The mouse must either point at an identifier or inside a selected
-region for the tip window to be shown. If tooltip-gud-dereference is t,
-add a `*' in front of the printed expression.
-
-This function must return nil if it doesn't handle EVENT."
- (let (gud-buffer process)
- (when (and (eventp event)
- tooltip-gud-tips-p
- (boundp 'gud-comint-buffer)
- (setq gud-buffer gud-comint-buffer)
- (setq process (get-buffer-process gud-buffer))
- (posn-point (event-end event))
- (progn (setq tooltip-gud-event event)
- (eval (cons 'and tooltip-gud-display))))
- (let ((expr (tooltip-expr-to-print event)))
- (when expr
- (let ((cmd (tooltip-gud-print-command expr)))
- (unless (null cmd) ; CMD can be nil if unknown debugger
- (setq tooltip-gud-original-filter (process-filter process))
- (set-process-filter process 'tooltip-gud-process-output)
- (gud-basic-call cmd)
- expr)))))))
-