[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] find-file-noselect-1
From: |
Nick Roberts |
Subject: |
Re: [PATCH] find-file-noselect-1 |
Date: |
Mon, 14 Feb 2005 09:49:57 +1300 |
> I don't think that gud-comint-buffer should be set
> to nil because that would prevent the GDB session from recovering.
>
> Perhaps you should add a new variable, which you can set if you catch
> an error, to disable this hook from really doing anything once it has
> had an error.
I have added a variable called gdb-find-file-unhook. It gets re-initialised
at the start of every gdb session because the user might conceivably use
different versions of gdb. The most likely cause of an error that I can see
is gdb giving unexpected output eg GDB developers are internationalising
the CLI output (Note: MI output should not change, however).
> > Why call find-file-noselect there? If this is meant to operate on
> > the file that was just visited, it already has a buffer, and it is
> > the current buffer when gdb-find-file-hook runs. Why not just use
> > that buffer?
>
> That might have been true but I'm now using this function to address
> Kim's point about enabling gud-minor-mode for existing buffers.
>
> It sounds like you are in all cases trying to find an existing buffer.
> So instead of using find-file-noselect, you could use
> find-buffer-visiting.
I've not used find-buffer-visiting but I have followed Stefan's advice about
using the buffer instead of the filename. The patch is attached below. It
includes a few small unrelated changes now. Probably the best test is for it
to get some use.
Shall I install it?
Nick
*** /home/nick/emacs/lisp/progmodes/gdb-ui.el.~1.47.~ 2005-02-10
08:22:54.000000000 +1300
--- /home/nick/emacs/lisp/progmodes/gdb-ui.el 2005-02-14 09:31:05.000000000
+1300
***************
*** 79,84 ****
--- 79,86 ----
(defvar gdb-overlay-arrow-position nil)
(defvar gdb-server-prefix nil)
(defvar gdb-flush-pending-output nil)
+ (defvar gdb-location-list nil "List of directories for source files.")
+ (defvar gdb-find-file-unhook nil)
(defvar gdb-buffer-type nil
"One of the symbols bound in `gdb-buffer-rules'.")
***************
*** 191,196 ****
--- 193,227 ----
:group 'gud
:version "22.1")
+ (defun gdb-set-gud-minor-mode (buffer)
+ "Set gud-minor-mode from find-file if appropriate."
+ (goto-char (point-min))
+ (unless (search-forward "No source file named " nil t)
+ (condition-case nil
+ (gdb-enqueue-input
+ (list (concat gdb-server-prefix "info source\n")
+ `(lambda () (gdb-set-gud-minor-mode-1 ,buffer))))
+ (error (setq gdb-find-file-unhook t)))))
+
+ (defun gdb-set-gud-minor-mode-1 (buffer)
+ (goto-char (point-min))
+ (if (and (search-forward "Located in " nil t)
+ (looking-at "\\S-*")
+ (string-equal (buffer-file-name buffer)
+ (match-string 0)))
+ (with-current-buffer buffer
+ (set (make-local-variable 'gud-minor-mode) 'gdba)
+ (set (make-local-variable 'tool-bar-map) gud-tool-bar-map))))
+
+ (defun gdb-set-gud-minor-mode-existing-buffers ()
+ (dolist (buffer (buffer-list))
+ (let ((file (buffer-file-name buffer)))
+ (if file
+ (progn
+ (gdb-enqueue-input
+ (list (concat "list " (file-name-nondirectory file) ":1\n")
+ `(lambda () (gdb-set-gud-minor-mode ,buffer)))))))))
+
(defun gdb-ann3 ()
(setq gdb-debug-log nil)
(set (make-local-variable 'gud-minor-mode) 'gdba)
***************
*** 249,254 ****
--- 280,286 ----
(setq gdb-server-prefix "server ")
(setq gdb-flush-pending-output nil)
(setq gdb-location-list nil)
+ (setq gdb-find-file-unhook nil)
;;
(setq gdb-buffer-type 'gdba)
;;
***************
*** 263,268 ****
--- 295,301 ----
(gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran
program
(gdb-enqueue-input (list "server info source\n" 'gdb-source-info))
;;
+ (gdb-set-gud-minor-mode-existing-buffers)
(run-hooks 'gdba-mode-hook))
(defcustom gdb-use-colon-colon-notation nil
***************
*** 1048,1055 ****
;; buffer specific functions
gdb-info-breakpoints-custom)
- (defvar gdb-location-list nil "List of directories for source files.")
-
(defconst breakpoint-xpm-data
"/* XPM */
static char *magick[] = {
--- 1081,1086 ----
***************
*** 1159,1171 ****
(setq file (cdr (assoc bptno gdb-location-list))))
(unless (string-equal file "File not found")
(if file
! (with-current-buffer
! (find-file-noselect file)
! (save-current-buffer
! (set (make-local-variable 'gud-minor-mode)
'gdba)
! (set (make-local-variable 'tool-bar-map)
! gud-tool-bar-map))
;; only want one breakpoint icon at each
location
(save-excursion
(goto-line (string-to-number line))
--- 1190,1200 ----
(setq file (cdr (assoc bptno gdb-location-list))))
(unless (string-equal file "File not found")
(if file
! (with-current-buffer (find-file-noselect file)
! (set (make-local-variable 'gud-minor-mode)
'gdba)
! (set (make-local-variable 'tool-bar-map)
! gud-tool-bar-map)
;; only want one breakpoint icon at each
location
(save-excursion
(goto-line (string-to-number line))
***************
*** 2054,2068 ****
"Find the source file where the program starts and displays it with related
buffers."
(goto-char (point-min))
! (if (search-forward "Located in " nil t)
! (if (looking-at "\\S-*")
! (setq gdb-main-file (match-string 0))))
(if gdb-many-windows
(gdb-setup-windows)
(gdb-get-create-buffer 'gdb-breakpoints-buffer)
! (if gdb-show-main
! (let ((pop-up-windows t))
! (display-buffer (gud-find-file gdb-main-file))))))
(defun gdb-get-location (bptno line flag)
"Find the directory containing the relevant source file.
--- 2083,2097 ----
"Find the source file where the program starts and displays it with related
buffers."
(goto-char (point-min))
! (if (and (search-forward "Located in " nil t)
! (looking-at "\\S-*"))
! (setq gdb-main-file (match-string 0)))
(if gdb-many-windows
(gdb-setup-windows)
(gdb-get-create-buffer 'gdb-breakpoints-buffer)
! (if gdb-show-main
! (let ((pop-up-windows t))
! (display-buffer (gud-find-file gdb-main-file))))))
(defun gdb-get-location (bptno line flag)
"Find the directory containing the relevant source file.
***************
*** 2085,2090 ****
--- 2114,2135 ----
(goto-line (string-to-number line))
(gdb-put-breakpoint-icon (eq flag ?y) bptno))))
+ (add-hook 'find-file-hook 'gdb-find-file-hook)
+
+ (defun gdb-find-file-hook ()
+ (if (and (not gdb-find-file-unhook)
+ ;; in case gud or gdb-ui is just loaded
+ gud-comint-buffer
+ (buffer-name gud-comint-buffer)
+ (with-current-buffer gud-comint-buffer
+ (eq gud-minor-mode 'gdba)))
+ (condition-case nil
+ (gdb-enqueue-input
+ (list (concat "list " (file-name-nondirectory buffer-file-name)
+ ":1\n")
+ `(lambda () (gdb-set-gud-minor-mode ,(current-buffer)))))
+ (error nil))))
+
;;from put-image
(defun gdb-put-string (putstring pos &optional dprop)
"Put string PUTSTRING in front of POS in the current buffer.
- [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/10
- Re: [PATCH] find-file-noselect-1, Miles Bader, 2005/02/10
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/10
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/10
- Re: [PATCH] find-file-noselect-1, Richard Stallman, 2005/02/12
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/12
- Re: [PATCH] find-file-noselect-1, Stefan Monnier, 2005/02/12
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/13
- Re: [PATCH] find-file-noselect-1, Stefan Monnier, 2005/02/13
- Re: [PATCH] find-file-noselect-1, Richard Stallman, 2005/02/13
- Re: [PATCH] find-file-noselect-1,
Nick Roberts <=
- Re: [PATCH] find-file-noselect-1, Richard Stallman, 2005/02/15
- Re: [PATCH] find-file-noselect-1, Stefan Monnier, 2005/02/10
Re: [PATCH] find-file-noselect-1, Stefan Monnier, 2005/02/10
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/11
- Re: [PATCH] find-file-noselect-1, Kim F. Storm, 2005/02/11
- Re: [PATCH] find-file-noselect-1, Miles Bader, 2005/02/11
- Re: [PATCH] find-file-noselect-1, Kim F. Storm, 2005/02/11
- Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/11
- Re: [PATCH] find-file-noselect-1, Kim F. Storm, 2005/02/11
Re: [PATCH] find-file-noselect-1, Nick Roberts, 2005/02/11