unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
@ 2011-01-26 21:48 Reuben Thomas
  2011-01-29 23:29 ` Chong Yidong
  0 siblings, 1 reply; 8+ messages in thread
From: Reuben Thomas @ 2011-01-26 21:48 UTC (permalink / raw)
  To: 7924

Both in the manual and in the docstring for `cd', one might reasonably
infer (as I did!) that CDPATH will be searched when completing relative
directory names, but this is not the case.

Is there in fact any way to get this to work? It’s something that one
can do nicely in bash in a terminal, for example, but not in shell-mode.

In any case, it would be nice to lower users’ expectations by pointing
out in the docstring for cd, and in the manual, that it doesn’t apply to
interactive completion.


In GNU Emacs 23.2.91.4 (i686-pc-linux-gnu, GTK+ Version 2.22.0)
 of 2011-01-13 on canta
Windowing system distributor `The X.Org Foundation', version 11.0.10900000
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_GB.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  shell-dirtrack-mode: t
  recentf-mode: t
  show-paren-mode: t
  savehist-mode: t
  minibuffer-electric-default-mode: t
  iswitchb-mode: t
  icomplete-mode: t
  global-whitespace-mode: t
  global-auto-revert-mode: t
  desktop-save-mode: t
  yas/global-mode: t
  yas/minor-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-b C-b C-b C-b C-b <return> C-x 1 C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-n C-s C D 
P A T H C-a C-n C-n C-n C-n C-n C-h v c d - p a t h 
<return> C-x b <return> M-x c d <return> <M-backspace> 
<M-backspace> <M-backspace> <M-backspace> <M-backspace> 
<M-backspace> <M-backspace> <M-backspace> <backspace> 
g p <tab> <backspace> r e <backspace> <tab> <tab> <tab> 
<tab> C-g C-x b * s h <return> g r e p SPC c d - p 
a t h S-SPC ~ ? . <backspace> <backspace> / . e m a 
c s . d / * <return> <up> <down> M-p . e l <return> 
M-p <left> <left> <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <left> <left> <left> 
<left> <M-backspace> <M-backspace> C D P A T H <return> 
<up> <down> M-p <backspace> <backspace> <backspace> 
<backspace> <M-backspace> <backspace> <M-backspace> 
d e s <tab> <backspace> <backspace> <backspace> e m 
a c s . d / <backspace> <tab> e e <tab> <backspace> 
s <tab> <return> M-p <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <right> <M-backspace> 
c d - p a t h <return> c d SPC g r e p - c <backspace> 
d d <backspace> e c o m p r e s s <return> <help-echo> 
<down-mouse-1> <mouse-1> M-> C-x b <return> C-s r e 
a d - C-a M-x r e p o r t - e m a c s - b u g <ret
urn>

Recent messages:
No completions of ~/.des
Type space to flush; repeat completion command to scroll
No completions of ~/.emacs.dee
Completing file name...
No completions of ~/.emacs.dee
Partially completed
History item: 1
~/repo/grep-decompress 
Mark set
Mark saved where search started

Load-path shadows:
/home/rrt/.emacs.d/elpa/ruby-mode-1.1/ruby-mode hides /usr/share/emacs-snapshot/site-lisp/ruby1.8-elisp/ruby-mode
/home/rrt/local/share/emacs/site-lisp/popup hides /usr/local/share/emacs/23.2.91/site-lisp/auto-complete/popup
/home/rrt/local/share/emacs/site-lisp/fuzzy hides /usr/local/share/emacs/23.2.91/site-lisp/auto-complete/fuzzy
/home/rrt/.emacs.d/elpa/css-mode-1.0/css-mode hides /usr/local/share/emacs/23.2.91/site-lisp/css-mode/css-mode
/home/rrt/.emacs.d/elpa/dictionary-1.8.7/link hides /usr/local/share/emacs/23.2.91/site-lisp/dictionary-el/link
/home/rrt/.emacs.d/elpa/dictionary-1.8.7/connection hides /usr/local/share/emacs/23.2.91/site-lisp/dictionary-el/connection
/home/rrt/.emacs.d/elpa/dictionary-1.8.7/dictionary-init hides /usr/local/share/emacs/23.2.91/site-lisp/dictionary-el/dictionary-init
/home/rrt/.emacs.d/elpa/dictionary-1.8.7/dictionary hides /usr/local/share/emacs/23.2.91/site-lisp/dictionary-el/dictionary
/home/rrt/.emacs.d/elpa/css-mode-1.0/css-mode hides /usr/local/share/emacs/23.2.91/lisp/textmodes/css-mode
/home/rrt/.emacs.d/elpa/ruby-mode-1.1/ruby-mode hides /usr/local/share/emacs/23.2.91/lisp/progmodes/ruby-mode
/home/rrt/.emacs.d/elpa/css-mode-1.0/css-mode hides /usr/share/emacs/site-lisp/css-mode/css-mode
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-info hides /usr/share/emacs/site-lisp/auctex/tex-info
/usr/local/share/emacs/23.2.91/site-lisp/auctex/context-nl hides /usr/share/emacs/site-lisp/auctex/context-nl
/usr/local/share/emacs/23.2.91/site-lisp/auctex/context-en hides /usr/share/emacs/site-lisp/auctex/context-en
/usr/local/share/emacs/23.2.91/site-lisp/auctex/latex hides /usr/share/emacs/site-lisp/auctex/latex
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-mik hides /usr/share/emacs/site-lisp/auctex/tex-mik
/usr/local/share/emacs/23.2.91/site-lisp/dictionary-el/lpath hides /usr/share/emacs/site-lisp/auctex/lpath
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-buf hides /usr/share/emacs/site-lisp/auctex/tex-buf
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-jp hides /usr/share/emacs/site-lisp/auctex/tex-jp
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-bar hides /usr/share/emacs/site-lisp/auctex/tex-bar
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex hides /usr/share/emacs/site-lisp/auctex/tex
/usr/local/share/emacs/23.2.91/site-lisp/auctex/multi-prompt hides /usr/share/emacs/site-lisp/auctex/multi-prompt
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-fptex hides /usr/share/emacs/site-lisp/auctex/tex-fptex
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-font hides /usr/share/emacs/site-lisp/auctex/tex-font
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-fold hides /usr/share/emacs/site-lisp/auctex/tex-fold
/usr/local/share/emacs/23.2.91/site-lisp/auctex/texmathp hides /usr/share/emacs/site-lisp/auctex/texmathp
/usr/local/share/emacs/23.2.91/site-lisp/auctex/context hides /usr/share/emacs/site-lisp/auctex/context
/usr/local/share/emacs/23.2.91/site-lisp/auctex/font-latex hides /usr/share/emacs/site-lisp/auctex/font-latex
/usr/local/share/emacs/23.2.91/site-lisp/auctex/bib-cite hides /usr/share/emacs/site-lisp/auctex/bib-cite
/usr/local/share/emacs/23.2.91/site-lisp/auctex/toolbar-x hides /usr/share/emacs/site-lisp/auctex/toolbar-x
/usr/local/share/emacs/23.2.91/site-lisp/auctex/tex-style hides /usr/share/emacs/site-lisp/auctex/tex-style

Features:
(shadow sort mail-extr message sendmail ecomplete rfc822 mml mml-sec
password-cache mm-decode mm-bodies mm-encode mailcap mail-parse rfc2231
rfc2047 rfc2045 qp ietf-drums mailabbrev nnheader gnus-util netrc
time-date mm-util mail-prsvr gmm-utils mailheader canlock sha1 hex-util
hashcash mail-utils emacsbug multi-isearch find-func pp help-mode
ansi-color shell gud jka-compr info m4-mode autoconf autoconf-mode view
inform-mode noutline outline tex-info texinfo tex sh-script executable
longlines make-mode vc-git face-remap filladapt flyspell completing-help
recentf tree-widget wid-edit uniquify paren savehist minibuf-eldef
iswitchb icomplete whitespace autorevert time cus-start cus-load desktop
server php-mode etags cc-langs cc-mode cc-fonts cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs speedbar sb-image ezimage
dframe lua-mode regexp-opt comint ring ropemacs pymacs etags-update
smart-quotes ispell auto-dictionary-autoloads css-mode-autoloads
dictionary-autoloads diff-git-autoloads dired-isearch-autoloads
full-ack-autoloads guess-style-autoloads http-post-simple-autoloads
js2-mode-autoloads magit-autoloads mv-shell-autoloads
ruby-mode-autoloads package reporter advice advice-preload yasnippet
help-fns derived edmacro kmacro easymenu assoc cl cl-19 muse-autoloads
emacs-goodies-el emacs-goodies-custom emacs-goodies-loaddefs easy-mmode
bbdb-autoloads preview-latex tex-site auto-loads tooltip ediff-hook
vc-hooks lisp-float-type mwheel x-win x-dnd font-setting tool-bar dnd
fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer
select scroll-bar mldrag mouse jit-lock font-lock syntax facemenu
font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan
thai tai-viet lao korean japanese hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev loaddefs button minibuffer faces
cus-face files text-properties overlay md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote
make-network-process dbusbind system-font-setting font-render-setting
gtk x-toolkit x multi-tty emacs)

-- 
http://rrt.sc3d.org/





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-01-26 21:48 bug#7924: 23.2.91; Documentation about CDPATH is a little misleading Reuben Thomas
@ 2011-01-29 23:29 ` Chong Yidong
  2011-01-30 13:34   ` Reuben Thomas
                     ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Chong Yidong @ 2011-01-29 23:29 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: 7924

Reuben Thomas <rrt@sc3d.org> writes:

> Both in the manual and in the docstring for `cd', one might reasonably
> infer (as I did!) that CDPATH will be searched when completing relative
> directory names, but this is not the case.
>
> Is there in fact any way to get this to work? It’s something that one
> can do nicely in bash in a terminal, for example, but not in shell-mode.

I think this needs new code in `read-file-name-internal' (the completion
function for read-file-name).





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-01-29 23:29 ` Chong Yidong
@ 2011-01-30 13:34   ` Reuben Thomas
  2011-01-31  4:09   ` Stefan Monnier
  2011-02-01 22:11   ` Stefan Monnier
  2 siblings, 0 replies; 8+ messages in thread
From: Reuben Thomas @ 2011-01-30 13:34 UTC (permalink / raw)
  To: Chong Yidong; +Cc: 7924

On 29 January 2011 23:29, Chong Yidong <cyd@stupidchicken.com> wrote:
> Reuben Thomas <rrt@sc3d.org> writes:
>
>> Both in the manual and in the docstring for `cd', one might reasonably
>> infer (as I did!) that CDPATH will be searched when completing relative
>> directory names, but this is not the case.
>>
>> Is there in fact any way to get this to work? It’s something that one
>> can do nicely in bash in a terminal, for example, but not in shell-mode.
>
> I think this needs new code in `read-file-name-internal' (the completion
> function for read-file-name).

Fair enough, but in that case is it worth adding "(this does not work
with filename completion)" to the docstring and manual?

-- 
http://rrt.sc3d.org





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-01-29 23:29 ` Chong Yidong
  2011-01-30 13:34   ` Reuben Thomas
@ 2011-01-31  4:09   ` Stefan Monnier
  2011-02-01 22:11   ` Stefan Monnier
  2 siblings, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-01-31  4:09 UTC (permalink / raw)
  To: Chong Yidong; +Cc: 7924, Reuben Thomas

>> Both in the manual and in the docstring for `cd', one might reasonably
>> infer (as I did!) that CDPATH will be searched when completing relative
>> directory names, but this is not the case.
>> 
>> Is there in fact any way to get this to work? It’s something that one
>> can do nicely in bash in a terminal, for example, but not in shell-mode.

> I think this needs new code in `read-file-name-internal' (the completion
> function for read-file-name).

Indeed, but only for `cd'.  It shouldn't be too hard to do it either,


        Stefan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-01-29 23:29 ` Chong Yidong
  2011-01-30 13:34   ` Reuben Thomas
  2011-01-31  4:09   ` Stefan Monnier
@ 2011-02-01 22:11   ` Stefan Monnier
  2011-02-03 11:41     ` Reuben Thomas
  2011-02-22 11:25     ` Andrew W. Nosenko
  2 siblings, 2 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-02-01 22:11 UTC (permalink / raw)
  To: Chong Yidong; +Cc: 7924, Reuben Thomas

>> Both in the manual and in the docstring for `cd', one might reasonably
>> infer (as I did!) that CDPATH will be searched when completing relative
>> directory names, but this is not the case.
>> 
>> Is there in fact any way to get this to work? It’s something that one
>> can do nicely in bash in a terminal, for example, but not in shell-mode.

> I think this needs new code in `read-file-name-internal' (the completion
> function for read-file-name).

The patch below seems to work in my brief testing.


        Stefan


=== modified file 'lisp/files.el'
--- lisp/files.el	2011-02-01 20:53:09 +0000
+++ lisp/files.el	2011-02-01 22:06:43 +0000
@@ -700,25 +700,36 @@
 `path-separator') when resolving a relative directory name.
 The path separator is colon in GNU and GNU-like systems."
   (interactive
-   (list (read-directory-name "Change default directory: "
+   (list
+    ;; FIXME: There's a subtle bug in the completion below.  Seems linked
+    ;; to a fundamental difficulty of implementing `predicate' correctly.
+    ;; The manifestation is that TAB may list non-directories in the case where
+    ;; those files also correspond to valid directories (if your cd-path is (A/
+    ;; B/) and you have A/a a file and B/a a directory, then both `a' and `a/'
+    ;; will be listed as valid completions).
+    ;; This is because `a' (listed because of A/a) is indeed a valid choice
+    ;; (which will lead to the use of B/a).
+    (minibuffer-with-setup-hook
+        (lambda ()
+          (setq minibuffer-completion-table
+                (apply-partially #'locate-file-completion-table
+                                 cd-path nil))
+          (setq minibuffer-completion-predicate
+                (lambda (dir)
+                  (locate-file dir cd-path nil
+                               (lambda (f) (and (file-directory-p f) 'dir-ok))))))
+      (unless cd-path
+        (setq cd-path (or (parse-colon-path (getenv "CDPATH"))
+                          (list "./"))))
+      (read-directory-name "Change default directory: "
 			 default-directory default-directory
-			 (and (member cd-path '(nil ("./")))
-			      (null (getenv "CDPATH"))))))
-  (if (file-name-absolute-p dir)
-      (cd-absolute (expand-file-name dir))
-    (if (null cd-path)
-	(let ((trypath (parse-colon-path (getenv "CDPATH"))))
-	  (setq cd-path (or trypath (list "./")))))
-    (if (not (catch 'found
-	       (mapc
-		(function (lambda (x)
-			    (let ((f (expand-file-name (concat x dir))))
-			      (if (file-directory-p f)
-				  (progn
-				    (cd-absolute f)
-				    (throw 'found t))))))
-		cd-path)
-	       nil))
+                           t))))
+  (unless cd-path
+    (setq cd-path (or (parse-colon-path (getenv "CDPATH"))
+                      (list "./"))))
+  (cd-absolute
+   (or (locate-file dir cd-path nil
+                    (lambda (f) (and (file-directory-p f) 'dir-ok)))
 	(error "No such directory found via CDPATH environment variable"))))
 
 (defun load-file (file)

=== modified file 'src/lread.c'
--- src/lread.c	2011-01-31 18:47:03 +0000
+++ src/lread.c	2011-02-01 21:57:03 +0000
@@ -1223,7 +1223,9 @@
 file name when searching.
 If non-nil, PREDICATE is used instead of `file-readable-p'.
 PREDICATE can also be an integer to pass to the access(2) function,
-in which case file-name-handlers are ignored.  */)
+in which case file-name-handlers are ignored.
+This function will normally skip directories, so if you want it to find
+directories, make sure the PREDICATE function return `dir-ok' for them.  */)
   (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
 {
   Lisp_Object file;
@@ -1233,6 +1235,7 @@
   return file;
 }
 
+static Lisp_Object Qdir_ok;
 
 /* Search for a file whose name is STR, looking in directories
    in the Lisp list PATH, and trying suffixes from SUFFIX.
@@ -1350,9 +1353,12 @@
 	      if (NILP (predicate))
 		exists = !NILP (Ffile_readable_p (string));
 	      else
-		exists = !NILP (call1 (predicate, string));
-	      if (exists && !NILP (Ffile_directory_p (string)))
-		exists = 0;
+		{
+		  Lisp_Object tmp = call1 (predicate, string);
+		  exists = !NILP (tmp)
+		    && (EQ (tmp, Qdir_ok)
+			|| !NILP (Ffile_directory_p (string)));
+		}
 
 	      if (exists)
 		{
@@ -4369,6 +4375,9 @@
   Qfile_truename = intern_c_string ("file-truename");
   staticpro (&Qfile_truename) ;
 
+  Qdir_ok = intern_c_string ("dir-ok");
+  staticpro (&Qdir_ok);
+  
   Qdo_after_load_evaluation = intern_c_string ("do-after-load-evaluation");
   staticpro (&Qdo_after_load_evaluation) ;
 






^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-02-01 22:11   ` Stefan Monnier
@ 2011-02-03 11:41     ` Reuben Thomas
  2011-02-18 17:27       ` Stefan Monnier
  2011-02-22 11:25     ` Andrew W. Nosenko
  1 sibling, 1 reply; 8+ messages in thread
From: Reuben Thomas @ 2011-02-03 11:41 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 7924, Chong Yidong

Thanks very much for this Stefan. Unfortunately I can't get emacs head
to build at the moment, and the patch doesn't apply to the emacs-23
branch.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-02-03 11:41     ` Reuben Thomas
@ 2011-02-18 17:27       ` Stefan Monnier
  0 siblings, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-02-18 17:27 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: 7924-done, Chong Yidong

> Thanks very much for this Stefan.  Unfortunately I can't get Emacs's head
> to build at the moment, and the patch doesn't apply to the emacs-23
> branch.

I've installed it to the trunk, thanks.


        Stefan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#7924: 23.2.91; Documentation about CDPATH is a little misleading
  2011-02-01 22:11   ` Stefan Monnier
  2011-02-03 11:41     ` Reuben Thomas
@ 2011-02-22 11:25     ` Andrew W. Nosenko
  1 sibling, 0 replies; 8+ messages in thread
From: Andrew W. Nosenko @ 2011-02-22 11:25 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 7924, Chong Yidong, Reuben Thomas

On Wed, Feb 2, 2011 at 00:11, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>>> Both in the manual and in the docstring for `cd', one might reasonably
>>> infer (as I did!) that CDPATH will be searched when completing relative
>>> directory names, but this is not the case.
>>>
>>> Is there in fact any way to get this to work? It’s something that one
>>> can do nicely in bash in a terminal, for example, but not in shell-mode.
>
>> I think this needs new code in `read-file-name-internal' (the completion
>> function for read-file-name).
>
> The patch below seems to work in my brief testing.
>
>
>        Stefan
>
>
> === modified file 'lisp/files.el'
> --- lisp/files.el       2011-02-01 20:53:09 +0000
> +++ lisp/files.el       2011-02-01 22:06:43 +0000
> @@ -700,25 +700,36 @@
>  `path-separator') when resolving a relative directory name.
>  The path separator is colon in GNU and GNU-like systems."
>   (interactive
> -   (list (read-directory-name "Change default directory: "
> +   (list
> +    ;; FIXME: There's a subtle bug in the completion below.  Seems linked
> +    ;; to a fundamental difficulty of implementing `predicate' correctly.
> +    ;; The manifestation is that TAB may list non-directories in the case where
> +    ;; those files also correspond to valid directories (if your cd-path is (A/
> +    ;; B/) and you have A/a a file and B/a a directory, then both `a' and `a/'
> +    ;; will be listed as valid completions).
> +    ;; This is because `a' (listed because of A/a) is indeed a valid choice
> +    ;; (which will lead to the use of B/a).
> +    (minibuffer-with-setup-hook
> +        (lambda ()
> +          (setq minibuffer-completion-table
> +                (apply-partially #'locate-file-completion-table
> +                                 cd-path nil))
> +          (setq minibuffer-completion-predicate
> +                (lambda (dir)
> +                  (locate-file dir cd-path nil
> +                               (lambda (f) (and (file-directory-p f) 'dir-ok))))))
> +      (unless cd-path
> +        (setq cd-path (or (parse-colon-path (getenv "CDPATH"))
> +                          (list "./"))))
> +      (read-directory-name "Change default directory: "
>                         default-directory default-directory
> -                        (and (member cd-path '(nil ("./")))
> -                             (null (getenv "CDPATH"))))))
> -  (if (file-name-absolute-p dir)
> -      (cd-absolute (expand-file-name dir))
> -    (if (null cd-path)
> -       (let ((trypath (parse-colon-path (getenv "CDPATH"))))
> -         (setq cd-path (or trypath (list "./")))))
> -    (if (not (catch 'found
> -              (mapc
> -               (function (lambda (x)
> -                           (let ((f (expand-file-name (concat x dir))))
> -                             (if (file-directory-p f)
> -                                 (progn
> -                                   (cd-absolute f)
> -                                   (throw 'found t))))))
> -               cd-path)
> -              nil))
> +                           t))))
> +  (unless cd-path
> +    (setq cd-path (or (parse-colon-path (getenv "CDPATH"))
> +                      (list "./"))))
> +  (cd-absolute
> +   (or (locate-file dir cd-path nil
> +                    (lambda (f) (and (file-directory-p f) 'dir-ok)))
>        (error "No such directory found via CDPATH environment variable"))))
>
>  (defun load-file (file)
>
> === modified file 'src/lread.c'
> --- src/lread.c 2011-01-31 18:47:03 +0000
> +++ src/lread.c 2011-02-01 21:57:03 +0000
> @@ -1223,7 +1223,9 @@
>  file name when searching.
>  If non-nil, PREDICATE is used instead of `file-readable-p'.
>  PREDICATE can also be an integer to pass to the access(2) function,
> -in which case file-name-handlers are ignored.  */)
> +in which case file-name-handlers are ignored.
> +This function will normally skip directories, so if you want it to find
> +directories, make sure the PREDICATE function return `dir-ok' for them.  */)
>   (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
>  {
>   Lisp_Object file;
> @@ -1233,6 +1235,7 @@
>   return file;
>  }
>
> +static Lisp_Object Qdir_ok;
>
>  /* Search for a file whose name is STR, looking in directories
>    in the Lisp list PATH, and trying suffixes from SUFFIX.
> @@ -1350,9 +1353,12 @@
>              if (NILP (predicate))
>                exists = !NILP (Ffile_readable_p (string));
>              else
> -               exists = !NILP (call1 (predicate, string));
> -             if (exists && !NILP (Ffile_directory_p (string)))
> -               exists = 0;
> +               {
> +                 Lisp_Object tmp = call1 (predicate, string);
> +                 exists = !NILP (tmp)
> +                   && (EQ (tmp, Qdir_ok)
> +                       || !NILP (Ffile_directory_p (string)));
> +               }
>
>              if (exists)
>                {
> @@ -4369,6 +4375,9 @@
>   Qfile_truename = intern_c_string ("file-truename");
>   staticpro (&Qfile_truename) ;
>
> +  Qdir_ok = intern_c_string ("dir-ok");
> +  staticpro (&Qdir_ok);
> +
>   Qdo_after_load_evaluation = intern_c_string ("do-after-load-evaluation");
>   staticpro (&Qdo_after_load_evaluation) ;
>

This patch breaks spell checking.  Now ispell-word unable to find
installed aspell, tries to use ispell (as fallback?) and fails because
ispell is absent indeed.

    Starting new Ispell process [default] ...
    apply: Searching for program: no such file or directory, ispell


-- 
Andrew W. Nosenko <andrew.w.nosenko@gmail.com>





^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-02-22 11:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-26 21:48 bug#7924: 23.2.91; Documentation about CDPATH is a little misleading Reuben Thomas
2011-01-29 23:29 ` Chong Yidong
2011-01-30 13:34   ` Reuben Thomas
2011-01-31  4:09   ` Stefan Monnier
2011-02-01 22:11   ` Stefan Monnier
2011-02-03 11:41     ` Reuben Thomas
2011-02-18 17:27       ` Stefan Monnier
2011-02-22 11:25     ` Andrew W. Nosenko

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).