summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2015-06-18 23:47:40 +0200
committerOliver Kiddle <opk@zsh.org>2015-06-18 23:47:40 +0200
commit8ebb4e65a9b47d68b730ff02e70d9ba28d3ccd3f (patch)
tree732d88d4b627fdb05139efaf07aaff0d7ad171ca
parent2c301822ca4c19e028b0ef978ee7b7a84d64fe81 (diff)
downloadzsh-8ebb4e65a9b47d68b730ff02e70d9ba28d3ccd3f.tar.gz
zsh-8ebb4e65a9b47d68b730ff02e70d9ba28d3ccd3f.zip
35504: complete % placeholders for git log --format
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Command/_git100
2 files changed, 93 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 9614924d6..2b4dfb4a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2015-06-18 Oliver Kiddle <opk@zsh.org>
+ * 35504: Completion/Unix/Command/_git: complete % placeholders
+ for git log --format
+
* 35521: Completion/Zsh/Type/_file_descriptors: sort matches
numerically and use pfiles on Solaris
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index 088a7dbb7..3e728865b 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -6269,6 +6269,95 @@ __git_setup_diff_stage_options () {
)
}
+(( $+functions[__git_format_placeholders] )) ||
+__git_format_placeholders() {
+ local sep
+ local -a disp names placeholders expl
+ if compset -P 'format:'; then
+ compset -P '(%[^acgCG]|%?[^%]|[^%])#'
+ if compset -P '%C'; then
+ _wanted colors expl color compadd reset red green blue
+ return
+ fi
+ if [[ -prefix %G ]]; then
+ placeholders=(
+ 'GG:raw verification message'
+ 'G?:indicate [G]ood, [B]ad, [U]ntrusted or [N]o signature'
+ 'GS:name of signer'
+ 'GK:signing key'
+ )
+ disp=( -l )
+ elif [[ -prefix %g ]]; then
+ placeholders=(
+ gD:'reflog selector'
+ gd:'short reflog selector'
+ gn:'reflog identity'
+ gs:'reflog subject'
+ )
+ disp=( -l )
+ elif [[ $PREFIX = (#b)%([ac]) ]]; then
+ placeholders=(
+ n:'name'
+ N:'name (use .mailmap)'
+ e:'email'
+ E:'email (use .mailmap)'
+ d:'date'
+ D:'date, RFC2822 style'
+ r:'date, relative'
+ t:'date, UNIX timestamp'
+ i:'date, like ISO 8601'
+ I:'date, strict ISO 8601'
+ )
+ placeholders=( $match[1]$^placeholders )
+ else
+ placeholders=(
+ H:commit\ hash
+ h:'abbreviated commit hash'
+ T:'tree hash'
+ t:'abbreviated tree hash'
+ P:'parent hash'
+ p:'abbreviated parent hash'
+ a:'author details'
+ c:'committer details'
+ d:'ref name in brackets'
+ D:'ref name'
+ e:encoding
+ s:subject
+ f:'sanitized subject'
+ g:reflog
+ b:body
+ B:'raw body'
+ N:notes
+ G:GPG\ details
+ C:color
+ m:mark
+ n:newline
+ %:raw\ %
+ x:'hex code'
+ w:'switch line wrapping'
+ )
+ fi
+ names=( ${placeholders%%:*} )
+ if zstyle -T ":completion:${curcontext}:" verbose; then
+ zstyle -s ":completion:${curcontext}:" list-separator sep || sep=--
+ zformat -a placeholders " $sep " $placeholders
+ disp+=(-d placeholders)
+ else
+ disp=()
+ fi
+ _wanted placeholders expl placeholder \
+ compadd -p % -S '' "$disp[@]" "$@" - "$names[@]"
+ else
+ _describe -t formats format '( oneline:"commit-ids and subject of messages"
+ short:"few headers and only subject of messages"
+ medium:"most parts of messages"
+ full:"all parts of commit messages"
+ fuller:"like full and includes dates"
+ email:"use email headers like From and Subject"
+ raw:"the raw commits" )' -- '( format:"specify own format" )' -S ':'
+ fi
+}
+
(( $+functions[__git_setup_revision_options] )) ||
__git_setup_revision_options () {
local -a diff_options
@@ -6276,16 +6365,7 @@ __git_setup_revision_options () {
revision_options=(
$diff_options
- # TODO: format pretty print format is a lot more advanced than this.
- # TODO: You can't actually specify --format without a format.
- '(-v --header)'{--pretty=-,--format=-}'[pretty print commit messages]::format:((oneline\:"commit-ids and subject of messages"
- short\:"few headers and only subject of messages"
- medium\:"most parts of messages"
- full\:"all parts of commit messages"
- fuller\:"like full and includes dates"
- email\:"use email headers like From and Subject"
- raw\:"the raw commits"
- format\:"specify own format"))'
+ '(-v --header)'{--pretty=-,--format=-}'[pretty print commit messages]::format:__git_format_placeholders'
'(--abbrev-commit --no-abbrev-commit)--abbrev-commit[show only partial prefixes of commit object names]'
'(--abbrev-commit --no-abbrev-commit)--no-abbrev-commit[show the full 40-byte hexadecimal commit object name]'
'(--abbrev --no-abbrev)--abbrev=[set minimum SHA1 display-length (for use with --abbrev-commit)]: :__git_guard_number length'