# shellcheck shell=dash

# ___x_cmd_cd_back(){
#     local x_="$1";     shift
#     ___x_cmd_cd_pick_ ___x_cmd_cd_back___inner "$x_" || return $?
#     ___x_cmd_cd_origin "$x_" "$@"
# }

# ___x_cmd_cd_back___inner(){
#     local p; p="${PWD%/*}"
#     local target="$1"
#     {
#         while [ -n "$p" ]; do
#             ___x_cmd_cmds find "$p" -maxdepth 1 -iname "*${target}*" -type d -print
#             p="${p%/*}"
#         done
#         ___x_cmd_cmds find / -maxdepth 1 -iname "*${target}*" -type d -print
#     } | ___x_cmd_cd_util___uniq
# }

___x_cmd_cd_back(){
    local x_="$1";
    ___x_cmd_cd_pick_ ___x_cmd_cd_back___inner "$x_" || return $?
    [ "$#" -le 0 ] || shift
    ___x_cmd_cd_origin "$x_" "$@"
}

___x_cmd_cd_back___inner(){
    local p; p="${PWD%/*}"
    local target="$1"
    local name
    {
        while [ -n "$p" ]; do
            name="${p##/}"
            if [ -z "$target" ] || [ "$name" != "${name#*"$target"}" ]; then
                printf "%s\n" "$p"
            fi
            p="${p%/*}"
        done
    } | ___x_cmd_cd_util___uniq
}


# TODO: multiple parent directory
xrc ls
___x_cmd_cd_back___nv(){
    local ___X_CMD_LS_APP_BASEDATA; ___X_CMD_LS_APP_BASEDATA="$( ___x_cmd_cd_back___nv_inner )" || return $?
    [ -n "$___X_CMD_LS_APP_BASEDATA" ] || N=cd M="Backward folder not found" log:ret:64
    local x_=; ___x_cmd storerat_ ___x_cmd_ls_app_ || return $?
    [ -n "$x_" ] || return $?
    eval "$x_"

    case "$___X_CMD_TUI_NAVI_FINAL_COMMAND" in
        q)  return ;;      # Just quit
        *)  x_="$___X_CMD_TUI_NAVI_CUR_FILE" ;;
    esac

    [ -d "$x_" ] || {
        x_="${x_%/*}"
        ___x_cmd ui yesno "cd to $x_"
    } || return $?

    ___x_cmd_cd_origin "$x_" "$@"
}

___x_cmd_cd_back___nv_inner(){
    local p; p="$PWD"
    [ "$p" != "/" ] || return 0
    p="${p%/*}"
    while [ -n "$p" ]; do
        printf "%s\n" "$p"
        [ p != "${p%/*}" ] || break
        p="${p%/*}"
    done
    printf "%s\n" "/"
}
