
___x_cmd_ps_fz(){
    {
        # TODO: add start after stat
        ___x_cmd_ps_fz___data "$@"
    } | {
        ___x_cmd_cmds awk -f "${___X_CMD_ROOT_MOD}/ps/lib/awk/fzf_tsv.awk"
    } | {
        ___x_cmd_ps_fz___fzf
    }
}

___x_cmd_ps_fz___data(){
    if ___x_cmd os is linux; then
        if ___x_cmd_hascmd ps; then
            ___x_cmd ps --tsv ax -o user,ppid,pid,tty,pcpu,pmem,vsz,rss,stat,time,command "$@"
        else
            #busybox
            ___x_cmd ps --tsv -o user,ppid,pid,tty,vsz,rss,stat,args "$@"
        fi
    elif ___x_cmd os is win; then
            ___x_cmd ps --tsv
    else
        if ___x_cmd_hascmd ps; then
            ___x_cmd ps --tsv ax -o user,ppid,pid,tty,pcpu,pmem,vsz,rss,stat,time,command "$@"
        else
            ps:error "ps command not found."
            return 1
        fi
    fi
}

# three level -a -A/-e

___x_cmd_ps_fz___fzf(){
    local x_=; ___x_cmd os name_
    case "$x_" in
        linux)      fzf_head='USER     PPID    PID   TTY  %CPU  %MEN  VSS    RSZ    STAT        TIME    CMD' ;;
        win)        fzf_head='PID      PPID   PGID    WINPID    TTY    UID        TIME     CMD' ;;

    esac

    FZF_DEFAULT_OPTS="
            $FZF_DEFAULT_OPTS
            --exact
            --ansi
            --reverse
            --height='80%'
            --bind='ctrl-w:toggle-preview-wrap'
            --bind='ctrl-r:change-preview-window(80%|52|hidden)'

            --bind='shift-tab:print(|prev-view|)+accept'

            --bind='ctrl-b:print(|goback|)+accept'
            --bind='ctrl-f:accept'

            --bind='ctrl-p:print(|prev|)+accept'
            --bind='ctrl-n:print(|next|)+accept'

            --bind='alt-shift-left:up'
            --bind='alt-shift-right:down'

            --bind='alt-shift-up:up+up+up+up+up+up+up'
            --bind='alt-shift-down:down+down+down+down+down+down+down'

            --bind='alt-left:up'
            --bind='alt-right:down'

            --bind='alt-up:up+up+up+up+up+up+up'
            --bind='alt-down:down+down+down+down+down+down+down'

            --header='$fzf_head'

            --bind='ctrl-s:print(|switch|)+accept'
            --preview-window='right:52,wrap'
        " ___x_cmd fzf
}
