From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29368 invoked by alias); 28 Jul 2013 12:10:18 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 31592 Received: (qmail 1921 invoked from network); 28 Jul 2013 12:10:01 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at gmx.net designates 212.227.17.20 as permitted sender) Message-ID: <201307281409560722.00B85479@mail.gmx.net> In-Reply-To: <20130727221545.GA58618@redoubt.spodhuis.org> References: <201307262058360115.008E9ADA@mail.gmx.net> <20130726223117.GA74369@redoubt.spodhuis.org> <201307271024260018.000E692E@mail.gmx.net> <20130727221545.GA58618@redoubt.spodhuis.org> X-Mailer: Courier 3.50.00.09.1098 (http://www.rosecitysoftware.com) (P) Date: Sun, 28 Jul 2013 14:09:56 +0200 Reply-To: mpy@gmx.net From: "Manuel Presnitz" To: "Phil Pennock" Cc: zsh-workers@zsh.org Subject: Re[4]: Bug with named dirs in prompt expansion Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K0:qB8BFGDrsZZdNk74ZMas/FUxV1b0SD8HmmnrRByYa7bPvHiWxgG p+MmIDO1aXxlr9I9NVUuD//pVBouKRH/kxDrYULuFkld7rgP5n9Jd1rw7DlDK2LeE/tTeMi IRG45sQyWITJFUKy9lAzzcqR8Ts0pilorSWUTUy4RH4/NKJroKMI8H6ObyPoTAtP+vWsNNU SKRiqjCBtiJmEK9dczS/A== Phil Pennock hat am 27.07.2013 um 18:15 folgendes geschrieben: > On 2013-07-27 at 10:24 +0200, Manuel Presnitz wrote: > > For my apologies I want to quote the zshmisc manpage, which does > > not mention that "shortening": > > Patches to the doc source are a good way to get involved with the > project. :) "See more details under Foo" would avoid violating DRY > while still making the content discoverable. Thanks for the encouragement. Before posting with [PATCH] subject, I'd like to have a second opinion, because I do not understand the expression "with ties broken in favour of " in the current doc. Perhaps other non-native speakers have the same problem, so I simplyfied it very much, but it can be completely wrong now: Current doc (Static named directories in zshexpn): [ In certain circumstances (in prompts, for instance), when the shell [ prints a path, the path is checked to see if it has a named directory [ as its prefix. If so, then the prefix portion is replaced with a `~' [ followed by the name of the directory. The shortest way of referring [ to the directory is used, with ties broken in favour of using a named [ directory, except when the directory is / itself My proposal: [ When the shell prints a path (e.g. when expanding %~ in prompts or [ when printing the directory stack), the path is checked to see if it has= a [ named directory as its prefix. If so, then the prefix portion is= replaced [ with a `~' followed by the name of the directory. The shortest= way [ of referring to the directory is used, so either the directory name or= the full [ path. I also deleted the part "except when the directory is / itself". It seems unnecessary to me, because a named directory (>=3D 2 chars) can never be shorter than "/". Is there another case, where this applies -- apart from expanding %~ and printing the directory stack? (I tried to figure it out by grepping the= source code and the man pages, but I failed.) Because the prompt expansion %~ is IMHO the most important case wherer the "shell prints a path", I propose a small repetition (despite of DRY), where as for "dirs" a reference is enough. I also mentioned $HOME replacement first, this should be much more common than named directories. Current doc (SIMPLE PROMPT ESCAPES (%~) in zshmisc) [ As %d and %/, but if the current working directory has a named= = [ directory as its prefix, that part is replaced by a `~' followed by= = [ the name of the directory. If it starts with $HOME, that part is= = [ replaced by a `~'. My proposal: [ As %d and %/, but if the current working directory starts with [ $HOME, that part is replaced by a `~'. Furthermore, if it has a named [ directory as its prefix, that part is replaced by a `~' followed by the= name [ of the directory, but only if the result is shorter compared to the full= path; [ see Dynamic and Static named directories in zshexpn(1). Thanks, Manuel. ---- diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo index 3623f9b..8e46a88 100644 --- a/Doc/Zsh/builtins.yo +++ b/Doc/Zsh/builtins.yo @@ -277,7 +277,9 @@ item(tt(-c))( clear the directory stack. ) item(tt(-l))( -print directory names in full instead of using of using tt(~) expressions. +print directory names in full instead of using of using tt(~) expressions= (\ +ifzman(see em(Dynamic) and em(Static named directories) in= zmanref(zshexpn))\ +ifnzman(noderef(Filename Expansion))). ) item(tt(-p))( print directory entries one per line. diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo index e8d1ed2..9da46bd 100644 --- a/Doc/Zsh/expn.yo +++ b/Doc/Zsh/expn.yo @@ -1708,14 +1708,13 @@ Note that trailing slashes will be removed from the= path to the directory It is also possible to define directory names using the tt(-d) option to= the tt(hash) builtin. -In certain circumstances (in prompts, for instance), when the shell -prints a path, the path is checked to see if it has a named -directory as its prefix. If so, then the prefix portion -is replaced with a `tt(~)' followed by the name of the directory. -The shortest way of referring to the directory is used, -with ties broken in favour of using a named directory, -except when the directory is tt(/) itself. The parameters tt($PWD) and -tt($OLDPWD) are never abbreviated in this fashion. +When the shell prints a path (e.g. when expanding tt(%~) in prompts or= when +printing the directory stack), the path is checked to see if it has a= named +directory as its prefix. If so, then the prefix portion is replaced with= a +`tt(~)' followed by the name of the directory. +The shortest way of referring to the directory is used, so either the= directory +name or the full path. +The parameters tt($PWD) and tt($OLDPWD) are never abbreviated in this= fashion. subsect(`=3D' expansion) diff --git a/Doc/Zsh/prompt.yo b/Doc/Zsh/prompt.yo index 8d79795..a6b9201 100644 --- a/Doc/Zsh/prompt.yo +++ b/Doc/Zsh/prompt.yo @@ -100,10 +100,13 @@ directory to show; zero means the whole path. A= negative integer specifies leading components, i.e. tt(%-1d) specifies the first component. ) item(tt(%~))( -As tt(%d) and tt(%/), but if the current working directory has a named +As tt(%d) and tt(%/), but if the current working directory starts with +tt($HOME), that part is replaced by a `tt(~)'. Furthermore, if it has a= named directory as its prefix, that part is replaced by a `tt(~)' followed by -the name of the directory. If it starts with tt($HOME), that part is -replaced by a `tt(~)'. +the name of the directory, but only if the result is shorter compared +to the full path; +ifzman(see em(Dynamic) and em(Static named directories) in= zmanref(zshexpn))\ +ifnzman(noderef(Filename Expansion)). ) xitem(tt(%h)) item(tt(%!))(