# ___X_CMD_ALIAS_SEP="$(printf "\001")"
# ___X_CMD_ALIAS_ITEM_SEP="$(printf "\002")"

___X_CMD_ALIAS_SEP="$___X_CMD_UNSEENCHAR_001"
___X_CMD_ALIAS_ITEM_SEP="$___X_CMD_UNSEENCHAR_002"

### [BEGIN] Temporary shutting down
___x_cmd_a(){
    ___x_cmd_alias "___x_cmd" "$@"
}

___x_cmd_ua(){
    ___x_cmd_unalias "___x_cmd" "$@"
}
### [END] Temporary shutting down

___x_cmd_alias(){
    case "$#" in
        1)      ___x_cmd_alias_ls   "$@" ;;
        2)
                if [ "${2#*=}" = "$2" ]; then
                    ___x_cmd_alias_print    "$@"
                else
                    ___x_cmd_alias_set      "$@"
                fi
                ;;
        -h|--help)
                shift; ___x_cmd help -m alias "$@" ;;
        *)      ___x_cmd_alias_set          "$@" ;;
    esac
}

___x_cmd_unalias(){
    ___x_cmd_alias_unset "$@"
}

___x_cmd_alias_init(){
    local obj="$1"
    eval "___X_CMD_ALIAS_SET_${obj}=\"\${___X_CMD_ALIAS_SET_${obj}:-\${___X_CMD_ALIAS_SEP}}\""
}

___x_cmd_alias_ls(){
    local obj="$1"
    local DATA
    eval "DATA=\"\${___X_CMD_ALIAS_SET_${obj}}\""

    local NO_COLOR="$NO_COLOR"; ___x_cmd_is_stdout2tty || NO_COLOR=1
    printf "%s" "${DATA#${___X_CMD_ALIAS_SEP}}" | ___x_cmd_cmds_awk -v RS="${___X_CMD_ALIAS_SEP}" -v FS="${___X_CMD_ALIAS_ITEM_SEP}" -v NO_COLOR="$NO_COLOR" '
BEGIN{  if (NO_COLOR != 1){ UI_END="\033[0m"; UI_NAME="\033[32m"; UI_CODE="\033[33m"; UI_DESC="\033[90m"; }     }
{       printf("  %s=%s        %s\n", UI_NAME $1 UI_END, UI_CODE $2 UI_END, UI_DESC $3 UI_END);                 }
'
}

___x_cmd_alias_echo(){
    local IFS=" "
    printf "%s" "$*"
}


___x_cmd_alias_set(){
    local obj="$1";     local name="$2";


    local code="${name#*=}"
    if [ "$code" = "$name" ]; then
        printf "CANNOT set alias for %s" "$*" >&2
        return 1
    fi

    name="${name%%=*}"
    # Put these things into the
    local desc="$3"

    ___x_cmd_alias_unset "$obj" "$name"

    eval "___X_CMD_ALIAS_SET_${obj}=\"\${___X_CMD_ALIAS_SET_${obj}}"'${name}${___X_CMD_ALIAS_ITEM_SEP}${code}${___X_CMD_ALIAS_ITEM_SEP}${desc}${___X_CMD_ALIAS_SEP}"'
}

___x_cmd_alias_clear(){
    local obj="$1"
    eval "___X_CMD_ALIAS_SET_${obj}=\"\${___X_CMD_ALIAS_SEP}\""
}

___x_cmd_alias_unset(){
    local obj="$1";     local name="$2";    shift 2
    local DATA
    eval "DATA=\"\${___X_CMD_ALIAS_SET_${obj}}\""

    local a="${DATA%%${___X_CMD_ALIAS_SEP}${name}${___X_CMD_ALIAS_ITEM_SEP}*}"
    if [ "$a" = "$DATA" ]; then
        return 1
    fi

    DATA="${DATA#*${___X_CMD_ALIAS_SEP}${name}${___X_CMD_ALIAS_ITEM_SEP}*${___X_CMD_ALIAS_SEP}}"
    DATA="$a${___X_CMD_ALIAS_SEP}${DATA}"

    eval "___X_CMD_ALIAS_SET_${obj}=\"$DATA\""
}

___x_cmd_alias_exec(){
    local obj="$1";     local name="$2";    shift 2
    local DATA
    eval "DATA=\"\${___X_CMD_ALIAS_SET_${obj}}\""
    local code="${DATA#*$___X_CMD_ALIAS_SEP${name}${___X_CMD_ALIAS_ITEM_SEP}}"
    ___X_CMD_ALIAS_EXEC_EXIST=
    if [ "$code" = "$DATA" ]; then
        return
    fi

    code="${code%%${___X_CMD_ALIAS_ITEM_SEP}*${___X_CMD_ALIAS_SEP}*}"
    eval "$code" "$@"
    ___X_CMD_ALIAS_EXEC_EXIST=1
}

___x_cmd_alias_info(){
    local obj="$1";     local name="$2";    shift 2
    local DATA
    eval "DATA=\"\${___X_CMD_ALIAS_SET_${obj}}\""
    local item="${DATA#*$___X_CMD_ALIAS_SEP${name}${___X_CMD_ALIAS_ITEM_SEP}}"
    ___X_CMD_ALIAS_EXEC_EXIST=
    if [ "$item" = "$DATA" ]; then
        return 1
    fi

    ___X_CMD_ALIAS_EXEC_EXIST=1
    item="${item%%${___X_CMD_ALIAS_SEP}*}"
    code="${item%%${___X_CMD_ALIAS_ITEM_SEP}*}"
    desc="${item#*${___X_CMD_ALIAS_ITEM_SEP}}"
}

___x_cmd_alias_print(){
    local obj="$1"
    local name="$2"
    local code
    local desc

    if ___x_cmd_alias_info "$@"; then
        printf "%s    %s        %s\n" "$name" "$code" "$desc"
        return
    fi
    return 1
}

xrc setmain ___x_cmd_alias
