Skip to content

Commit 7b6a6f3

Browse files
committed
Compact commands if !! prefix
1 parent 32362c4 commit 7b6a6f3

File tree

3 files changed

+75
-42
lines changed

3 files changed

+75
-42
lines changed

functions/ok/qcolreduce

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ ok/qcolreduce() {
4242
reply[1]=$OUT$reply[1]
4343
else
4444
# join the argument input like if it has been read from stdin
45-
OUT=${(pj:\n:)@}
45+
OUT=${(F)@}
4646
fi
4747

4848
#
@@ -94,7 +94,7 @@ ok/qcolreduce() {
9494
# Asked to output to stdout?
9595
(($+Opts[-o]))&&print -r -- $REPLY
9696

97-
[[ $REPLY != $~NC[WRONGSTR] ]]
97+
[[ $REPLY != [[:space:]$'\1'-$'\x1b']# ]]
9898
EC+=$?
9999
reply=("${(@f)REPLY}")
100100
return EC

lib/zui-lib/functions/zui-list

+16-9
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,21 @@ trap "REPLY=-2; reply=(); return 1" TERM INT QUIT
2929
-zui_list_status_msg(){
3030
integer indent=2 line=$ZUI[status_border]
3131

32-
local color=${(M)1:#(magenta|yellow|blue|cyan|white|green)}
33-
[[ -n $color ]]&&shift||color=magenta
32+
local final_msg=$@[-1]
33+
shift -p 1
34+
ZUI[stat_len_1]=0
3435
zcurses move "$__wname_status" $line $indent
3536
zcurses clear "$__wname_status" eol
36-
zcurses attr "$__wname_status" +bold "$color/${ZUI[status_colorpair]#*/}"
37-
zcurses string "$__wname_status" "$1"
37+
for color msg;do
38+
local color=${(M)color:#(magenta|yellow|blue|cyan|white|green)}
39+
[[ -z $color ]]&&color=magenta
40+
zcurses attr "$__wname_status" +bold "$color/${ZUI[status_colorpair]#*/}"
41+
zcurses string "$__wname_status" "$msg"
42+
((ZUI[stat_len_1]+=${#msg}))
43+
done
3844
zcurses attr "$__wname_status" "$wrk_stbold" $ZUI[status_colorpair]
39-
zcurses string "$__wname_status" "$2"
40-
((ZUI[stat_len_1]=${#1}))
41-
((ZUI[stat_len_3]=${#2}))
45+
zcurses string "$__wname_status" "$final_msg"
46+
((ZUI[stat_len_3]=${#final_msg}))
4247
}
4348

4449
# $1 is window name, $2 is the expected cursor state (0 invisible, 1 visible)
@@ -781,9 +786,11 @@ while (( 1 )); do
781786
$ZUI[USER_CURRENT_IDX] $ZUI[USER_LAST_ELEMENT]
782787

783788
if ((ZUI[IN_QUERY]==3));then
784-
-zui_list_status_msg green "$ZUI[QUERY_PROMPT]" $ZUI[QUERY_BUFFER]
789+
local color=magenta
790+
((ZUI[QUERY_PROMPT_RET]))&&color=yellow
791+
-zui_list_status_msg "$color" "·$ZUI[QUERY_PROMPT_RET]· " green "$ZUI[QUERY_PROMPT]" "$ZUI[QUERY_BUFFER]"
785792
elif ((ZUI[IN_QUERY]==1)); then
786-
-zui_list_status_msg cyan "$ZUI[QUERY_PROMPT]" ${ZUI[SEARCH_BUFFER]// /+}
793+
-zui_list_status_msg cyan "$ZUI[QUERY_PROMPT]" "${ZUI[SEARCH_BUFFER]// /+}"
787794
fi
788795

789796
[[ $ZUI[status_border] = 1 ]] && {

smart-consoles/iqnc

+57-31
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ iqnc_mime_setup(){
4444
zsh-mime-setup
4545
}
4646

47+
iqnc_get_cmd_idx(){
48+
integer QSUB QI
49+
local -a cmd=("$@")
50+
for ((QI=1;QI<$#cmd;QI++));do
51+
[[ $cmd[QI] != (\!#)(sudo|noglob|command|builtin|[ $'\t\n\v']#) ]]&&{QSUB=QI;break;}
52+
done
53+
REPLY=$QSUB
54+
((REPLY))
55+
}
4756
iqnc_util_swap4(){
4857
local Q=$1 Q0=$2
4958
shift 0+2
@@ -135,18 +144,20 @@ iqnc_view_switch(){
135144
}
136145

137146
iqnc_exec_command_cb(){
138-
integer QEXISTS
139-
local CMD=${(Q@)${(@)${(@zA)ZUI[QUERY_BUFFER]}[1]}}
147+
integer QEXISTS QSUB=1
148+
local -a cmd=(${(@zA)ZUI[QUERY_BUFFER]})
149+
iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY
150+
local CMD=${cmd[QSUB]##\!#}
140151
ZUI[COMMAND]=$ZUI[QUERY_BUFFER]
141152
{
142-
if [[ $ZUI[COMMAND] != [[:space:]]# ]];then
153+
if [[ $ZUI[COMMAND] != [[:space:]$'\1'-$'\x1b']# ]];then
143154
builtin print -r -- $ZUI[COMMAND]>>!$NCCHIST
144155
else
145156
THROW "No command entered ($ZUI[COMMAND]), " "" "" "cannot execute"
146157
fi
147158
# No such command?
148-
builtin type ${CMD#\!}&>/dev/null||\
149-
THROW "No such command" ": " "" $CMD
159+
builtin type $CMD&>/dev/null||\
160+
THROW "Error:" "no such command" ": " $CMD
150161
} always {
151162
if CATCH \*;then
152163
iqw "$CAUGHT[@]"
@@ -157,7 +168,6 @@ iqnc_exec_command_cb(){
157168
iqnc_cmd_next $CIN
158169

159170
#iqnc_hub
160-
iqw "Executed command: " \`$CMD\` " which returned: " $ZUI[RET]
161171
fi
162172
}
163173
ZUI[QUERY_BUFFER]= ZUI[COMMAND]=
@@ -248,6 +258,7 @@ iqnc_search_prompt(){
248258

249259
iqnc_exec_prompt(){
250260
ZUI[QUERY_PROMPT]="$PWD/:> "
261+
ZUI[QUERY_PROMPT_RET]=${ZUI[RET]:-0}
251262
ZUI[IN_QUERY]=$PR_CMD_EXEC
252263
typeset -g in_query=$PR_CMD_EXEC
253264
ZUI[cursor]=$#ZUI[QUERY_BUFFER]+1
@@ -264,17 +275,21 @@ iqnc_db(){
264275

265276
iqnc_get_cmd_out(){
266277
local TPE=$1 cmd=("$@[2,-1]")
278+
integer QSUB=1 QI
267279
if [[ $TPE == whole || -n ${(M)cmd[1,-2]:#builtin} || $cmd[1] == \!* ]];then
268280
ZUI[TMP]=$(mktemp)
269-
[[ $cmd[1] == \!* ]]&&iqw "Notice: " "in the same-shell process run ("\
281+
[[ $cmd[1] == \!* && $cmd[1] != \!\!* ]]&&\
282+
iqw "Notice: " "in the same-shell process-run ("\
270283
"leading ! detected" ")"
271-
cmd[1]=${cmd[1]#\!}
272-
eval "$cmd[@]"&>!$ZUI[TMP]
284+
cmd[1]=${cmd[1]##\!#}
285+
eval "$cmd[@]"</dev/tty &>!$ZUI[TMP]
273286
ZUI[RET]=$?
274-
local CMD_PT="(${(~j.|.)${=NC_LS_LIKE_COMMANDS}})"
287+
local CMD_PT="(${(~j.|.)${(@s: :)NC_LS_LIKE_COMMANDS}})"
288+
289+
iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY
290+
[[ -n $aliases[$cmd[QSUB]] ]]&&cmd[QSUB]=(${(s: :)aliases[$cmd[QSUB]]})
275291

276-
if [[ $cmd[1] == $~CMD_PT || ($cmd[1] == (noglob|command) &&\
277-
$cmd[2] == $~CMD_PT) ]]
292+
if [[ $cmd[QSUB] == $~CMD_PT && $ZUI[RET] -eq 0 ]]
278293
then
279294
reply=("${(@f)$(builtin print -C2 -a ${(@f)$(<$ZUI[TMP])})}")
280295
else
@@ -287,7 +302,9 @@ iqnc_get_cmd_out(){
287302
[[ $cmd[1] == noglob ]]&&{local -a stdbuf1=(noglob $stdbuf1);cmd[1]=();}
288303
[[ $cmd[1] == builtin ]]&&local -a stdbuf1=(${(M)stdbuf1:#noglob})
289304
[[ $cmd[1] == command ]]&&cmd[1]=()
290-
[[ -n $aliases[$cmd[1]] ]]&&cmd[1]=(${(s: :)aliases[$cmd[1]]})
305+
306+
iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY
307+
[[ -n $aliases[$cmd[QSUB]] ]]&&cmd[QSUB]=(${(s: :)aliases[$cmd[QSUB]]})
291308
coproc {$stdbuf1 "$cmd[@]" 2>&1 </dev/tty;}
292309
ZUI[RET]=$?
293310
fi
@@ -322,7 +339,7 @@ cmd-contents-view(){iqnc_cmd_next $VIEW;}
322339
cmd-main-view(){iqnc_cmd_next $CIN;}
323340
cmd-tags-view(){iqnc_cmd_next $TAGS;}
324341
cmd-set-view(){local -A Qe=(main 0 preview 1 hist 2 tags 3 "" 0);iqnc_cmd_next $Qe[$1];}
325-
cmd-show-stdin(){ZUI[HAVE_0_INPUT]=1;ZUI[IO_COUNT]=33;iqnc_hub;}
342+
cmd-show-stdin(){ZUI[HAVE_0_INPUT]=1;ZUI[IO_COUNT]=18;iqnc_cmd_next $CIN;}
326343
# Commands
327344
cmd-open-cmd(){zcurses end;eval "$@";-zui_glib_refresh;}
328345
cmd-open-tig(){curses end;command tig "$@";-zui_glib_refresh;}
@@ -515,14 +532,14 @@ if ((!$+Opts[--refresh])); then
515532
integer Q0_SAVE_PIPE tmout
516533
if int/nc::test-stdin Q0_SAVE_PIPE REPLY;then
517534
ZUI[FIRST_0_INPUT]=$REPLY
518-
ZUI[HAVE_0_INPUT]=1 ZUI[IO_COUNT]=30
535+
ZUI[HAVE_0_INPUT]=1 ZUI[IO_COUNT]=15
519536
fi
520537
iqnc_create_histories
521538
cmd-exec-prompt
522539
fi
523540

524541
# zui::bindkey F3 "{print q:$ZUI[mark]}"
525-
zui::bindkey F9 '{print \\n cursor:$ZUI[cursor], cmdno:$ZUI[CMD_NO], query:$ZUI[IN_QUERY], qbuf: $ZUI[QUERY_BUFFER], view:$ZUI[SEARCH_BUFFER_PREVIEW], gl:$ZUI[SEARCH_BUFFER_GLOBAL], sbuff:$ZUI[SEARCH_BUFFER], current:$ZUI[CURRENT_IDX], PVIEW_Q:$ZUI[CURRENT_IDX_PVIEW_BKP_$ZUI[QPATH]], PVIEW:$ZUI[CURRENT_IDX_PVIEW_BKP], TAG:$ZUI[CURRENT_IDX_TAGS_BKP], main:$ZUI[CURRENT_IDX_MAIN_BKP] sptr:$ZUI[status_pointer]|tee -a /tmp/reply;}'
542+
zui::bindkey F9 '{print \\n\\r ${jobtexts[*]} ${#jobtexts} cursor:$ZUI[cursor], cmdno:$ZUI[CMD_NO], query:$ZUI[IN_QUERY], qbuf: $ZUI[QUERY_BUFFER], view:$ZUI[SEARCH_BUFFER_PREVIEW], gl:$ZUI[SEARCH_BUFFER_GLOBAL], sbuff:$ZUI[SEARCH_BUFFER], current:$ZUI[CURRENT_IDX], PVIEW_Q:$ZUI[CURRENT_IDX_PVIEW_BKP_$ZUI[QPATH]], PVIEW:$ZUI[CURRENT_IDX_PVIEW_BKP], TAG:$ZUI[CURRENT_IDX_TAGS_BKP], main:$ZUI[CURRENT_IDX_MAIN_BKP] sptr:$ZUI[status_pointer]|tee -a /tmp/reply;}'
526543
zui::bindkey F10 '{builtin source $NC_CON_DIR/iqnc --refresh||\
527544
iqw -r "Reload finished with error: " $?;}'
528545
zui::bindkey F14 '{builtin zcurses end;sleep 3;}'
@@ -606,7 +623,7 @@ iqnc_fill_preview(){
606623
local TPE=$REPLY
607624
int/nc::get-stx-cmd -q $TPE||\
608625
THROW "Error: no highlighter command found: bat, {src-,}highlight"
609-
local -a qcmd=("$reply[@]" "$QPATH")
626+
local -a qcmd=("$reply[@]" -- "$QPATH")
610627
iq0items=("${(@f)$($qcmd[@])}")
611628
iqw "Showing file: " "\`$QPATH:t\`" ", of type: " $TPE
612629
else
@@ -634,7 +651,7 @@ iqnc_fill_preview(){
634651

635652
iqnc_fill_cmd(){
636653
local TXT=() cmd=() CMD_PT QEX
637-
integer QI
654+
integer QSUB=1 QI
638655
ZUI[text_mode]=all
639656
ZUI[COLORING_PATTERN]="·[^·]##·"
640657
ZUI[COLORING_MATCH_MULTIPLE]=1
@@ -643,30 +660,34 @@ iqnc_fill_cmd(){
643660
reply=()
644661

645662
ZUI[COMMAND]=${1:-$ZUI[COMMAND]}
646-
[[ $ZUI[COMMAND] != $~NC[WRONGSTR] ]]&&ZUI[HAVE_0_INPUT]=0
663+
[[ $ZUI[COMMAND] != [[:space:]$'\1'-$'\x1b']# ]]&&ZUI[HAVE_0_INPUT]=0
647664
: ${ZUI[COMMAND]:=${NC_DEFAULT_LS_COMMAND:-$NC_DEFAULT_COMMAND}}
648665
if [[ -n $ZUI[COMMAND] ]];then
649666
[[ -e $ZUI[QPATH] ]]&&ZUI[COMMAND]=${ZUI[COMMAND]//\%s/${(q)ZUI[QPATH]}}
650667
[[ -e $ZUI[QPATH] ]]||ZUI[COMMAND]=${ZUI[COMMAND]//\%s/}
651668
ZUI[COMMAND_PREV]=$ZUI[COMMAND]
652669
cmd=("${(z@)ZUI[COMMAND]}")
653-
QEX=${(M)cmd[1]#\!}
654-
cmd[1]=${cmd[1]#\!}
670+
QEX=${(M)cmd[1]##\!#}
671+
cmd[1]=${cmd[1]##\!#}
672+
iqnc_get_cmd_idx "$cmd[@]"&&QSUB=REPLY
655673
ZUI[COMMAND]=
656674
CMD_PT="(${(~j.|.)${(@)=NC_LS_LIKE_COMMANDS}})"
657675
# Include ls-options
658-
if [[ -n $NC_DEFAULT_LS_LIKE_OPTS && ($cmd[1] == $~CMD_PT ||\
659-
$cmd[1] == (command|noglob|sudo) && $cmd[2] == $~CMD_PT) ]]
676+
if [[ ($cmd[QSUB] == $~CMD_PT ||\
677+
$cmd[1] == (sudo|noglob|command|builtin) && $cmd[2] == $~CMD_PT) ]]
660678
then
661-
QI=2;[[ $cmd[2] == $~CMD_PT ]]&&QI=3
662-
cmd[QI,0]=(${(s: :)NC_DEFAULT_LS_LIKE_OPTS})
679+
if [[ -n $NC_DEFAULT_LS_LIKE_OPTS ]];then
680+
QI=2;[[ $cmd[2] == $~CMD_PT ]]&&QI=3
681+
[[ $cmd[QSUB] == $~CMD_PT ]]&&QI=QSUB+1
682+
cmd[QI,0]=(${(s: :)NC_DEFAULT_LS_LIKE_OPTS})
683+
fi
663684
ZUI[ls-command]=1
664685
else
665686
ZUI[ls-command]=0
666687
fi
667688

668689
if [[ $cmd[1] == cd || $cmd[1] == builtin && $cmd[2] == cd ]];then
669-
iqw "Changing directory to: " "" "" "$cmd[-1]"
690+
iqw "Moving CWD to: " "" "" "$cmd[-1]"
670691
iqnc_push_pwd
671692
eval "$cmd[@]"
672693
iqnc_fill_cmd
@@ -675,16 +696,21 @@ iqnc_fill_cmd(){
675696

676697
iqnc_get_cmd_out $ZUI[cmd-mode] $QEX$cmd[1] "${(@)cmd[2,-1]}"
677698
if [[ $ZUI[cmd-mode] == whole || -n $QEX ]]; then
678-
iq0items=("$reply[@]")
699+
if [[ $QEX == '!!' ]];then
700+
iqw "!!" "-CMD-OUT:»: " "${(j:·\n·:)reply}"
701+
else
702+
iq0items=("$reply[@]")
703+
fi
679704
else
680705
iq0items=() q0input=()
681-
ZUI[HAVE_0_INPUT]=1 ZUI[IO_COUNT]=30
706+
ZUI[HAVE_0_INPUT]=1 ZUI[IO_COUNT]=15
682707
fi
683708

684709
-zui_glib_special_text "Output of cmd: ·$ZUI[COMMAND_PREV]· run in: ·$PWD·:" TXT
685-
if [[ $iq0items = $~NC[WRONGSTR] && $ZUI[cmd-mode] = whole ]]
710+
if [[ $QEX != '!!' && $iq0items = [[:space:]$'\1'-$'\x1b']# &&\
711+
($ZUI[cmd-mode] = whole || $QEX = \!) ]]
686712
then
687-
iqw "Command " "$cmd" "" " had no output"
713+
iqw "Executed: " "\`$cmd[QSUB]\`" "" " – NO OUTPUT"
688714
return
689715
fi
690716
else
@@ -872,7 +898,7 @@ iqnc_fill_help(){
872898
((ZUI[VIEW_CHANGE]))||return 0
873899
if [[ -n $ZUI[COMMAND] ]];then
874900
local CMD=$ZUI[COMMAND]
875-
iqnc_cmd_next $CIN $ZUI[GEN_B_IDX]
901+
iqnc_cmd_next $CIN
876902
fi
877903
builtin unset 'ZUI[COMMAND]'
878904
iqnc_util_set_current_idx

0 commit comments

Comments
 (0)