Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
874d83f7
Unverified
Commit
874d83f7
authored
Nov 12, 2020
by
Subhaditya Nath
Committed by
GitHub
Nov 11, 2020
Browse files
feat(sudo): support aliases to $EDITOR (#9431)
Co-authored-by:
Marc Cornellà
<
marc.cornella@live.com
>
parent
1beac595
Changes
1
Show whitespace changes
Inline
Side-by-side
plugins/sudo/sudo.plugin.zsh
View file @
874d83f7
...
...
@@ -9,40 +9,48 @@
# -------
#
# * Dongweiming <ciici123@gmail.com>
# * Subhaditya Nath <github.com/subnut>
# * Marc Cornellà <github.com/mcornella>
#
# ------------------------------------------------------------------------------
__sudo-replace-buffer
()
{
local
old
=
$1
new
=
$2
space
=
${
2
:+
}
if
[[
${#
LBUFFER
}
-le
${#
old
}
]]
;
then
RBUFFER
=
"
${
space
}${
BUFFER
#
$old
}
"
LBUFFER
=
"
${
new
}
"
else
LBUFFER
=
"
${
new
}${
space
}${
LBUFFER
#
$old
}
"
fi
}
sudo-command-line
()
{
[[
-z
$BUFFER
]]
&&
LBUFFER
=
"
$(
fc
-ln
-1
)
"
# Save beginning space
local
WHITESPACE
=
""
if
[[
${
LBUFFER
:0:1
}
=
=
" "
]]
;
then
if
[[
${
LBUFFER
:0:1
}
=
" "
]]
;
then
WHITESPACE
=
" "
LBUFFER
=
"
${
LBUFFER
:1
}
"
fi
if
[[
-n
$EDITOR
&&
$BUFFER
==
$EDITOR
\
*
]]
;
then
if
[[
${#
LBUFFER
}
-l
e
$
{#
EDITOR
}
]]
;
then
RBUFFER
=
"
${
BUFFER
#
$EDITOR
}
"
LBUFFER
=
"sudoedit
"
else
LBUFFER
=
"sudoedit
${
LBUFFER
#
$EDITOR
}
"
# Get the first part of the typed command and check if it's an alias to $EDITOR
# If so, locally chang
e $EDITOR
to the alias so that it matches below
if
[[
-n
"
$EDITOR
"
]]
;
then
local
cmd
=
"
${${
(Az)BUFFER
}
[1]
}
"
if
[[
"
${
aliases
[
$cmd
]
}
"
=
(
\$
EDITOR|
$EDITOR
)
\
*
]]
;
then
local
EDITOR
=
"
$cmd
"
fi
elif
[[
$BUFFER
==
sudoedit
\
*
]]
;
then
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
if
[[
-n
$EDITOR
&&
$BUFFER
=
$EDITOR
\
*
]]
;
then
__sudo-replace-buffer
"
$EDITOR
"
"sudoedit"
elif
[[
-n
$EDITOR
&&
$BUFFER
=
\$
EDITOR
\
*
]]
;
then
__sudo-replace-buffer
"
\$
EDITOR"
"sudoedit"
elif
[[
$BUFFER
=
sudoedit
\
*
]]
;
then
__sudo-replace-buffer
"sudoedit"
"
$EDITOR
"
elif
[[
$BUFFER
=
sudo
\
*
]]
;
then
__sudo-replace-buffer
"sudo"
""
else
LBUFFER
=
"sudo
$LBUFFER
"
fi
...
...
@@ -50,7 +58,9 @@ sudo-command-line() {
# Preserve beginning space
LBUFFER
=
"
${
WHITESPACE
}${
LBUFFER
}
"
}
zle
-N
sudo-command-line
# Defined shortcut keys: [Esc] [Esc]
bindkey
-M
emacs
'\e\e'
sudo-command-line
bindkey
-M
vicmd
'\e\e'
sudo-command-line
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment