Browse Source

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

MDHD 4 years ago
parent
commit
fd9781b4c7
1 changed files with 21 additions and 8 deletions
  1. 21 8
      plugins/sudo/sudo.plugin.zsh

+ 21 - 8
plugins/sudo/sudo.plugin.zsh

@@ -13,15 +13,28 @@
 # ------------------------------------------------------------------------------
 
 sudo-command-line() {
-    [[ -z $BUFFER ]] && zle up-history
-    if [[ $BUFFER == sudo\ * ]]; then
-        LBUFFER="${LBUFFER#sudo }"
-    elif [[ $BUFFER == $EDITOR\ * ]]; then
-        LBUFFER="${LBUFFER#$EDITOR }"
-        LBUFFER="sudoedit $LBUFFER"
+    [[ -z $BUFFER ]] && LBUFFER="$(fc -ln -1)"
+    if [[ -n $EDITOR && $BUFFER == $EDITOR\ * ]]; then
+        if [[ ${#LBUFFER} -le ${#EDITOR} ]]; then
+            RBUFFER=" ${BUFFER#$EDITOR }"
+            LBUFFER="sudoedit"
+        else
+            LBUFFER="sudoedit ${LBUFFER#$EDITOR }"
+        fi
     elif [[ $BUFFER == sudoedit\ * ]]; then
-        LBUFFER="${LBUFFER#sudoedit }"
-        LBUFFER="$EDITOR $LBUFFER"
+        if [[ ${#LBUFFER} -le 8 ]]; then
+            RBUFFER=" ${BUFFER#sudoedit }"
+            LBUFFER="$EDITOR"
+        else
+            LBUFFER="$EDITOR ${LBUFFER#sudoedit }"
+        fi
+    elif [[ $BUFFER == sudo\ * ]]; then
+        if [[ ${#LBUFFER} -le 4 ]]; then
+            RBUFFER="${BUFFER#sudo }"
+            LBUFFER=""
+        else
+            LBUFFER="${LBUFFER#sudo }"
+        fi
     else
         LBUFFER="sudo $LBUFFER"
     fi