Subject: Re: [PATCH] New :P history modifier.
From: Bart Schaefer <[email-masked]>
To: [email-masked]
Date: Wed, 17 Aug 2016 00:02:40 -0700
List-Id: Zsh Workers List <zsh-workers.zsh.org>

On Aug 16, 11:54pm, Daniel Shahaf wrote:
}
} WDYT?

The code changes are essentially OK; my only thought is, maybe we
should just remove the dependency on the POSIX realpath() call even
from :A, and use xsymlink() everywhere?

Picking at the docs ...

Given that we went to the trouble of hashing it out, it is probably
worth noting that :a is intended to result in the path to along which
"cd" would change under the default setopts (no_chase_dots), and :A
is meant to result in the physical directory at the end of that path.

} +	"a:absolute path, resolve '..' logically"
} +	"A:same, then resolve symlinks"
} +	"P:realpath, resolve '..' physically"

You should spell out what "same" means, because the two descriptions
may not always appear together.  I'm not sure "logical" and "physical"
are the right words here, but "by text replacement" and "by filesystem
reference" seem a bit too verbose, so I don't have a suggestion, just
calling attention.

(Aside:  The doc for "cd" doesn't ever describe how it behaves when
CHASE_DOTS is not set; the user is left to infer it from the doc that
explains what happens when CHASE_DOTS is set.)

} +The new word modifier ':P' computes the realpath() of the argument.
} +It is different from the existing ':a' modifier which does not resolve
} +symlinks, and from the existing ':A' modifier which always resolves
   ^^^^^^^^

If you're going to compare to both :a and :A, symlinks aren't the largest
difference vs. :a -- following ".." is.  In fact I'd say following ".."
is more important to the distinction than symlinks are.

} +/before/here/../after to /before/after --- even if /before/here is
} +a symbolic link.  It is recommended to review uses of ':A' and, if
} +appropriate, convert them to ':P' as soon as compatibility with 5.2 is
} +no longer a requirement.

So how about e.g.:

 The new word modifier ':P' computes the physical path of the argument.
 it is different from the existing ':a' modifier which does always
 resolves /before/here/../after to /before/after, and differs from the
 existing ':A' modifier which resolves symlinks only after here/.. is
 removed even when /before/here is itself a symbolic link.

That's all.