about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-11-08 19:38:46 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-11-08 19:38:46 +0000
commitdd00cca82ef4a43c54edb0e14b6bc9dba3fbff46 (patch)
tree317f7275b387a44708e68352e07091cfe0e17709
parent9873dda3aaaaea7c7b00c2c7c8e5b71123c91035 (diff)
downloadzsh-dd00cca82ef4a43c54edb0e14b6bc9dba3fbff46.tar.gz
zsh-dd00cca82ef4a43c54edb0e14b6bc9dba3fbff46.tar.xz
zsh-dd00cca82ef4a43c54edb0e14b6bc9dba3fbff46.zip
zsh-workers/8590
-rw-r--r--Completion/Core/_path_files9
-rw-r--r--Src/Zle/zle.h1
-rw-r--r--Src/Zle/zle_tricky.c3
-rw-r--r--Src/Zle/zle_utils.c8
4 files changed, 18 insertions, 3 deletions
diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files
index 019fafbcb..6468215cc 100644
--- a/Completion/Core/_path_files
+++ b/Completion/Core/_path_files
@@ -400,8 +400,13 @@ compquote tmp1 tmp4
   done
 
   if [[ -z "$tmp4" ]]; then
-    PREFIX="${opre}${osuf}"
-    SUFFIX=""
+    if [[ "$osuf" = */* ]]; then
+      PREFIX="${opre}${osuf}"
+      SUFFIX=""
+    else
+      PREFIX="${opre}"
+      SUFFIX="${osuf}"
+    fi
     tmp4="$testpath"
     compquote tmp4 tmp1
     compadd -Qf -p "$linepath$tmp4" \
diff --git a/Src/Zle/zle.h b/Src/Zle/zle.h
index 2dfeb6950..2b23811d7 100644
--- a/Src/Zle/zle.h
+++ b/Src/Zle/zle.h
@@ -107,6 +107,7 @@ struct change {
     int off;			/* offset of the text changes */
     char *del;			/* characters to delete (metafied) */
     char *ins;			/* characters to insert (metafied) */
+    int old_cs, new_cs;		/* old and new cursor positions */
 };
 
 #define CH_NEXT (1<<0)   /* next structure is also part of this change */
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index 04b841411..b85084355 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -512,6 +512,9 @@ docomplete(int lst)
     char *s, *ol;
     int olst = lst, chl = 0, ne = noerrs, ocs, ret = 0;
 
+    if (undoing)
+	setlastline();
+
     if (runhookdef(BEFORECOMPLETEHOOK, (void *) &lst))
 	return 0;
 
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c
index bd2f39a06..2cd985124 100644
--- a/Src/Zle/zle_utils.c
+++ b/Src/Zle/zle_utils.c
@@ -53,7 +53,7 @@ struct cutbuffer vibuf[35];
 /**/
 char *lastline;
 /**/
-int lastlinesz, lastll;
+int lastlinesz, lastll, lastcs;
 
 /* size of line buffer */
 
@@ -438,6 +438,7 @@ initundo(void)
     curchange->del = curchange->ins = NULL;
     lastline = zalloc(lastlinesz = linesz);
     memcpy(lastline, line, lastll = ll);
+    lastcs = cs;
 }
 
 /**/
@@ -511,6 +512,8 @@ mkundoent(void)
     ch->next = NULL;
     ch->hist = histline;
     ch->off = pre;
+    ch->old_cs = lastcs;
+    ch->new_cs = cs;
     if(suf + pre == lastll)
 	ch->del = NULL;
     else
@@ -541,6 +544,7 @@ setlastline(void)
     if(lastlinesz != linesz)
 	lastline = realloc(lastline, lastlinesz = linesz);
     memcpy(lastline, line, lastll = ll);
+    lastcs = cs;
 }
 
 /* move backwards through the change list */
@@ -578,6 +582,7 @@ unapplychange(struct change *ch)
 	    else
 		line[cs++] = STOUC(*c);
     }
+    cs = ch->old_cs;
 }
 
 /* move forwards through the change list */
@@ -616,6 +621,7 @@ applychange(struct change *ch)
 	    else
 		line[cs++] = STOUC(*c);
     }
+    cs = ch->new_cs;
 }
 
 /* vi undo: toggle between the end of the undo list and the preceding point */