summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/zle_main.c5
-rw-r--r--Src/Zle/zle_vi.c5
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f3ccb15f7..9d32e2e4a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-16 Oliver Kiddle <opk@zsh.org>
+
+ * 33632: Src/Zle/zle_main.c, Src/Zle/zle_vi.c: use viopp and visual
+ local keymaps if they exist
+
2014-11-15 Oliver Kiddle <opk@zsh.org>
* 33697: Doc/Zsh/zle.yo, Src/Zle/iwidgets.list, Src/Zle/zle_word.c:
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 8344c66be..d157e36c2 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1067,6 +1067,7 @@ getrestchar(int inchar)
void
zlecore(void)
{
+ Keymap km;
#if !defined(HAVE_POLL) && defined(HAVE_SELECT)
struct timeval tv;
fd_set foofd;
@@ -1088,8 +1089,10 @@ zlecore(void)
statusline = NULL;
vilinerange = 0;
reselectkeymap();
- selectlocalmap(NULL);
+ selectlocalmap(invicmdmode() && region_active && (km = openkeymap("visual"))
+ ? km : NULL);
bindk = getkeycmd();
+ selectlocalmap(NULL);
if (bindk) {
if (!zlell && isfirstln && !(zlereadflags & ZLRF_IGNOREEOF) &&
lastchar == eofchar) {
diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c
index 68b1c9211..a7e8a70cc 100644
--- a/Src/Zle/zle_vi.c
+++ b/Src/Zle/zle_vi.c
@@ -167,6 +167,10 @@ getvirange(int wf)
virangeflag = 1;
wordflag = wf;
+ /* use operator-pending keymap if one exists */
+ Keymap km = openkeymap("viopp");
+ if (km)
+ selectlocalmap(km);
/* Now we need to execute the movement command, to see where it *
* actually goes. virangeflag here indicates to the movement *
* function that it should place the cursor at the end of the *
@@ -224,6 +228,7 @@ getvirange(int wf)
if (virangeflag == -1)
INCPOS(pos);
virangeflag = 0;
+ selectlocalmap(NULL);
/* Get the range the right way round. zlecs is placed at the *
* start of the range, and pos (the return value of this *