doing 2.0.19 → 2.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +15 -5
- data/README.md +1 -1
- data/bin/doing +2 -18
- data/doing.gemspec +5 -4
- data/doing.rdoc +2 -2
- data/generate_completions.sh +3 -3
- data/lib/doing/cli_status.rb +6 -2
- data/lib/doing/completion/bash_completion.rb +185 -0
- data/lib/doing/completion/fish_completion.rb +175 -0
- data/lib/doing/completion/string.rb +17 -0
- data/lib/doing/completion/zsh_completion.rb +140 -0
- data/lib/doing/completion.rb +39 -0
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +19 -5
- data/lib/doing.rb +1 -1
- data/lib/helpers/fzf/.goreleaser.yml +119 -0
- data/lib/helpers/fzf/.rubocop.yml +28 -0
- data/lib/helpers/fzf/ADVANCED.md +565 -0
- data/lib/helpers/fzf/BUILD.md +49 -0
- data/lib/helpers/fzf/CHANGELOG.md +1193 -0
- data/lib/helpers/fzf/Dockerfile +11 -0
- data/lib/helpers/fzf/LICENSE +21 -0
- data/lib/helpers/fzf/Makefile +166 -0
- data/lib/helpers/fzf/README-VIM.md +486 -0
- data/lib/helpers/fzf/README.md +712 -0
- data/lib/helpers/fzf/bin/fzf-tmux +233 -0
- data/lib/helpers/fzf/doc/fzf.txt +512 -0
- data/lib/helpers/fzf/go.mod +17 -0
- data/lib/helpers/fzf/go.sum +31 -0
- data/lib/helpers/fzf/install +382 -0
- data/lib/helpers/fzf/install.ps1 +65 -0
- data/lib/helpers/fzf/main.go +14 -0
- data/lib/helpers/fzf/man/man1/fzf-tmux.1 +68 -0
- data/lib/helpers/fzf/man/man1/fzf.1 +1001 -0
- data/lib/helpers/fzf/plugin/fzf.vim +1048 -0
- data/lib/helpers/fzf/shell/completion.bash +381 -0
- data/lib/helpers/fzf/shell/completion.zsh +329 -0
- data/lib/helpers/fzf/shell/key-bindings.bash +96 -0
- data/lib/helpers/fzf/shell/key-bindings.fish +172 -0
- data/lib/helpers/fzf/shell/key-bindings.zsh +114 -0
- data/lib/helpers/fzf/src/LICENSE +21 -0
- data/lib/helpers/fzf/src/algo/algo.go +884 -0
- data/lib/helpers/fzf/src/algo/algo_test.go +197 -0
- data/lib/helpers/fzf/src/algo/normalize.go +492 -0
- data/lib/helpers/fzf/src/ansi.go +409 -0
- data/lib/helpers/fzf/src/ansi_test.go +427 -0
- data/lib/helpers/fzf/src/cache.go +81 -0
- data/lib/helpers/fzf/src/cache_test.go +39 -0
- data/lib/helpers/fzf/src/chunklist.go +89 -0
- data/lib/helpers/fzf/src/chunklist_test.go +80 -0
- data/lib/helpers/fzf/src/constants.go +85 -0
- data/lib/helpers/fzf/src/core.go +351 -0
- data/lib/helpers/fzf/src/history.go +96 -0
- data/lib/helpers/fzf/src/history_test.go +68 -0
- data/lib/helpers/fzf/src/item.go +44 -0
- data/lib/helpers/fzf/src/item_test.go +23 -0
- data/lib/helpers/fzf/src/matcher.go +235 -0
- data/lib/helpers/fzf/src/merger.go +120 -0
- data/lib/helpers/fzf/src/merger_test.go +88 -0
- data/lib/helpers/fzf/src/options.go +1691 -0
- data/lib/helpers/fzf/src/options_test.go +457 -0
- data/lib/helpers/fzf/src/pattern.go +425 -0
- data/lib/helpers/fzf/src/pattern_test.go +209 -0
- data/lib/helpers/fzf/src/protector/protector.go +8 -0
- data/lib/helpers/fzf/src/protector/protector_openbsd.go +10 -0
- data/lib/helpers/fzf/src/reader.go +201 -0
- data/lib/helpers/fzf/src/reader_test.go +63 -0
- data/lib/helpers/fzf/src/result.go +243 -0
- data/lib/helpers/fzf/src/result_others.go +16 -0
- data/lib/helpers/fzf/src/result_test.go +159 -0
- data/lib/helpers/fzf/src/result_x86.go +16 -0
- data/lib/helpers/fzf/src/terminal.go +2832 -0
- data/lib/helpers/fzf/src/terminal_test.go +638 -0
- data/lib/helpers/fzf/src/terminal_unix.go +26 -0
- data/lib/helpers/fzf/src/terminal_windows.go +45 -0
- data/lib/helpers/fzf/src/tokenizer.go +253 -0
- data/lib/helpers/fzf/src/tokenizer_test.go +112 -0
- data/lib/helpers/fzf/src/tui/dummy.go +46 -0
- data/lib/helpers/fzf/src/tui/light.go +987 -0
- data/lib/helpers/fzf/src/tui/light_unix.go +110 -0
- data/lib/helpers/fzf/src/tui/light_windows.go +145 -0
- data/lib/helpers/fzf/src/tui/tcell.go +721 -0
- data/lib/helpers/fzf/src/tui/tcell_test.go +392 -0
- data/lib/helpers/fzf/src/tui/ttyname_unix.go +47 -0
- data/lib/helpers/fzf/src/tui/ttyname_windows.go +14 -0
- data/lib/helpers/fzf/src/tui/tui.go +625 -0
- data/lib/helpers/fzf/src/tui/tui_test.go +20 -0
- data/lib/helpers/fzf/src/util/atomicbool.go +34 -0
- data/lib/helpers/fzf/src/util/atomicbool_test.go +17 -0
- data/lib/helpers/fzf/src/util/chars.go +198 -0
- data/lib/helpers/fzf/src/util/chars_test.go +46 -0
- data/lib/helpers/fzf/src/util/eventbox.go +96 -0
- data/lib/helpers/fzf/src/util/eventbox_test.go +61 -0
- data/lib/helpers/fzf/src/util/slab.go +12 -0
- data/lib/helpers/fzf/src/util/util.go +138 -0
- data/lib/helpers/fzf/src/util/util_test.go +40 -0
- data/lib/helpers/fzf/src/util/util_unix.go +47 -0
- data/lib/helpers/fzf/src/util/util_windows.go +83 -0
- data/lib/helpers/fzf/test/fzf.vader +175 -0
- data/lib/helpers/fzf/test/test_go.rb +2626 -0
- data/lib/helpers/fzf/uninstall +117 -0
- data/scripts/generate_bash_completions.rb +6 -12
- data/scripts/generate_fish_completions.rb +7 -16
- data/scripts/generate_zsh_completions.rb +6 -15
- metadata +144 -9
@@ -0,0 +1,233 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# fzf-tmux: starts fzf in a tmux pane
|
3
|
+
# usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS]
|
4
|
+
|
5
|
+
fail() {
|
6
|
+
>&2 echo "$1"
|
7
|
+
exit 2
|
8
|
+
}
|
9
|
+
|
10
|
+
fzf="$(command -v fzf 2> /dev/null)" || fzf="$(dirname "$0")/fzf"
|
11
|
+
[[ -x "$fzf" ]] || fail 'fzf executable not found'
|
12
|
+
|
13
|
+
tmux_args=()
|
14
|
+
args=()
|
15
|
+
opt=""
|
16
|
+
skip=""
|
17
|
+
swap=""
|
18
|
+
close=""
|
19
|
+
term=""
|
20
|
+
[[ -n "$LINES" ]] && lines=$LINES || lines=$(tput lines) || lines=$(tmux display-message -p "#{pane_height}")
|
21
|
+
[[ -n "$COLUMNS" ]] && columns=$COLUMNS || columns=$(tput cols) || columns=$(tmux display-message -p "#{pane_width}")
|
22
|
+
|
23
|
+
help() {
|
24
|
+
>&2 echo 'usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS]
|
25
|
+
|
26
|
+
LAYOUT OPTIONS:
|
27
|
+
(default layout: -d 50%)
|
28
|
+
|
29
|
+
Popup window (requires tmux 3.2 or above):
|
30
|
+
-p [WIDTH[%][,HEIGHT[%]]] (default: 50%)
|
31
|
+
-w WIDTH[%]
|
32
|
+
-h HEIGHT[%]
|
33
|
+
-x COL
|
34
|
+
-y ROW
|
35
|
+
|
36
|
+
Split pane:
|
37
|
+
-u [HEIGHT[%]] Split above (up)
|
38
|
+
-d [HEIGHT[%]] Split below (down)
|
39
|
+
-l [WIDTH[%]] Split left
|
40
|
+
-r [WIDTH[%]] Split right
|
41
|
+
'
|
42
|
+
exit
|
43
|
+
}
|
44
|
+
|
45
|
+
while [[ $# -gt 0 ]]; do
|
46
|
+
arg="$1"
|
47
|
+
shift
|
48
|
+
[[ -z "$skip" ]] && case "$arg" in
|
49
|
+
-)
|
50
|
+
term=1
|
51
|
+
;;
|
52
|
+
--help)
|
53
|
+
help
|
54
|
+
;;
|
55
|
+
--version)
|
56
|
+
echo "fzf-tmux (with fzf $("$fzf" --version))"
|
57
|
+
exit
|
58
|
+
;;
|
59
|
+
-p*|-w*|-h*|-x*|-y*|-d*|-u*|-r*|-l*)
|
60
|
+
if [[ "$arg" =~ ^-[pwhxy] ]]; then
|
61
|
+
[[ "$opt" =~ "-K -E" ]] || opt="-K -E"
|
62
|
+
elif [[ "$arg" =~ ^.[lr] ]]; then
|
63
|
+
opt="-h"
|
64
|
+
if [[ "$arg" =~ ^.l ]]; then
|
65
|
+
opt="$opt -d"
|
66
|
+
swap="; swap-pane -D ; select-pane -L"
|
67
|
+
close="; tmux swap-pane -D"
|
68
|
+
fi
|
69
|
+
else
|
70
|
+
opt=""
|
71
|
+
if [[ "$arg" =~ ^.u ]]; then
|
72
|
+
opt="$opt -d"
|
73
|
+
swap="; swap-pane -D ; select-pane -U"
|
74
|
+
close="; tmux swap-pane -D"
|
75
|
+
fi
|
76
|
+
fi
|
77
|
+
if [[ ${#arg} -gt 2 ]]; then
|
78
|
+
size="${arg:2}"
|
79
|
+
else
|
80
|
+
if [[ "$1" =~ ^[0-9%,]+$ ]] || [[ "$1" =~ ^[A-Z]$ ]]; then
|
81
|
+
size="$1"
|
82
|
+
shift
|
83
|
+
else
|
84
|
+
continue
|
85
|
+
fi
|
86
|
+
fi
|
87
|
+
|
88
|
+
if [[ "$arg" =~ ^-p ]]; then
|
89
|
+
if [[ -n "$size" ]]; then
|
90
|
+
w=${size%%,*}
|
91
|
+
h=${size##*,}
|
92
|
+
opt="$opt -w$w -h$h"
|
93
|
+
fi
|
94
|
+
elif [[ "$arg" =~ ^-[whxy] ]]; then
|
95
|
+
opt="$opt ${arg:0:2}$size"
|
96
|
+
elif [[ "$size" =~ %$ ]]; then
|
97
|
+
size=${size:0:((${#size}-1))}
|
98
|
+
if [[ -n "$swap" ]]; then
|
99
|
+
opt="$opt -p $(( 100 - size ))"
|
100
|
+
else
|
101
|
+
opt="$opt -p $size"
|
102
|
+
fi
|
103
|
+
else
|
104
|
+
if [[ -n "$swap" ]]; then
|
105
|
+
if [[ "$arg" =~ ^.l ]]; then
|
106
|
+
max=$columns
|
107
|
+
else
|
108
|
+
max=$lines
|
109
|
+
fi
|
110
|
+
size=$(( max - size ))
|
111
|
+
[[ $size -lt 0 ]] && size=0
|
112
|
+
opt="$opt -l $size"
|
113
|
+
else
|
114
|
+
opt="$opt -l $size"
|
115
|
+
fi
|
116
|
+
fi
|
117
|
+
;;
|
118
|
+
--)
|
119
|
+
# "--" can be used to separate fzf-tmux options from fzf options to
|
120
|
+
# avoid conflicts
|
121
|
+
skip=1
|
122
|
+
tmux_args=("${args[@]}")
|
123
|
+
args=()
|
124
|
+
continue
|
125
|
+
;;
|
126
|
+
*)
|
127
|
+
args+=("$arg")
|
128
|
+
;;
|
129
|
+
esac
|
130
|
+
[[ -n "$skip" ]] && args+=("$arg")
|
131
|
+
done
|
132
|
+
|
133
|
+
if [[ -z "$TMUX" ]]; then
|
134
|
+
"$fzf" "${args[@]}"
|
135
|
+
exit $?
|
136
|
+
fi
|
137
|
+
|
138
|
+
# --height option is not allowed. CTRL-Z is also disabled.
|
139
|
+
args=("${args[@]}" "--no-height" "--bind=ctrl-z:ignore")
|
140
|
+
|
141
|
+
# Handle zoomed tmux pane without popup options by moving it to a temp window
|
142
|
+
if [[ ! "$opt" =~ "-K -E" ]] && tmux list-panes -F '#F' | grep -q Z; then
|
143
|
+
zoomed_without_popup=1
|
144
|
+
original_window=$(tmux display-message -p "#{window_id}")
|
145
|
+
tmp_window=$(tmux new-window -d -P -F "#{window_id}" "bash -c 'while :; do for c in \\| / - '\\;' do sleep 0.2; printf \"\\r\$c fzf-tmux is running\\r\"; done; done'")
|
146
|
+
tmux swap-pane -t $tmp_window \; select-window -t $tmp_window
|
147
|
+
fi
|
148
|
+
|
149
|
+
set -e
|
150
|
+
|
151
|
+
# Clean up named pipes on exit
|
152
|
+
id=$RANDOM
|
153
|
+
argsf="${TMPDIR:-/tmp}/fzf-args-$id"
|
154
|
+
fifo1="${TMPDIR:-/tmp}/fzf-fifo1-$id"
|
155
|
+
fifo2="${TMPDIR:-/tmp}/fzf-fifo2-$id"
|
156
|
+
fifo3="${TMPDIR:-/tmp}/fzf-fifo3-$id"
|
157
|
+
tmux_win_opts=( $(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/') )
|
158
|
+
cleanup() {
|
159
|
+
\rm -f $argsf $fifo1 $fifo2 $fifo3
|
160
|
+
|
161
|
+
# Restore tmux window options
|
162
|
+
if [[ "${#tmux_win_opts[@]}" -gt 0 ]]; then
|
163
|
+
eval "tmux ${tmux_win_opts[*]}"
|
164
|
+
fi
|
165
|
+
|
166
|
+
# Remove temp window if we were zoomed without popup options
|
167
|
+
if [[ -n "$zoomed_without_popup" ]]; then
|
168
|
+
tmux display-message -p "#{window_id}" > /dev/null
|
169
|
+
tmux swap-pane -t $original_window \; \
|
170
|
+
select-window -t $original_window \; \
|
171
|
+
kill-window -t $tmp_window \; \
|
172
|
+
resize-pane -Z
|
173
|
+
fi
|
174
|
+
|
175
|
+
if [[ $# -gt 0 ]]; then
|
176
|
+
trap - EXIT
|
177
|
+
exit 130
|
178
|
+
fi
|
179
|
+
}
|
180
|
+
trap 'cleanup 1' SIGUSR1
|
181
|
+
trap 'cleanup' EXIT
|
182
|
+
|
183
|
+
envs="export TERM=$TERM "
|
184
|
+
[[ "$opt" =~ "-K -E" ]] && FZF_DEFAULT_OPTS="--margin 0,1 $FZF_DEFAULT_OPTS"
|
185
|
+
[[ -n "$FZF_DEFAULT_OPTS" ]] && envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")"
|
186
|
+
[[ -n "$FZF_DEFAULT_COMMAND" ]] && envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")"
|
187
|
+
echo "$envs;" > "$argsf"
|
188
|
+
|
189
|
+
# Build arguments to fzf
|
190
|
+
opts=$(printf "%q " "${args[@]}")
|
191
|
+
|
192
|
+
pppid=$$
|
193
|
+
echo -n "trap 'kill -SIGUSR1 -$pppid' EXIT SIGINT SIGTERM;" >> $argsf
|
194
|
+
close="; trap - EXIT SIGINT SIGTERM $close"
|
195
|
+
|
196
|
+
export TMUX=$(cut -d , -f 1,2 <<< "$TMUX")
|
197
|
+
mkfifo -m o+w $fifo2
|
198
|
+
if [[ "$opt" =~ "-K -E" ]]; then
|
199
|
+
cat $fifo2 &
|
200
|
+
if [[ -n "$term" ]] || [[ -t 0 ]]; then
|
201
|
+
cat <<< "\"$fzf\" $opts > $fifo2; out=\$? $close; exit \$out" >> $argsf
|
202
|
+
else
|
203
|
+
mkfifo $fifo1
|
204
|
+
cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; out=\$? $close; exit \$out" >> $argsf
|
205
|
+
cat <&0 > $fifo1 &
|
206
|
+
fi
|
207
|
+
|
208
|
+
# tmux dropped the support for `-K`, `-R` to popup command
|
209
|
+
# TODO: We can remove this once tmux 3.2 is released
|
210
|
+
if [[ ! "$(tmux popup --help 2>&1)" =~ '-R shell-command' ]]; then
|
211
|
+
opt="${opt/-K/}"
|
212
|
+
else
|
213
|
+
opt="${opt} -R"
|
214
|
+
fi
|
215
|
+
|
216
|
+
tmux popup -d "$PWD" "${tmux_args[@]}" $opt "bash $argsf" > /dev/null 2>&1
|
217
|
+
exit $?
|
218
|
+
fi
|
219
|
+
|
220
|
+
mkfifo -m o+w $fifo3
|
221
|
+
if [[ -n "$term" ]] || [[ -t 0 ]]; then
|
222
|
+
cat <<< "\"$fzf\" $opts > $fifo2; echo \$? > $fifo3 $close" >> $argsf
|
223
|
+
else
|
224
|
+
mkfifo $fifo1
|
225
|
+
cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" >> $argsf
|
226
|
+
cat <&0 > $fifo1 &
|
227
|
+
fi
|
228
|
+
tmux set-window-option synchronize-panes off \;\
|
229
|
+
set-window-option remain-on-exit off \;\
|
230
|
+
split-window -c "$PWD" $opt "${tmux_args[@]}" "bash -c 'exec -a fzf bash $argsf'" $swap \
|
231
|
+
> /dev/null 2>&1 || { "$fzf" "${args[@]}"; exit $?; }
|
232
|
+
cat $fifo2
|
233
|
+
exit "$(cat $fifo3)"
|