From cd2eb07a788ceab8d0a5c3042a7711c5c6f5e60e Mon Sep 17 00:00:00 2001 From: m0viefreak Date: Sun, 23 Mar 2014 13:02:12 -0700 Subject: m0viefreak: users/18655,18657,18660: assorted auto-removable suffix fixes Src/Zle/compresult.c, Src/Zle/zle_misc.c, Src/Zle/zle_refresh.c: fix auto-removable suffix highlighting Completion/Unix/Command/_git: fix compadd for auto-removable suffix in _git_commit_ranges and _git_stash --- ChangeLog | 12 ++++++++++++ Completion/Unix/Command/_git | 4 ++-- Src/Zle/compresult.c | 2 +- Src/Zle/zle_misc.c | 28 ++++++++++++++-------------- Src/Zle/zle_refresh.c | 4 ++-- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60e38b685..67e524728 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2014-03-23 Barton E. Schaefer + + * m0viefreak: users/18660: Src/Zle/compresult.c, + Src/Zle/zle_misc.c, Src/Zle/zle_refresh.c: fix auto-removable + suffix highlighting + + * m0viefreak: users/18657: Completion/Unix/Command/_git: fix + compadd for auto-removable suffix in _git_stash + + * m0viefreak: users/18655: Completion/Unix/Command/_git: fix + compadd for auto-removable suffix in _git_commit_ranges + 2014-03-21 Peter Stephenson * Takeshi Banse: 32502: Completion/Unix/Command/_git: fix typo diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index 4982f3061..7cd3324a8 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -1536,7 +1536,7 @@ _git-stash () { '(--keep-index )--no-keep-index[all changes already added to the index are undone]' \ '(-q --quiet)'{-q,--quiet}'[suppress all output]' \ '(-u --include-untracked)'{-u,--include-untracked}'[include untracked files]' \ - '::message' && ret=0 + ':: :_guard "([^-]?#|)" message' && ret=0 ;; (list) local -a log_options revision_options @@ -5602,7 +5602,7 @@ __git_commit_ranges () { if compset -P '*..(.|)'; then __git_commits $* else - compset -S '..*' || suf=( -qS .. -r '.@~ ^:' ) + compset -S '..*' || suf=( -S .. -r '.@~ ^:\t\n\-' ) __git_commits $* $suf fi } diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c index c0e5ff3d8..fcceb670c 100644 --- a/Src/Zle/compresult.c +++ b/Src/Zle/compresult.c @@ -1131,7 +1131,7 @@ do_single(Cmatch m) /* If a suffix was added, and is removable, let * * `,' and `}' remove it. */ if (isset(AUTOPARAMKEYS)) - addsuffix(SUFTYP_POSSTR, 0, ZWS(",}"), 2, suffixnoinslen); + addsuffix(SUFTYP_POSSTR, 0, ZWS(",}"), 2, suffixlen); } else if (!menucmp) { /*{{*/ /* Otherwise, add a `,' suffix, and let `}' remove it. */ diff --git a/Src/Zle/zle_misc.c b/Src/Zle/zle_misc.c index 7be0ebbd1..9bc1cf6f5 100644 --- a/Src/Zle/zle_misc.c +++ b/Src/Zle/zle_misc.c @@ -1249,10 +1249,14 @@ static char *suffixfunc; /* Length associated with the suffix function */ static int suffixfunclen; -/* Length associated with uninsertable characters */ +/* Whether to remove suffix on uninsertable characters */ +/**/ +int suffixnoinsrem; + +/* Length of the currently active, auto-removable suffix. */ /**/ mod_export int -suffixnoinslen; +suffixlen; /**/ mod_export void @@ -1309,7 +1313,8 @@ makesuffix(int n) if ((suffixchars = getsparam("ZLE_SPACE_SUFFIX_CHARS")) && *suffixchars) addsuffixstring(SUFTYP_POSSTR, SUFFLAGS_SPACE, suffixchars, n); - suffixnoinslen = n; + suffixlen = n; + suffixnoinsrem = 1; } /* Set up suffix for parameter names: the last n characters are a suffix * @@ -1358,15 +1363,10 @@ makesuffixstr(char *f, char *s, int n) s = metafy(s, i, META_USEHEAP); ws = stringaszleline(s, 0, &i, NULL, NULL); - if (z) - suffixnoinslen = inv ? 0 : n; - else if (inv) { - /* - * negative match, \- wasn't present, so it *should* - * have this suffix length - */ - suffixnoinslen = n; - } + /* Remove suffix on uninsertable characters if \- was given * + * and the character class wasn't negated -- or vice versa. */ + suffixnoinsrem = z ^ inv; + suffixlen = n; lasts = wptr = ws; while (i) { @@ -1444,7 +1444,7 @@ iremovesuffix(ZLE_INT_T c, int keep) struct suffixset *ss; if (c == NO_INSERT_CHAR) { - sl = suffixnoinslen; + sl = suffixnoinsrem ? suffixlen : 0; } else { ZLE_CHAR_T ch = c; /* @@ -1538,5 +1538,5 @@ fixsuffix(void) suffixlist = next; } - suffixfunclen = suffixnoinslen = 0; + suffixfunclen = suffixnoinsrem = suffixlen = 0; } diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c index 2bedbc492..8ce678756 100644 --- a/Src/Zle/zle_refresh.c +++ b/Src/Zle/zle_refresh.c @@ -1046,8 +1046,8 @@ zrefresh(void) region_highlights[1].start = region_highlights[1].end = -1; } /* check for an active completion suffix */ - if (suffixnoinslen) { - region_highlights[2].start = zlecs - suffixnoinslen; + if (suffixlen) { + region_highlights[2].start = zlecs - suffixlen; region_highlights[2].end = zlecs; } else { region_highlights[2].start = region_highlights[2].end = -1; -- cgit 1.4.1