1
0
Fork 0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2024-10-16 11:40:46 +00:00

feat: Implement auto-detection of subexecutor

This commit is contained in:
Pandu POLUAN 2024-03-06 11:09:49 +07:00
parent fd01fd66ce
commit a13fdca8ac
4 changed files with 52 additions and 6 deletions

44
lib/00subexecutor.zsh Normal file
View file

@ -0,0 +1,44 @@
## Provides auto-detection of subexecutor to use
# If in the future a new subexecuter is created, we only need to edit this array
typeset _KNOWN_SUBEXES=( "doas" "sudo" )
typeset _SUBEX
function _SetupSubexecutor() {
local _i
local _cmd
zstyle -s ':omz' 'subexecutor' _SUBEX
if [[ "$_SUBEX" ]]; then
if command -v "$_SUBEX" > /dev/null; then
return 0
fi
print "Cannot find subexecutor '${_SUBEX}'; please check your configuration!" >&2
return 1
fi
for _i in "${_KNOWN_SUBEXES[@]}"; do
if command -v "$_i" > /dev/null; then
_SUBEX="$_i"
break
fi
done
if [[ -z $_SUBEX ]]; then
print "oh-my-zsh: cannot auto-detect subexecutor; please specify explicitly using 'zstyle :omz subexecutor'." >&2
return 1
fi
zstyle ':omz' 'subexecutor' "$_SUBEX"
}
_SetupSubexecutor
unfunction _SetupSubexecutor
unset _KNOWN_SUBEXES
# The alias provides a 'hardcoded', invariant subexecutor to use throughout the shell session
alias _="$_SUBEX "
# The function is, in contrast, modifiable by changing the :omz->subexecutor zstyle
function subex() {
local _subex
zstyle -s ':omz' 'subexecutor' _subex
${_subex} "$@"
}

View file

@ -3,8 +3,11 @@ if [[ "$ENABLE_CORRECTION" == "true" ]]; then
alias man='nocorrect man'
alias mkdir='nocorrect mkdir'
alias mv='nocorrect mv'
alias sudo='nocorrect sudo'
alias su='nocorrect su'
zstyle -s ':omz' 'subexecutor' _subex
alias "$_subex"="nocorrect $_subex"
unset _subex
setopt correct_all
fi

View file

@ -27,9 +27,6 @@ elif (( ${+commands[more]} )); then
env_default 'PAGER' 'more'
fi
## super user alias
alias _='sudo '
## more intelligent acking for ubuntu users and no alias for users without ack
if (( $+commands[ack-grep] )); then
alias afind='ack-grep -il'

View file

@ -95,8 +95,10 @@ function omz_termsupport_preexec {
fi
fi
# cmd name only, or if this is sudo or ssh, the next cmd
local CMD="${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%}"
# cmd name only, or if this is doas/sudo or ssh, the next cmd
local _subex
zstyle -s ':omz' 'subexecutor' _subex
local CMD="${1[(wr)^(*=*|${_subex}|_|subex|mosh|rake|-*)]:gs/%/%%}"
local LINE="${2:gs/%/%%}"
title "$CMD" "%100>...>${LINE}%<<"