unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* read-file-name-predicate
@ 2007-03-07  6:00 Drew Adams
  2007-03-07 14:39 ` read-file-name-predicate Stefan Monnier
  2007-03-07 17:26 ` read-file-name-predicate Richard Stallman
  0 siblings, 2 replies; 13+ messages in thread
From: Drew Adams @ 2007-03-07  6:00 UTC (permalink / raw)
  To: Emacs-Devel

`read-file-name-predicate' is a Lisp variable. It's doc says only that it is
the current predicate used by built-in function `read-file-name-internal'.
This is the only doc about it, and it gives the impression that it is only
an internal variable for a built-in function. If that were true, then why
would it be a Lisp variable instead of a C variable?

The C code shows that `read-file-name-predicate' is in fact set to the value
of the PREDICATE arg to `read-file-name', but that is not documented
anywhere - shouldn't it be?  `read-file-name-predicate' has an external,
Lisp behavior: During completion, Lisp code can check what the predicate is
or even change the predicate. Shouldn't that be documented?

IOW, it seems like this variable is currently half way between being
internal and external. The doc suggests that it is internal, but the code
shows that you can examine it and change it from Lisp.

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

* Re: read-file-name-predicate
  2007-03-07  6:00 read-file-name-predicate Drew Adams
@ 2007-03-07 14:39 ` Stefan Monnier
  2007-03-07 15:11   ` read-file-name-predicate Juanma Barranquero
  2007-03-07 17:26 ` read-file-name-predicate Richard Stallman
  1 sibling, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2007-03-07 14:39 UTC (permalink / raw)
  To: Drew Adams; +Cc: Emacs-Devel

> IOW, it seems like this variable is currently half way between being
> internal and external.  The doc suggests that it is internal, but the code
> shows that you can examine it and change it from Lisp.

Being visible from Lisp doesn't mean it's external.  Lots of elisp packages
have internal variables as well.


        Stefan

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

* Re: read-file-name-predicate
  2007-03-07 14:39 ` read-file-name-predicate Stefan Monnier
@ 2007-03-07 15:11   ` Juanma Barranquero
  2007-03-07 16:31     ` read-file-name-predicate Drew Adams
  0 siblings, 1 reply; 13+ messages in thread
From: Juanma Barranquero @ 2007-03-07 15:11 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Drew Adams, Emacs-Devel

On 3/7/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> Being visible from Lisp doesn't mean it's external.  Lots of elisp packages
> have internal variables as well.

You're right, but I suppose Drew's point is: why it is visible from
Lisp *at all*? It is not used anywhere from lisp/*.el, and the only
src/* to use it is fileio.c.

I see Kim added it relatively recently, along with
read-file-name-function, which is used in ido. Perhaps he had some
intended use in mind?

             Juanma

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

* RE: read-file-name-predicate
  2007-03-07 15:11   ` read-file-name-predicate Juanma Barranquero
@ 2007-03-07 16:31     ` Drew Adams
  2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
  2007-03-08  3:16       ` read-file-name-predicate Richard Stallman
  0 siblings, 2 replies; 13+ messages in thread
From: Drew Adams @ 2007-03-07 16:31 UTC (permalink / raw)
  To: Emacs-Devel

> > Being visible from Lisp doesn't mean it's external.  Lots of 
> > elisp packages have internal variables as well.

So substitute "accessible from Lisp" where you feel I mispoke by using "external". I was trying to contrast internal to C with accessible from Lisp. (One level's "internal" is another level's "external"...)
 
> You're right, but I suppose Drew's point is: why it is visible from
> Lisp *at all*? It is not used anywhere from lisp/*.el, and the only
> src/* to use it is fileio.c.

My point is that it is currently entre deux chaises. Either 1) it should be, as it is, accessible from Lisp, in which case it should be documented, or 2) it should be inaccessible from Lisp. (Yes, I do realize that not everything that is accessible from Lisp is documented.)

I personally prefer #1. This being accessible from Lisp is a useful feature. I already use it in one of my libraries in a way similar to using `minibuffer-completion-predicate. I think that these two variables should in fact be treated in the same way: keep them accessible from Lisp, and document them similarly.

> I see Kim added it relatively recently, along with
> read-file-name-function, which is used in ido. Perhaps he had some
> intended use in mind?

I don't know what use Kim intended originally, but I've found it useful. Accessing `minibuffer-completion-predicate' is useless when it comes to file-name completion, and `read-file-name-predicate' fills the bill nicely. Without it, I know of no way to get at that predicate during completion, either to examine it or to modify it.

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

* Re: read-file-name-predicate
  2007-03-07 16:31     ` read-file-name-predicate Drew Adams
@ 2007-03-07 16:49       ` Eli Zaretskii
  2007-03-07 17:14         ` read-file-name-predicate Drew Adams
                           ` (2 more replies)
  2007-03-08  3:16       ` read-file-name-predicate Richard Stallman
  1 sibling, 3 replies; 13+ messages in thread
From: Eli Zaretskii @ 2007-03-07 16:49 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

> From: "Drew Adams" <drew.adams@oracle.com>
> Date: Wed, 7 Mar 2007 08:31:59 -0800
> 
> My point is that it is currently entre deux chaises. Either 1) it should be, as it is, accessible from Lisp, in which case it should be documented, or 2) it should be inaccessible from Lisp. (Yes, I do realize that not everything that is accessible from Lisp is documented.)

There are internal functions written in Lisp and internal Lisp
variables.  They are frequently not documented too well because it is
frequently hard to document them without explaining a lot of Emacs
internals.  This is perfectly normal.

I don't know if in this specific case the variable is a left-over from
something we don't need anymore; I hope Kim will answer that.  But
your general point -- that Lisp variables should all be documented to
the degree that every Emacs user should understand -- is not valid (as
a generality).

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

* RE: read-file-name-predicate
  2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
@ 2007-03-07 17:14         ` Drew Adams
  2007-03-08  4:19           ` read-file-name-predicate Eli Zaretskii
  2007-03-08  3:16         ` read-file-name-predicate Richard Stallman
  2007-03-08 11:16         ` read-file-name-predicate Kim F. Storm
  2 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-03-07 17:14 UTC (permalink / raw)
  To: emacs-devel

> > My point is that it is currently entre deux chaises. Either 1)
> > it should be, as it is, accessible from Lisp, in which case it
> > should be documented, or 2) it should be inaccessible from Lisp.
> > (Yes, I do realize that not everything that is accessible from
> > Lisp is documented.)
>
> There are internal functions written in Lisp and internal Lisp
> variables.  They are frequently not documented too well because it is
> frequently hard to document them without explaining a lot of Emacs
> internals.  This is perfectly normal.
>
> I don't know if in this specific case the variable is a left-over from
> something we don't need anymore; I hope Kim will answer that.  But
> your general point -- that Lisp variables should all be documented to
> the degree that every Emacs user should understand -- is not valid (as
> a generality).

Eli, you are arguing against the wind again.

That was *not* my "general point". I did *not* make that point at all, in
fact. I never said anything about "all" Lisp variables needing to be
documented. I explicitly said "Yes, I do realize that *not* everything that
is accessible from
Lisp is documented."

I argued only for documenting *this* variable, not all Lisp variables. The
argument I gave for documenting *this* variable is that it is useful for
Lisp programmers. The current doc does not say what it is for or what it
does. To use it, users will need to know that info. It's really very simple:
just say that this is the predicate supplied to `read-file-name'.

I also said nothing about "internal Lisp variables".

My point about internal/external was to point out that this variable, whose
doc says only that it is for use by a C-coded Lisp function, is not, in
fact, only accessible or only useful for that built-in function. It is just
as useful as the variable `minibuffer-completion-predicate', which is
prominently documented, and which is also used by a built-in function. To
me, these two variables are parallel.

Is this clear enough:

*IF*, as I hope, this is to remain a Lisp variable, and *IF*, as I claim, it
is useful to users in the same way that `minibuffer-completion-predicate' is
useful, *THEN* it should be documented similarly to
`minibuffer-completion-predicate'.

*IF* someone decides that this should be usable only by the built-in Lisp
function `read-file-name', *THEN* perhaps it should not be a Lisp variable
at all. A Lisp variable whose doc says, in effect, "There is no reason that
I am a Lisp variable, I don't do anything anyway, and you must not use me"
is silly.

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

* Re: read-file-name-predicate
  2007-03-07  6:00 read-file-name-predicate Drew Adams
  2007-03-07 14:39 ` read-file-name-predicate Stefan Monnier
@ 2007-03-07 17:26 ` Richard Stallman
  2007-03-07 17:35   ` read-file-name-predicate Drew Adams
  1 sibling, 1 reply; 13+ messages in thread
From: Richard Stallman @ 2007-03-07 17:26 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

    `read-file-name-predicate' is a Lisp variable. It's doc says only that it is
    the current predicate used by built-in function `read-file-name-internal'.
    This is the only doc about it, and it gives the impression that it is only
    an internal variable for a built-in function. If that were true, then why
    would it be a Lisp variable instead of a C variable?

Sometimes a Lisp variable is more convenient.  For instance, it works
naturally with the specbind mechanism.

      `read-file-name-predicate' has an external,
    Lisp behavior: During completion, Lisp code can check what the predicate is
    or even change the predicate. Shouldn't that be documented?

I see no reason to document it at present.
It is meant for internal use only.

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

* RE: read-file-name-predicate
  2007-03-07 17:26 ` read-file-name-predicate Richard Stallman
@ 2007-03-07 17:35   ` Drew Adams
  2007-03-08 17:40     ` read-file-name-predicate Richard Stallman
  0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-03-07 17:35 UTC (permalink / raw)
  To: emacs-devel

>     `read-file-name-predicate' has an external,
>     Lisp behavior: During completion, Lisp code can check what
>     the predicate is or even change the predicate. Shouldn't that
>     be documented?
>
> I see no reason to document it at present.
> It is meant for internal use only.

How is it different from `minibuffer-completion-predicate'? I see the two as
parallel.

Without this variable, how can you do, for file-name completion, what you
might do for non-file-name completion using
`minibuffer-completion-predicate'? Why document one but not the other?

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

* Re: read-file-name-predicate
  2007-03-07 16:31     ` read-file-name-predicate Drew Adams
  2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
@ 2007-03-08  3:16       ` Richard Stallman
  1 sibling, 0 replies; 13+ messages in thread
From: Richard Stallman @ 2007-03-08  3:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

    My point is that it is currently entre deux chaises. Either 1) it
    should be, as it is, accessible from Lisp, in which case it should
    be documented, or 2) it should be inaccessible from Lisp. (Yes, I
    do realize that not everything that is accessible from Lisp is
    documented.)

This is not a bug.  We should leave this alone, drop the subject, and
focus our attention on fixing bugs.

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

* Re: read-file-name-predicate
  2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
  2007-03-07 17:14         ` read-file-name-predicate Drew Adams
@ 2007-03-08  3:16         ` Richard Stallman
  2007-03-08 11:16         ` read-file-name-predicate Kim F. Storm
  2 siblings, 0 replies; 13+ messages in thread
From: Richard Stallman @ 2007-03-08  3:16 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: drew.adams, emacs-devel

    I don't know if in this specific case the variable is a left-over from
    something we don't need anymore; I hope Kim will answer that.  But
    your general point -- that Lisp variables should all be documented to
    the degree that every Emacs user should understand -- is not valid (as
    a generality).

That is correct.  Some C features need Lisp variables (and Lisp
primitive functions) that are internal and we do not need to document
them.  In some cases we do not WANT Lisp programmers to use these
internal functions and variables.

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

* Re: read-file-name-predicate
  2007-03-07 17:14         ` read-file-name-predicate Drew Adams
@ 2007-03-08  4:19           ` Eli Zaretskii
  0 siblings, 0 replies; 13+ messages in thread
From: Eli Zaretskii @ 2007-03-08  4:19 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

> From: "Drew Adams" <drew.adams@oracle.com>
> Date: Wed, 7 Mar 2007 09:14:28 -0800
> 
> That was *not* my "general point".

You could have fooled me.

Anyway, I commented on the general issue, not this specific variable.

> *IF*, as I hope, this is to remain a Lisp variable, and *IF*, as I claim, it
> is useful to users in the same way that `minibuffer-completion-predicate' is
> useful, *THEN* it should be documented similarly to
> `minibuffer-completion-predicate'.
> 
> *IF* someone decides that this should be usable only by the built-in Lisp
> function `read-file-name', *THEN* perhaps it should not be a Lisp variable
> at all.

These are not the only possibilities.  There are others, as Richard
and Stefan explained.

> A Lisp variable whose doc says, in effect, "There is no reason that
> I am a Lisp variable, I don't do anything anyway, and you must not use me"
> is silly.

That is not what the current doc string of this variable says.

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

* Re: read-file-name-predicate
  2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
  2007-03-07 17:14         ` read-file-name-predicate Drew Adams
  2007-03-08  3:16         ` read-file-name-predicate Richard Stallman
@ 2007-03-08 11:16         ` Kim F. Storm
  2 siblings, 0 replies; 13+ messages in thread
From: Kim F. Storm @ 2007-03-08 11:16 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Drew Adams, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> I don't know if in this specific case the variable is a left-over from
> something we don't need anymore; I hope Kim will answer that.

Because read-file-name-internal need to specbind it:

  count = SPECPDL_INDEX ();
  specbind (intern ("completion-ignore-case"),
	    read_file_name_completion_ignore_case ? Qt : Qnil);
  specbind (intern ("minibuffer-completing-file-name"), Qt);
  specbind (intern ("read-file-name-predicate"),
	    (NILP (predicate) ? Qfile_exists_p : predicate));

I guess it could have been done some other way, but this seemed
the easiest way to do it at the time.  

Let's not change it now.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: read-file-name-predicate
  2007-03-07 17:35   ` read-file-name-predicate Drew Adams
@ 2007-03-08 17:40     ` Richard Stallman
  0 siblings, 0 replies; 13+ messages in thread
From: Richard Stallman @ 2007-03-08 17:40 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

    Without this variable, how can you do, for file-name completion, what you
    might do for non-file-name completion using
    `minibuffer-completion-predicate'? Why document one but not the other?

Why not?

This is not important now.

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

end of thread, other threads:[~2007-03-08 17:40 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-07  6:00 read-file-name-predicate Drew Adams
2007-03-07 14:39 ` read-file-name-predicate Stefan Monnier
2007-03-07 15:11   ` read-file-name-predicate Juanma Barranquero
2007-03-07 16:31     ` read-file-name-predicate Drew Adams
2007-03-07 16:49       ` read-file-name-predicate Eli Zaretskii
2007-03-07 17:14         ` read-file-name-predicate Drew Adams
2007-03-08  4:19           ` read-file-name-predicate Eli Zaretskii
2007-03-08  3:16         ` read-file-name-predicate Richard Stallman
2007-03-08 11:16         ` read-file-name-predicate Kim F. Storm
2007-03-08  3:16       ` read-file-name-predicate Richard Stallman
2007-03-07 17:26 ` read-file-name-predicate Richard Stallman
2007-03-07 17:35   ` read-file-name-predicate Drew Adams
2007-03-08 17:40     ` read-file-name-predicate Richard Stallman

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