lib/util: Add "_omb_util_alias_delayed"

This commit is contained in:
Koichi Murase 2023-04-09 23:13:02 +09:00
parent 0e9f0e7e7c
commit 681daf84e7
2 changed files with 58 additions and 33 deletions

View File

@ -21,45 +21,46 @@
# 1. MAKE TERMINAL BETTER
# -----------------------------
# Determines the use of the option `-v' on the first call
# Ref. https://github.com/ohmybash/oh-my-bash/issues/351
function _omb_alias_general_cp_init {
# Preferred 'cp' implementation. Determines the use of the option `-v' on the
# first call Ref. https://github.com/ohmybash/oh-my-bash/issues/351
function _omb_util_alias_select_cp {
if (tmp=$(_omb_util_mktemp); trap 'rm -f "$tmp"{,.2}' EXIT; command cp -v "$tmp" "$tmp.2" &>/dev/null); then
alias cp='cp -iv' && function _omb_alias_general_cp_init { command cp -iv "$@"; }
_omb_command='cp -iv'
else
alias cp='cp -i' && function _omb_alias_general_cp_init { command cp -i "$@"; }
fi &&
_omb_alias_general_cp_init "$@"
_omb_command='cp -i'
fi
}
function _omb_alias_general_mv_init {
if (tmp=$(_omb_util_mktemp); trap 'rm -f "$tmp.2"' EXIT; command mv -v "$tmp" "$tmp.2" &>/dev/null); then
alias mv='mv -iv' && function _omb_alias_general_mv_init { command mv -iv "$@"; }
else
alias mv='mv -i' && function _omb_alias_general_mv_init { command mv -i "$@"; }
fi &&
_omb_alias_general_mv_init "$@"
}
function _omb_alias_general_mkdir_init {
if command mkdir -pv . &>/dev/null; then
alias mkdir='mkdir -pv' && function _omb_alias_general_mkdir_init { command mkdir -pv "$@"; }
else
alias mkdir='mkdir -p' && function _omb_alias_general_mkdir_init { command mkdir -p "$@"; }
fi &&
_omb_alias_general_mkdir_init "$@"
}
alias cp='_omb_alias_general_cp_init' # Preferred 'cp' implementation
alias mv='_omb_alias_general_mv_init' # Preferred 'mv' implementation
alias mkdir='_omb_alias_general_mkdir_init' # Preferred 'mkdir' implementation
_omb_util_alias_delayed cp force
function _omb_alias_general_nano_init {
if LANG=C command nano --help 2>/dev/null | grep -q '^[[:space:]]*[-]W'; then
alias nano='nano -W' && function _omb_alias_general_nano_init { command nano -W "$@"; }
# Preferred 'mv' implementation
function _omb_util_alias_select_mv {
if (tmp=$(_omb_util_mktemp); trap 'rm -f "$tmp.2"' EXIT; command mv -v "$tmp" "$tmp.2" &>/dev/null); then
_omb_command='mv -iv'
else
unalias nano 2>/dev/null; function _omb_alias_general_nano_init { command nano "$@"; }
fi &&
_omb_alias_general_nano_init "$@"
_omb_command='mv -i'
fi
}
alias nano='_omb_alias_general_nano_init' # Preferred 'nano' implementation
_omb_util_alias_delayed mv force
# Preferred 'mkdir' implementation
function _omb_util_alias_select_mkdir {
if command mkdir -pv . &>/dev/null; then
_omb_command='mkdir -pv'
else
_omb_command='mkdir -p'
fi
}
_omb_util_alias_delayed mkdir force
# Preferred 'nano' implementation
function _omb_util_alias_select_nano {
if LANG=C command nano --help 2>/dev/null | grep -q '^[[:space:]]*[-]W'; then
_omb_command='nano -W'
else
_omb_command='nano'
fi
}
_omb_util_alias_delayed nano force
alias ll='ls -lAFh' # Preferred 'ls' implementation
alias less='less -FSRXc' # Preferred 'less' implementation

View File

@ -402,6 +402,30 @@ function _omb_util_alias {
alias -- "$1"
}
function _omb_util_alias_delayed__init {
local _omb_name=$1 _omb_init=${FUNCNAME[1]}
local _omb_command=$_omb_name
"_omb_util_alias_select_$_omb_name"
if [[ ! $_omb_command || $_omb_command == "$_omb_name" ]]; then
unalias "$_omb_name"
else
alias "$_omb_name=$_omb_command"
fi || return 1
eval -- "function $_omb_init { command ${_omb_command:-$_omb_name} \"\$@\"; }" && "$_omb_init" "${@:2}"
}
function _omb_util_alias_delayed {
local name=$1 opts=${2-}
local func=_omb_util_alias_init_$name
eval -- "function $func { _omb_util_alias_delayed__init $name \"\$@\"; }"
if [[ :$opts: == *:force:* ]]; then
alias "$name=$func"
else
_omb_util_alias "$name=$func"
fi
}
function _omb_util_mktemp {
local template=tmp.oh-my-bash.XXXXXXXXXX
if _omb_util_command_exists mktemp; then