* compilation-find-file does not allow completing two levels of directory
@ 2007-01-15 19:33 Stephen Leake
2007-01-15 21:47 ` Stefan Monnier
0 siblings, 1 reply; 3+ messages in thread
From: Stephen Leake @ 2007-01-15 19:33 UTC (permalink / raw)
When compilation-search-path is not fully set up, and
compilation-find-file prompts for the file, it does not allow
completion when the file is actually two or more directory levels
down.
This is due to this change:
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.
This change was made in compile.el CVS revision 1.403.
The issue is the predicate passed to 'read-file-name'.
Example: find "emacs/progmodes/ada-mode.el" when the prompt starts in
"emacs/admin"
Change the paths to where your emacs source exists, then eval:
(read-file-name "file: " "/Gnu/Emacs/emacs/admin" "ada-mode.el" t nil
nil)
Type "<DEL> <DEL> <DEL> <DEL> <DEL> l i <tab> pr <tab> <ret"; the file is found.
Now eval this (the predicate is the same as used by
compilation-find-file):
(read-file-name "file: " "/Gnu/Emacs/emacs/admin" "ada-mode.el" t nil
(lambda (name)
(if (file-directory-p name)
(setq name (expand-file-name "ada-mode.el" name)))
(file-exists-p name)))
Type "<DEL> <DEL> <DEL> <DEL> <DEL> l i <tab>"; you get "[no match]".
As the comment in 'compliation-find-file' says, this predicate is
ignored when a file dialog is used. I suggest we just delete the
predicate, and keep the 'file-exists-p' check after the call to
'read-file-name'.
propsed patch:
RCS file: /sources/emacs/emacs/lisp/progmodes/compile.el,v
retrieving revision 1.413
diff -u -r1.413 compile.el
--- compile.el 24 Nov 2006 10:29:44 -0000 1.413
+++ compile.el 15 Jan 2007 19:32:56 -0000
@@ -1852,17 +1852,7 @@
(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))))
+ spec-dir filename t nil nil))
(origname name))
(cond
((not (file-exists-p name))
--
-- Stephe
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: compilation-find-file does not allow completing two levels of directory
2007-01-15 19:33 compilation-find-file does not allow completing two levels of directory Stephen Leake
@ 2007-01-15 21:47 ` Stefan Monnier
2007-01-15 23:34 ` Stephen Leake
0 siblings, 1 reply; 3+ messages in thread
From: Stefan Monnier @ 2007-01-15 21:47 UTC (permalink / raw)
Cc: emacs-devel
> RCS file: /sources/emacs/emacs/lisp/progmodes/compile.el,v
> retrieving revision 1.413
> diff -u -r1.413 compile.el
> --- compile.el 24 Nov 2006 10:29:44 -0000 1.413
> +++ compile.el 15 Jan 2007 19:32:56 -0000
> @@ -1852,17 +1852,7 @@
> (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))))
> + spec-dir filename t nil nil))
> (origname name))
> (cond
> ((not (file-exists-p name))
Thanks.
We can keep the file-exists-p in the predicate. And we should add a comment
explaining why the predicate is "incomplete" (otherwise someone might be
tempted to redo what I did).
Stefan
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: compilation-find-file does not allow completing two levels of directory
2007-01-15 21:47 ` Stefan Monnier
@ 2007-01-15 23:34 ` Stephen Leake
0 siblings, 0 replies; 3+ messages in thread
From: Stephen Leake @ 2007-01-15 23:34 UTC (permalink / raw)
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> Thanks.
You're welcome.
> We can keep the file-exists-p in the predicate.
Ok.
> And we should add a comment explaining why the predicate is
> "incomplete" (otherwise someone might be tempted to redo what I
> did).
Definitely.
--
-- Stephe
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-01-15 23:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-15 19:33 compilation-find-file does not allow completing two levels of directory Stephen Leake
2007-01-15 21:47 ` Stefan Monnier
2007-01-15 23:34 ` Stephen Leake
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).