summaryrefslogtreecommitdiff
path: root/Src/Zle/complist.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/complist.c')
-rw-r--r--Src/Zle/complist.c44
1 files changed, 38 insertions, 6 deletions
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
index 61edd216c..527cd9825 100644
--- a/Src/Zle/complist.c
+++ b/Src/Zle/complist.c
@@ -1809,12 +1809,23 @@ domenuselect(Hookdef dummy, Chdata dat)
cmd == Th(z_downlineorhistory) ||
cmd == Th(z_downlineorsearch) ||
cmd == Th(z_vidownlineorhistory)) {
+ int omline;
+ Cmatch **op;
+
wrap = 0;
down:
+ omline = mline;
+ op = p;
+
do {
if (mline == mlines - 1) {
+ if (wrap & 2) {
+ mline = omline;
+ p = op;
+ break;
+ }
p -= mline * mcols;
mline = 0;
wrap |= 1;
@@ -1832,12 +1843,23 @@ domenuselect(Hookdef dummy, Chdata dat)
cmd == Th(z_uplineorhistory) ||
cmd == Th(z_uplineorsearch) ||
cmd == Th(z_viuplineorhistory)) {
+ int omline;
+ Cmatch **op;
+
wrap = 0;
up:
+ omline = mline;
+ op = p;
+
do {
if (!mline) {
+ if (wrap & 2) {
+ mline = omline;
+ p = op;
+ break;
+ }
mline = mlines - 1;
p += mline * mcols;
wrap |= 1;
@@ -1948,17 +1970,22 @@ domenuselect(Hookdef dummy, Chdata dat)
p = lp;
} else if (cmd == Th(z_forwardchar) || cmd == Th(z_viforwardchar)) {
int omcol;
- Cmatch *op;
+ Cmatch **op;
wrap = 0;
right:
omcol = mcol;
- op = *p;
+ op = p;
do {
if (mcol == mcols - 1) {
+ if (wrap & 1) {
+ p = op;
+ mcol = omcol;
+ break;
+ }
p -= mcol;
mcol = 0;
wrap |= 2;
@@ -1966,24 +1993,29 @@ domenuselect(Hookdef dummy, Chdata dat)
mcol++;
p++;
}
- } while (!*p || (mcol != omcol && *p == op));
+ } while (!*p || (mcol != omcol && *p == *op));
wishcol = mcol;
if (wrap == 2)
goto down;
} else if (cmd == Th(z_backwardchar) || cmd == Th(z_vibackwardchar)) {
int omcol;
- Cmatch *op;
+ Cmatch **op;
wrap = 0;
left:
omcol = mcol;
- op = *p;
+ op = p;
do {
if (!mcol) {
+ if (wrap & 1) {
+ p = op;
+ mcol = omcol;
+ break;
+ }
mcol = mcols - 1;
p += mcol;
wrap |= 2;
@@ -1991,7 +2023,7 @@ domenuselect(Hookdef dummy, Chdata dat)
mcol--;
p--;
}
- } while (!*p || (mcol != omcol && *p == op));
+ } while (!*p || (mcol != omcol && *p == *op));
wishcol = mcol;
if (wrap == 2)