diff --git a/lib/00subexecutor.zsh b/lib/00subexecutor.zsh new file mode 100644 index 000000000..41f62b853 --- /dev/null +++ b/lib/00subexecutor.zsh @@ -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} "$@" +} + diff --git a/lib/correction.zsh b/lib/correction.zsh index ba9664fcb..3f68920be 100644 --- a/lib/correction.zsh +++ b/lib/correction.zsh @@ -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 diff --git a/lib/misc.zsh b/lib/misc.zsh index ff2017713..c7feecc16 100644 --- a/lib/misc.zsh +++ b/lib/misc.zsh @@ -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' diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index d170ffcbf..5b63a0f0d 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -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}%<<"