about summary refs log tree commit diff
path: root/Functions
diff options
context:
space:
mode:
authorChristoffer Lundell <christofferlundell@protonmail.com>2023-09-16 20:06:12 -0700
committerBart Schaefer <schaefer@zsh.org>2023-09-16 20:06:12 -0700
commitf72757ccf30610fe8fdd1ed76d080971f767edaf (patch)
treec09e5c9b86525b5fa0276fe03aceaa40670e116d /Functions
parent293d36ae1e34049e3f831b4b010d8ad028ff3196 (diff)
downloadzsh-f72757ccf30610fe8fdd1ed76d080971f767edaf.tar.gz
zsh-f72757ccf30610fe8fdd1ed76d080971f767edaf.tar.xz
zsh-f72757ccf30610fe8fdd1ed76d080971f767edaf.zip
52082: Enable linewise edit-command when in visual-line mode.
Diffstat (limited to 'Functions')
-rw-r--r--Functions/Zle/edit-command-line23
1 files changed, 19 insertions, 4 deletions
diff --git a/Functions/Zle/edit-command-line b/Functions/Zle/edit-command-line
index 5f7ea321f..d4b405eaf 100644
--- a/Functions/Zle/edit-command-line
+++ b/Functions/Zle/edit-command-line
@@ -11,15 +11,30 @@ local left right prebuffer buffer=$BUFFER lbuffer=$LBUFFER
 local TMPSUFFIX=.zsh
 # set up parameters depending on which context we are called from,
 # see below comment for more details
-if (( REGION_ACTIVE )); then
+if (( REGION_ACTIVE == 1 )); then
   if (( CURSOR < MARK )); then
     left=$CURSOR right=$MARK
-    lbuffer=
   else
     left=$MARK right=$CURSOR
-    lbuffer[right-left,-1]=
   fi
-  (( left++ ))
+  lbuffer=$lbuffer[++left,-1]
+  buffer=$BUFFER[left,++right]
+elif (( REGION_ACTIVE == 2 )); then
+  local nl=$'\n'
+  if (( CURSOR < MARK )); then
+    left=${${BUFFER[1,CURSOR]}[(I)$nl]}
+    right=${${BUFFER[MARK+1,-1]}[(i)$nl]}
+    (( right += MARK ))
+  else
+    left=${${BUFFER[1,MARK]}[(I)$nl]}
+    right=${${BUFFER[CURSOR+1,-1]}[(i)$nl]}
+    (( right += CURSOR ))
+  fi
+  lbuffer=$lbuffer[++left,-1]
+  if [[ $BUFFER[right] = $nl ]]; then
+    # Keep the newline because "$(<$1)" below trims it
+    (( --right ))
+  fi
   buffer=$BUFFER[left,right]
 elif (( ! ZLE_RECURSIVE )); then
   prebuffer=$PREBUFFER