diff options
| author | Jacob McDonnell <jacob@simplelittledream.com> | 2022-07-14 19:09:06 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@simplelittledream.com> | 2022-07-14 19:09:06 -0400 |
| commit | ed4daf7429bf2580118aad87b8f3e2011efed7ec (patch) | |
| tree | 82f9d8ed68de119e5777f5ecfae9df4a92fe92b3 /.config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group | |
Initial commit
Diffstat (limited to '.config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group')
| -rw-r--r-- | .config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/.config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group b/.config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group new file mode 100644 index 0000000..8d06956 --- /dev/null +++ b/.config/shells/zsh/plugins/fzf-tab/lib/ftb-switch-group @@ -0,0 +1,38 @@ +#!/hint/zsh +emulate -L zsh -o extended_glob + +zmodload zsh/mapfile + +# receive arguments +local pid=$1 header_lines=$2 tmp_dir=$3 offset=$@[-1] + +# read completion list +local -a list=(${(f)mapfile[$tmp_dir/completions.$pid]}) + +# get total group count +if (( $#list > 10000 )); then + local -Ua total=(${(f)"$(print -l ${list:$header_lines} | grep -a -oP '^\x1b\[[0-9;]*m')"}) +else + local -Ua total=(${(M)${list:$header_lines}#$'\x1b['[0-9;]#*m}) +fi + +# get current group index, start from 2 +local current=2 +if [[ -f $tmp_dir/current-group.$pid ]]; then + current=$(( $(<$tmp_dir/current-group.$pid) + offset )) +fi +(( current > $#total )) && current=1 +(( current == 0 )) && current=$#total +echo $current > $tmp_dir/current-group.$pid + +# print headers +if (( header_lines != 0 )); then + print -l ${list[1,header_lines]/${total[current]}/$'\x1b[1m'} +fi + +# print current group +if (( $#list > 10000 )); then + print -l ${list:$header_lines} | grep -a -F "${total[current]}" +else + print -l ${(M)${list:$header_lines}:#${total[current]}*} +fi |
