From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20754 invoked by alias); 12 Aug 2012 18:11:52 -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: 30604 Received: (qmail 1775 invoked from network); 12 Aug 2012 18:11:40 -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,SPF_HELO_PASS, UNPARSEABLE_RELAY autolearn=ham version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at schrab.com designates 209.177.157.228 as permitted sender) From: Aaron Schrab To: zsh-workers@zsh.org Subject: [PATCH 2/2] Make vi-repeat-find more vim-like Date: Sun, 12 Aug 2012 14:00:07 -0400 Message-Id: <1344794407-28894-2-git-send-email-aaron@schrab.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1344794407-28894-1-git-send-email-aaron@schrab.com> References: <1344794407-28894-1-git-send-email-aaron@schrab.com> Change vi-repeat-find (;) and vi-rev-repeat-find (,) to ignore a match at the first character checked if repeating a vi-find-next-char-skip (t) or vi-find-prev-char-skip (T), as vim does (when cpoptions doesn't contain ;). The standard vi behaviour makes immediately repeating one of these searches useless, since the first character checked will always match resulting in no movement of the cursor. --- Src/Zle/zle_move.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/Src/Zle/zle_move.c b/Src/Zle/zle_move.c index 284a863..d5f464c 100644 --- a/Src/Zle/zle_move.c +++ b/Src/Zle/zle_move.c @@ -679,7 +679,7 @@ vifindnextchar(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = 1; tailadd = 0; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -691,7 +691,7 @@ vifindprevchar(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = -1; tailadd = 0; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -703,7 +703,7 @@ vifindnextcharskip(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = 1; tailadd = -1; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -715,14 +715,14 @@ vifindprevcharskip(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = -1; tailadd = 1; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } /**/ int -virepeatfind(char **args) +vifindchar(int repeat, char **args) { int ocs = zlecs, n = zmult; @@ -735,6 +735,16 @@ virepeatfind(char **args) zmult = n; return ret; } + if (repeat && tailadd != 0) { + if (vfinddir > 0) { + if(zlecs < zlell && (ZLE_INT_T)zleline[zlecs+1] == vfindchar) + INCCS(); + } + else { + if(zlecs > 0 && (ZLE_INT_T)zleline[zlecs-1] == vfindchar) + DECCS(); + } + } while (n--) { do { if (vfinddir > 0) @@ -760,19 +770,26 @@ virepeatfind(char **args) /**/ int +virepeatfind(char **args) +{ + return vifindchar(1, args); +} + +/**/ +int virevrepeatfind(char **args) { int ret; if (zmult < 0) { zmult = -zmult; - ret = virepeatfind(args); + ret = vifindchar(1, args); zmult = -zmult; return ret; } tailadd = -tailadd; vfinddir = -vfinddir; - ret = virepeatfind(args); + ret = vifindchar(1, args); vfinddir = -vfinddir; tailadd = -tailadd; return ret; -- 1.7.10.4