fd9781b4c7036a3ef0a62744b9ecae327f9f2f24

Author
MDHD <MDHD.Yee@outlook.com>
Committer
GitHub <noreply@github.com>
Date

Message

sudo: make the behavior more in line with expectations (#9047)

Diff

 1diff --git a/plugins/sudo/sudo.plugin.zsh b/plugins/sudo/sudo.plugin.zsh
 2index f405b025f333c8278047d6f8832e3fb700d6de70..51579377d07fc78ea371c47e27adc7d7aaaa2790 100644
 3--- a/plugins/sudo/sudo.plugin.zsh
 4+++ b/plugins/sudo/sudo.plugin.zsh
 5@@ -13,15 +13,28 @@
 6 # ------------------------------------------------------------------------------
 7 
 8 sudo-command-line() {
 9-    [[ -z $BUFFER ]] && zle up-history
10-    if [[ $BUFFER == sudo\ * ]]; then
11-        LBUFFER="${LBUFFER#sudo }"
12-    elif [[ $BUFFER == $EDITOR\ * ]]; then
13-        LBUFFER="${LBUFFER#$EDITOR }"
14-        LBUFFER="sudoedit $LBUFFER"
15+    [[ -z $BUFFER ]] && LBUFFER="$(fc -ln -1)"
16+    if [[ -n $EDITOR && $BUFFER == $EDITOR\ * ]]; then
17+        if [[ ${#LBUFFER} -le ${#EDITOR} ]]; then
18+            RBUFFER=" ${BUFFER#$EDITOR }"
19+            LBUFFER="sudoedit"
20+        else
21+            LBUFFER="sudoedit ${LBUFFER#$EDITOR }"
22+        fi
23     elif [[ $BUFFER == sudoedit\ * ]]; then
24-        LBUFFER="${LBUFFER#sudoedit }"
25-        LBUFFER="$EDITOR $LBUFFER"
26+        if [[ ${#LBUFFER} -le 8 ]]; then
27+            RBUFFER=" ${BUFFER#sudoedit }"
28+            LBUFFER="$EDITOR"
29+        else
30+            LBUFFER="$EDITOR ${LBUFFER#sudoedit }"
31+        fi
32+    elif [[ $BUFFER == sudo\ * ]]; then
33+        if [[ ${#LBUFFER} -le 4 ]]; then
34+            RBUFFER="${BUFFER#sudo }"
35+            LBUFFER=""
36+        else
37+            LBUFFER="${LBUFFER#sudo }"
38+        fi
39     else
40         LBUFFER="sudo $LBUFFER"
41     fi