1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-27 19:31:38 +00:00

(compilation-find-file): Handle the

cases where the user selects a non-existent file.
This commit is contained in:
Stefan Monnier 2006-07-18 14:40:29 +00:00
parent b0c2455471
commit f65b9df2d7
2 changed files with 46 additions and 21 deletions

View File

@ -1,3 +1,12 @@
2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/compile.el (compilation-find-file): Handle the
cases where the user selects a non-existent file.
2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
* bindings.el (minibuffer-local-map): Rebind TAB so it inserts a \t.
2006-07-17 Chong Yidong <cyd@stupidchicken.com>
* subr.el (sit-for): Just sleep-for if noninteractive.

View File

@ -1825,28 +1825,44 @@ Pop up the buffer containing MARKER and scroll to MARKER if we ask the user."
(find-file-noselect name))
fmts (cdr fmts)))
(setq dirs (cdr dirs)))
(or buffer
;; The file doesn't exist. Ask the user where to find it.
(save-excursion ;This save-excursion is probably not right.
(let ((pop-up-windows t))
(compilation-set-window (display-buffer (marker-buffer marker))
marker)
(let ((name (expand-file-name
(read-file-name
(format "Find this %s in (default %s): "
compilation-error filename)
spec-dir filename t))))
(if (file-directory-p name)
(setq name (expand-file-name filename name)))
(setq buffer (and (file-exists-p name)
(find-file-noselect name)))))))
(while (null buffer) ;Repeat until the user selects an existing file.
;; The file doesn't exist. Ask the user where to find it.
(save-excursion ;This save-excursion is probably not right.
(let ((pop-up-windows t))
(compilation-set-window (display-buffer (marker-buffer marker))
marker)
(let* ((name (read-file-name
(format "Find this %s in (default %s): "
compilation-error filename)
spec-dir filename t nil
;; Try to make sure the user can only select
;; a valid answer. This predicate may be ignored,
;; tho, so we still have to double-check afterwards.
;; TODO: We should probably fix read-file-name so
;; that it never ignores this predicate, even when
;; using popup dialog boxes.
(lambda (name)
(if (file-directory-p name)
(setq name (expand-file-name filename name)))
(file-exists-p name))))
(origname name))
(cond
((not (file-exists-p name))
(message "Cannot find file `%s'" name)
(ding) (sit-for 2))
((and (file-directory-p name)
(not (file-exists-p
(setq name (expand-file-name filename name)))))
(message "No `%s' in directory %s" filename origname)
(ding) (sit-for 2))
(t
(setq buffer (find-file-noselect name))))))))
;; Make intangible overlays tangible.
;; This is very weird: it's not even clear which is the current buffer,
;; so the code below can't be expected to DTRT here. --Stef
(mapcar (function (lambda (ov)
(when (overlay-get ov 'intangible)
(overlay-put ov 'intangible nil))))
(overlays-in (point-min) (point-max)))
;; This is weird: it's not even clear which is the current buffer,
;; so the code below can't be expected to DTRT here. -- Stef
(dolist (ov (overlays-in (point-min) (point-max)))
(when (overlay-get ov 'intangible)
(overlay-put ov 'intangible nil)))
buffer))
(defun compilation-get-file-structure (file &optional fmt)