From 681daf84e742271d464009740a87f8ddbd3646ba Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Sun, 9 Apr 2023 23:13:02 +0900 Subject: [PATCH] lib/util: Add "_omb_util_alias_delayed" --- aliases/general.aliases.sh | 67 +++++++++++++++++++------------------- lib/utils.sh | 24 ++++++++++++++ 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/aliases/general.aliases.sh b/aliases/general.aliases.sh index 1e97dcf..3cd9670 100644 --- a/aliases/general.aliases.sh +++ b/aliases/general.aliases.sh @@ -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 diff --git a/lib/utils.sh b/lib/utils.sh index 049c44f..0504758 100644 --- a/lib/utils.sh +++ b/lib/utils.sh @@ -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