about summary refs log tree commit diff
path: root/Src/Zle/zle_vi.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2022-11-17 20:05:12 +0100
committerOliver Kiddle <opk@zsh.org>2022-11-17 20:05:12 +0100
commitc4d557bb0a9cf6a7241f760ad466e2d91359ceb2 (patch)
tree9441513ef4b6f3fabdeb1a9a31ed1a971c3b63d1 /Src/Zle/zle_vi.c
parentb1533066ca7d50c88b37ce72093c12cf19807818 (diff)
downloadzsh-c4d557bb0a9cf6a7241f760ad466e2d91359ceb2.tar.gz
zsh-c4d557bb0a9cf6a7241f760ad466e2d91359ceb2.tar.xz
zsh-c4d557bb0a9cf6a7241f760ad466e2d91359ceb2.zip
50934: use OSC 52 escape sequence when copying to "* or "+ vi buffers
Diffstat (limited to 'Src/Zle/zle_vi.c')
-rw-r--r--Src/Zle/zle_vi.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c
index 0f198d0e8..24d9de6ea 100644
--- a/Src/Zle/zle_vi.c
+++ b/Src/Zle/zle_vi.c
@@ -1014,6 +1014,9 @@ int
 visetbuffer(char **args)
 {
     ZLE_INT_T ch;
+    ZLE_CHAR_T *match = ZWS("_*+");
+    int registermod[] = { MOD_NULL, MOD_PRI, MOD_CLIP };
+    ZLE_CHAR_T *found;
 
     if (*args) {
 	ch = **args;
@@ -1022,12 +1025,12 @@ visetbuffer(char **args)
     } else {
 	ch = getfullchar(0);
     }
-    if (ch == ZWC('_')) {
-	zmod.flags |= MOD_NULL;
+    if ((found = ZS_strchr(match, ch))) {
+	zmod.flags |= registermod[found - match];
 	prefixflag = 1;
 	return 0;
     } else
-	zmod.flags &= ~MOD_NULL;
+	zmod.flags &= ~(MOD_NULL | MOD_OSSEL);
     if ((ch < ZWC('0') || ch > ZWC('9')) &&
 	 (ch < ZWC('a') || ch > ZWC('z')) &&
 	 (ch < ZWC('A') || ch > ZWC('Z')))