# shellcheck shell=dash
___x_cmd_path_chain(){
    local op="$1";      shift
    case "$op" in
        ls|\
        which|which_)
            ___x_cmd_path_chain_"$op" "$@" ;;

        *)
            path:error "unknown subcmd ==> $op"
            return 1
            ;;
    esac
}

___x_cmd_path_chain_which(){
    local x_=
    ___x_cmd_path_chain_which_ "$@" || return $?
    printf "%s\n" "$x_"
}

___x_cmd_path_chain_which_(){
    local pathchain="$1"
    local file="$2"
    x_=
    local IFS=:; local i; for i in $pathchain; do
        if [ -e "$i/$file" ]; then
            x_="$i"
            return 0
        fi
    done
    return 1
}

___x_cmd_path_chain_ls(){
    local pathchain="$1"
    local _pwd="$PWD"
    local IFS=:; local i; for i in $pathchain; do
        ___x_cmd_inner_cd "$i"
        printf "%s\n" *
        ___x_cmd_inner_cd "$_pwd"
    done
}

