[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: file-truename, convert-standard-filename

From: Drew Adams
Subject: RE: file-truename, convert-standard-filename
Date: Sat, 6 Feb 2010 15:12:05 -0800

> > That means that in order to use ANY file name (any 
> > file-name string, no matter where it was coded or how
> > it is produced), you need to apply c-s-f to it, if you
> > don't know whether the name is supported by all platforms 
> > that might be used by your code.
> Again, the case when the string is known to be a name of an existing
> file is the important exception.  For example, if it comes from
> buffer-file-name, or from default-directory, or from other similar
> interfaces.

OK. Then add "and you do not know whether the file named exists" to what I
wrote. Again, that is the general case.

> > > If this part is understood, then just use 
> > > `convert-standard-filename' in any situation where a
> > > string to be used as a file name might not be
> > > valid on the underlying filesystem, 
> > 
> > Which for an unknown string (e.g. the string value of a 
> > variable) means ALL situations, no?
> It could be, unless, again, you know that a file by that name already
> exists.

Got it.

> > BTW, I notice that prior to Emacs 23 the Emacs source code 
> > did not use c-s-f very much (e.g. defcustoms, such as in
> > recentf.el); Emacs 23 uses it much more.
> > I suppose this means that we had more problems with this 
> > before Emacs 23.
> No, it just means we made some cleanup.  The situations where this
> really matters are very rare, and if you ignore the MS-DOS case, are
> almost non-existent.  People rarely use characters in file names that
> get you in trouble on MS-Windows.  And if the file name comes from the
> user, you can almost be certain she will never use such characters,
> and even if she does, she deserves the error message.
> About the only real use-case is when the file name comes from the Lisp
> code itself.  Which is why I mentioned literal strings so many times.

Hm. That changes things considerably.

My summary:

THEORETICALLY, one _always_ needs c-s-f, unless either (1) you know that the
file that is named exists or (2) you know _all_ of the following: (2a) the file
system being used, (2b) the file name being used, and (2c) that the given file
name is a valid one for the given file system.

IN PRACTICE, however, the only real use-case is for MS-DOS support, and in
particular, only when the file name is a literal string in Lisp code.

Have I got it now?

If so, then for my purposes, since I do not care about MS-DOS support for my
code, I will _never_ need to use c-s-f. Hope I'm understanding correctly now.
For me, it seems, the ALWAYS of theoretically changes quickly to the NEVER of
practically. That's a big change.

If I've got it right, then (practically) the use of c-s-f is pretty much only an
internal one for Emacs development. I don't expect there is a lot of 3rd-party
code intended for MS-DOS. (But I might be mistaken about that.)

Anyway, assuming I finally understand this, thank you very much. (If I don't,
I'd be grateful if you would try once more.)

And I think you now know what kinds of things you might want to say and not say
in the doc, to clear things up. 

If you want my suggestion about that (the doc), and assuming my understanding is
correct, then I'd say that what I just wrote above (theoretical vs practical) is
all anyone needs to find in the doc. In particular: in practice, c-s-f is only
for MS-DOS support. So unless you develop code for the Emacs distribution, YAGNI
(use cases are "almost non-existent").

Thanks, Eli. If I'm still missing the point, please let me know.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]