GNU bug report logs - #4819
file-truename's undocumented behavior

Previous Next

Package: emacs;

Reported by: MON KEY <monkey <at> sandpframing.com>

Date: Wed, 28 Oct 2009 00:35:04 UTC

Severity: normal

Tags: wontfix

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: MON KEY <monkey <at> sandpframing.com>
Cc: 4819 <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org
Subject: bug#4819: file-truename's undocumented behavior
Date: Wed, 28 Oct 2009 20:37:53 -0400
> I assumed nil.

That would be very unexpected, since file-truename otherwise always
returns a string when passed a string.

> However, discarding the state of my "least surprisedness", I would
> _not_ expect that file-truename would step all over the match-data,
> and where it does so not before first:

Most functions don't preserve the match-data, and even more so for
functions that manipulate strings or buffers.

> b) Noting that it does so in the documention. i.e. as per `split-string'.

It's the other way around: the few functions that preserve the
match-data should be documented as such (better yet: the byte-compiler
should be taught about them, so it can detect when we use the
match-data after it got clobbered).

>>> I just spent 2 1/2 hours in a break-loop three functions away trying
>>> to debug _undocumented_ behavior.
>> Which part of the documentation do you think this behavior contradicts?

> This part:
>  (file-name-absolute-p "") ;=> nil
>  (file-symlink-p "")       ;=> nil

That's not a part of the documentation.

> Why not mention in the docs that on w32 `w32-long-file-name' may be
> a more suitable alternative esp. as it is a primitive and as it will
> expand "8.3 DOS" short name aliases in the process. (Again, per
> _existing_ comments in body of `file-truename's definition).

Elisp should generally not be w32-specific, so ratehr than use
w32-long-file-name we should maybe change
file-truename correspondingly.  That doesn't mean I think it's the right
thing to do: I know next to nothing about this issue.

> !         ((and (string= (substring filename 0 1) "~")
> !               (string-match-p "~[^/]*/?" filename))
> !          (string-match "~[^/]*/?" filename)
> !          (let ((first-part
> !                 (substring filename 0 (match-end 0)))
> !                (rest (substring filename (match-end 0))))

What's the point?  If you're going to use string-match in the end, you
might as well do it right away.


        Stefan




This bug report was last modified 13 years and 322 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.