From 7b6a6f3c0f7bdc45978523a3afc1e61fee63cb7f Mon Sep 17 00:00:00 2001 From: Sebastian Gniazdowski Date: Tue, 9 May 2023 10:38:18 +0059 Subject: [PATCH] Compact commands if !! prefix --- functions/ok/qcolreduce | 4 +- lib/zui-lib/functions/zui-list | 25 ++++++---- smart-consoles/iqnc | 88 ++++++++++++++++++++++------------ 3 files changed, 75 insertions(+), 42 deletions(-) diff --git a/functions/ok/qcolreduce b/functions/ok/qcolreduce index 61c6212..52aaf70 100644 --- a/functions/ok/qcolreduce +++ b/functions/ok/qcolreduce @@ -42,7 +42,7 @@ ok/qcolreduce() { reply[1]=$OUT$reply[1] else # join the argument input like if it has been read from stdin - OUT=${(pj:\n:)@} + OUT=${(F)@} fi # @@ -94,7 +94,7 @@ ok/qcolreduce() { # Asked to output to stdout? (($+Opts[-o]))&&print -r -- $REPLY - [[ $REPLY != $~NC[WRONGSTR] ]] + [[ $REPLY != [[:space:]$'\1'-$'\x1b']# ]] EC+=$? reply=("${(@f)REPLY}") return EC diff --git a/lib/zui-lib/functions/zui-list b/lib/zui-lib/functions/zui-list index 0d448b2..ea1bb68 100644 --- a/lib/zui-lib/functions/zui-list +++ b/lib/zui-lib/functions/zui-list @@ -29,16 +29,21 @@ trap "REPLY=-2; reply=(); return 1" TERM INT QUIT -zui_list_status_msg(){ integer indent=2 line=$ZUI[status_border] - local color=${(M)1:#(magenta|yellow|blue|cyan|white|green)} - [[ -n $color ]]&&shift||color=magenta + local final_msg=$@[-1] + shift -p 1 + ZUI[stat_len_1]=0 zcurses move "$__wname_status" $line $indent zcurses clear "$__wname_status" eol - zcurses attr "$__wname_status" +bold "$color/${ZUI[status_colorpair]#*/}" - zcurses string "$__wname_status" "$1" + for color msg;do + local color=${(M)color:#(magenta|yellow|blue|cyan|white|green)} + [[ -z $color ]]&&color=magenta + zcurses attr "$__wname_status" +bold "$color/${ZUI[status_colorpair]#*/}" + zcurses string "$__wname_status" "$msg" + ((ZUI[stat_len_1]+=${#msg})) + done zcurses attr "$__wname_status" "$wrk_stbold" $ZUI[status_colorpair] - zcurses string "$__wname_status" "$2" - ((ZUI[stat_len_1]=${#1})) - ((ZUI[stat_len_3]=${#2})) + zcurses string "$__wname_status" "$final_msg" + ((ZUI[stat_len_3]=${#final_msg})) } # $1 is window name, $2 is the expected cursor state (0 invisible, 1 visible) @@ -781,9 +786,11 @@ while (( 1 )); do $ZUI[USER_CURRENT_IDX] $ZUI[USER_LAST_ELEMENT] if ((ZUI[IN_QUERY]==3));then - -zui_list_status_msg green "$ZUI[QUERY_PROMPT]" $ZUI[QUERY_BUFFER] + local color=magenta + ((ZUI[QUERY_PROMPT_RET]))&&color=yellow + -zui_list_status_msg "$color" "·$ZUI[QUERY_PROMPT_RET]· " green "$ZUI[QUERY_PROMPT]" "$ZUI[QUERY_BUFFER]" elif ((ZUI[IN_QUERY]==1)); then - -zui_list_status_msg cyan "$ZUI[QUERY_PROMPT]" ${ZUI[SEARCH_BUFFER]// /+} + -zui_list_status_msg cyan "$ZUI[QUERY_PROMPT]" "${ZUI[SEARCH_BUFFER]// /+}" fi [[ $ZUI[status_border] = 1 ]] && { diff --git a/smart-consoles/iqnc b/smart-consoles/iqnc index 15e52b4..9bd90d4 100755 --- a/smart-consoles/iqnc +++ b/smart-consoles/iqnc @@ -44,6 +44,15 @@ iqnc_mime_setup(){ zsh-mime-setup } +iqnc_get_cmd_idx(){ + integer QSUB QI + local -a cmd=("$@") + for ((QI=1;QI<$#cmd;QI++));do + [[ $cmd[QI] != (\!#)(sudo|noglob|command|builtin|[ $'\t\n\v']#) ]]&&{QSUB=QI;break;} + done + REPLY=$QSUB + ((REPLY)) +} iqnc_util_swap4(){ local Q=$1 Q0=$2 shift 0+2 @@ -135,18 +144,20 @@ iqnc_view_switch(){ } iqnc_exec_command_cb(){ - integer QEXISTS - local CMD=${(Q@)${(@)${(@zA)ZUI[QUERY_BUFFER]}[1]}} + integer QEXISTS QSUB=1 + local -a cmd=(${(@zA)ZUI[QUERY_BUFFER]}) + iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY + local CMD=${cmd[QSUB]##\!#} ZUI[COMMAND]=$ZUI[QUERY_BUFFER] { - if [[ $ZUI[COMMAND] != [[:space:]]# ]];then + if [[ $ZUI[COMMAND] != [[:space:]$'\1'-$'\x1b']# ]];then builtin print -r -- $ZUI[COMMAND]>>!$NCCHIST else THROW "No command entered ($ZUI[COMMAND]), " "" "" "cannot execute" fi # No such command? - builtin type ${CMD#\!}&>/dev/null||\ - THROW "No such command" ": " "" $CMD + builtin type $CMD&>/dev/null||\ + THROW "Error:" "no such command" ": " $CMD } always { if CATCH \*;then iqw "$CAUGHT[@]" @@ -157,7 +168,6 @@ iqnc_exec_command_cb(){ iqnc_cmd_next $CIN #iqnc_hub - iqw "Executed command: " \`$CMD\` " which returned: " $ZUI[RET] fi } ZUI[QUERY_BUFFER]= ZUI[COMMAND]= @@ -248,6 +258,7 @@ iqnc_search_prompt(){ iqnc_exec_prompt(){ ZUI[QUERY_PROMPT]="$PWD/:> " + ZUI[QUERY_PROMPT_RET]=${ZUI[RET]:-0} ZUI[IN_QUERY]=$PR_CMD_EXEC typeset -g in_query=$PR_CMD_EXEC ZUI[cursor]=$#ZUI[QUERY_BUFFER]+1 @@ -264,17 +275,21 @@ iqnc_db(){ iqnc_get_cmd_out(){ local TPE=$1 cmd=("$@[2,-1]") + integer QSUB=1 QI if [[ $TPE == whole || -n ${(M)cmd[1,-2]:#builtin} || $cmd[1] == \!* ]];then ZUI[TMP]=$(mktemp) - [[ $cmd[1] == \!* ]]&&iqw "Notice: " "in the same-shell process run ("\ + [[ $cmd[1] == \!* && $cmd[1] != \!\!* ]]&&\ + iqw "Notice: " "in the same-shell process-run ("\ "leading ! detected" ")" - cmd[1]=${cmd[1]#\!} - eval "$cmd[@]"&>!$ZUI[TMP] + cmd[1]=${cmd[1]##\!#} + eval "$cmd[@]"!$ZUI[TMP] ZUI[RET]=$? - local CMD_PT="(${(~j.|.)${=NC_LS_LIKE_COMMANDS}})" + local CMD_PT="(${(~j.|.)${(@s: :)NC_LS_LIKE_COMMANDS}})" + + iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY + [[ -n $aliases[$cmd[QSUB]] ]]&&cmd[QSUB]=(${(s: :)aliases[$cmd[QSUB]]}) - if [[ $cmd[1] == $~CMD_PT || ($cmd[1] == (noglob|command) &&\ - $cmd[2] == $~CMD_PT) ]] + if [[ $cmd[QSUB] == $~CMD_PT && $ZUI[RET] -eq 0 ]] then reply=("${(@f)$(builtin print -C2 -a ${(@f)$(<$ZUI[TMP])})}") else @@ -287,7 +302,9 @@ iqnc_get_cmd_out(){ [[ $cmd[1] == noglob ]]&&{local -a stdbuf1=(noglob $stdbuf1);cmd[1]=();} [[ $cmd[1] == builtin ]]&&local -a stdbuf1=(${(M)stdbuf1:#noglob}) [[ $cmd[1] == command ]]&&cmd[1]=() - [[ -n $aliases[$cmd[1]] ]]&&cmd[1]=(${(s: :)aliases[$cmd[1]]}) + + iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY + [[ -n $aliases[$cmd[QSUB]] ]]&&cmd[QSUB]=(${(s: :)aliases[$cmd[QSUB]]}) coproc {$stdbuf1 "$cmd[@]" 2>&1