From b110d6d5afe2c8529799b4ebd433399f080bcdf0 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Wed, 7 Apr 2021 20:22:58 +0000 Subject: 48435 (tweaked): vcs_info docs: applied-string/unapplied-string: Correct an omission in the documentation and add an example. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The example code is a reduced version of my function from workers/47519, with one bug fixed. (In workers/47519, if $1 doesn't contain spacesĀ - which is the case under hg mq - then $H and $s will be set to the same value.) Tweaked: Extended the contrib.yo hunk with details about mq. --- ChangeLog | 4 ++++ Doc/Zsh/contrib.yo | 15 ++++++++++++--- Misc/vcs_info-examples | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 10447cccd..01f1eeb4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2021-04-20 Daniel Shahaf + * 48435 (tweaked): Doc/Zsh/contrib.yo, Misc/vcs_info-examples: + vcs_info docs: applied-string/unapplied-string: Correct an + omission in the documentation and add an example. + * 48528/0002: Misc/vcs_info-examples: vcs_info git docs: ahead/behind commits: Reduce the number of forks diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo index 3c4fdded0..8bf1a208e 100644 --- a/Doc/Zsh/contrib.yo +++ b/Doc/Zsh/contrib.yo @@ -1652,10 +1652,17 @@ Called in the tt(git) (with tt(stgit) or during rebase or merge), and tt(hg) is generated; the tt(use-quilt) zstyle must be true for tt(quilt) (the tt(mq) and tt(stgit) backends are active by default). -This hook gets the names of all applied patches which tt(vcs_info) collected -so far in the opposite order, which means that the first argument is the +The arguments to this hook describe applied patches +in the opposite order, which means that the first argument is the top-most patch and so forth. +When the patches' log messages can be extracted, those are embedded +within each argument after a space, so each argument is of the form +`var(patch-name) var(first line of the log message)', where var(patch-name) +contains no whitespace. The tt(mq) backend passes arguments of +the form `var(patch name)', with possible embedded spaces, but without +extracting the patch's log message. + When setting tt(ret) to non-zero, the string in tt(${hook_com[applied-string]}) will be available as tt(%p) in the tt(patch-format) and tt(nopatch-format) styles. @@ -1669,9 +1676,11 @@ tt(mq)) backend and in tt(quilt) support when the tt(unapplied-string) is generated; the tt(get-unapplied) style must be true. This hook gets the names of all unapplied patches which tt(vcs_info) -collected so far in order, which means that the first argument is +in order, which means that the first argument is the patch next-in-line to be applied and so forth. +The format of each argument is as for tt(gen-applied-string), above. + When setting tt(ret) to non-zero, the string in tt(${hook_com[unapplied-string]}) will be available as tt(%u) in the tt(patch-format) and tt(nopatch-format) styles. diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples index ba94cca29..edb0760d1 100644 --- a/Misc/vcs_info-examples +++ b/Misc/vcs_info-examples @@ -285,6 +285,54 @@ function +vi-hg-branchhead() { } +### Show information about patch series +# This is used with with hg mq, quilt, and git rebases and conflicts. +# +# All these cases have a notion of a "series of patches/commits" that is being +# applied. The following shows the information about the most recent patch to +# have been applied: +zstyle ':vcs_info:*+gen-applied-string:*' hooks gen-applied-string +function +vi-gen-applied-string() { + # Separate the patch id from the patch log message. + if [[ $1 == *\ * ]]; then + local patch_name_or_filename="${1%% *}" + local patch_description="${1#* }" + else + local patch_name_or_filename="$1" + local patch_description="" + fi + + # Apply escaping; see `Oddities' in the manual. + patch_name_or_filename=${patch_name_or_filename//'%'/%%} + patch_description=${patch_description//'%'/%%} + + # Apply different colouring to the patch description. + if [[ -n ${patch_description} ]]; then + patch_description="%F{yellow}${patch_description}%f" + fi + + # Re-assemble $1, escaped and coloured. + hook_com[applied-string]="${patch_name_or_filename} ${patch_description}" + ret=1 +} +# The value of hook_com[applied-string] is incorporated into the %m expando +# (see the 'patch-format' style for details), which is not included in the +# 'formats' and 'actionformats' style by default, so to actually use this, +# you'll need to add %m (or %Q under quilt in add-on mode) to your 'formats' +# and 'actionformats' styles, as in: +# +# zstyle ':vcs_info:*' actionformats ' (%s)-[%b|%a]%u%c- %m' +# zstyle ':vcs_info:*' formats ' (%s)-[%b]%u%c- %m' +# +# Or you could add it as a new word, as in: +# +# zstyle ':vcs_info:*' actionformats ' (%s)-[%b|%a]%u%c-' '%m' +# zstyle ':vcs_info:*' formats ' (%s)-[%b]%u%c-' '%m' +# +# In the latter case, you will need to arrange to print ${vcs_info_msg_1_} in +# addition to ${vcs_info_msg_0_}; see the top of this file for details. + + ### Run vcs_info selectively to increase speed in large repos ################ # The following example shows a possible setup for vcs_info which displays @@ -547,6 +595,9 @@ function +vi-set-quilt-patches() { # This would take care of all the dedicated-patches-directory-in-${HOME} # from earlier examples, too. +# Finally, the "Show information about patch series" example above this section +# may also be useful. + ### Using vcs_info from CVS ################################################## -- cgit 1.4.1