doing 2.0.19 → 2.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Gemfile.lock +15 -5
  4. data/README.md +1 -1
  5. data/bin/doing +2 -18
  6. data/doing.gemspec +5 -4
  7. data/doing.rdoc +2 -2
  8. data/generate_completions.sh +3 -3
  9. data/lib/doing/cli_status.rb +6 -2
  10. data/lib/doing/completion/bash_completion.rb +185 -0
  11. data/lib/doing/completion/fish_completion.rb +175 -0
  12. data/lib/doing/completion/string.rb +17 -0
  13. data/lib/doing/completion/zsh_completion.rb +140 -0
  14. data/lib/doing/completion.rb +39 -0
  15. data/lib/doing/version.rb +1 -1
  16. data/lib/doing/wwid.rb +19 -5
  17. data/lib/doing.rb +1 -1
  18. data/lib/helpers/fzf/.goreleaser.yml +119 -0
  19. data/lib/helpers/fzf/.rubocop.yml +28 -0
  20. data/lib/helpers/fzf/ADVANCED.md +565 -0
  21. data/lib/helpers/fzf/BUILD.md +49 -0
  22. data/lib/helpers/fzf/CHANGELOG.md +1193 -0
  23. data/lib/helpers/fzf/Dockerfile +11 -0
  24. data/lib/helpers/fzf/LICENSE +21 -0
  25. data/lib/helpers/fzf/Makefile +166 -0
  26. data/lib/helpers/fzf/README-VIM.md +486 -0
  27. data/lib/helpers/fzf/README.md +712 -0
  28. data/lib/helpers/fzf/bin/fzf-tmux +233 -0
  29. data/lib/helpers/fzf/doc/fzf.txt +512 -0
  30. data/lib/helpers/fzf/go.mod +17 -0
  31. data/lib/helpers/fzf/go.sum +31 -0
  32. data/lib/helpers/fzf/install +382 -0
  33. data/lib/helpers/fzf/install.ps1 +65 -0
  34. data/lib/helpers/fzf/main.go +14 -0
  35. data/lib/helpers/fzf/man/man1/fzf-tmux.1 +68 -0
  36. data/lib/helpers/fzf/man/man1/fzf.1 +1001 -0
  37. data/lib/helpers/fzf/plugin/fzf.vim +1048 -0
  38. data/lib/helpers/fzf/shell/completion.bash +381 -0
  39. data/lib/helpers/fzf/shell/completion.zsh +329 -0
  40. data/lib/helpers/fzf/shell/key-bindings.bash +96 -0
  41. data/lib/helpers/fzf/shell/key-bindings.fish +172 -0
  42. data/lib/helpers/fzf/shell/key-bindings.zsh +114 -0
  43. data/lib/helpers/fzf/src/LICENSE +21 -0
  44. data/lib/helpers/fzf/src/algo/algo.go +884 -0
  45. data/lib/helpers/fzf/src/algo/algo_test.go +197 -0
  46. data/lib/helpers/fzf/src/algo/normalize.go +492 -0
  47. data/lib/helpers/fzf/src/ansi.go +409 -0
  48. data/lib/helpers/fzf/src/ansi_test.go +427 -0
  49. data/lib/helpers/fzf/src/cache.go +81 -0
  50. data/lib/helpers/fzf/src/cache_test.go +39 -0
  51. data/lib/helpers/fzf/src/chunklist.go +89 -0
  52. data/lib/helpers/fzf/src/chunklist_test.go +80 -0
  53. data/lib/helpers/fzf/src/constants.go +85 -0
  54. data/lib/helpers/fzf/src/core.go +351 -0
  55. data/lib/helpers/fzf/src/history.go +96 -0
  56. data/lib/helpers/fzf/src/history_test.go +68 -0
  57. data/lib/helpers/fzf/src/item.go +44 -0
  58. data/lib/helpers/fzf/src/item_test.go +23 -0
  59. data/lib/helpers/fzf/src/matcher.go +235 -0
  60. data/lib/helpers/fzf/src/merger.go +120 -0
  61. data/lib/helpers/fzf/src/merger_test.go +88 -0
  62. data/lib/helpers/fzf/src/options.go +1691 -0
  63. data/lib/helpers/fzf/src/options_test.go +457 -0
  64. data/lib/helpers/fzf/src/pattern.go +425 -0
  65. data/lib/helpers/fzf/src/pattern_test.go +209 -0
  66. data/lib/helpers/fzf/src/protector/protector.go +8 -0
  67. data/lib/helpers/fzf/src/protector/protector_openbsd.go +10 -0
  68. data/lib/helpers/fzf/src/reader.go +201 -0
  69. data/lib/helpers/fzf/src/reader_test.go +63 -0
  70. data/lib/helpers/fzf/src/result.go +243 -0
  71. data/lib/helpers/fzf/src/result_others.go +16 -0
  72. data/lib/helpers/fzf/src/result_test.go +159 -0
  73. data/lib/helpers/fzf/src/result_x86.go +16 -0
  74. data/lib/helpers/fzf/src/terminal.go +2832 -0
  75. data/lib/helpers/fzf/src/terminal_test.go +638 -0
  76. data/lib/helpers/fzf/src/terminal_unix.go +26 -0
  77. data/lib/helpers/fzf/src/terminal_windows.go +45 -0
  78. data/lib/helpers/fzf/src/tokenizer.go +253 -0
  79. data/lib/helpers/fzf/src/tokenizer_test.go +112 -0
  80. data/lib/helpers/fzf/src/tui/dummy.go +46 -0
  81. data/lib/helpers/fzf/src/tui/light.go +987 -0
  82. data/lib/helpers/fzf/src/tui/light_unix.go +110 -0
  83. data/lib/helpers/fzf/src/tui/light_windows.go +145 -0
  84. data/lib/helpers/fzf/src/tui/tcell.go +721 -0
  85. data/lib/helpers/fzf/src/tui/tcell_test.go +392 -0
  86. data/lib/helpers/fzf/src/tui/ttyname_unix.go +47 -0
  87. data/lib/helpers/fzf/src/tui/ttyname_windows.go +14 -0
  88. data/lib/helpers/fzf/src/tui/tui.go +625 -0
  89. data/lib/helpers/fzf/src/tui/tui_test.go +20 -0
  90. data/lib/helpers/fzf/src/util/atomicbool.go +34 -0
  91. data/lib/helpers/fzf/src/util/atomicbool_test.go +17 -0
  92. data/lib/helpers/fzf/src/util/chars.go +198 -0
  93. data/lib/helpers/fzf/src/util/chars_test.go +46 -0
  94. data/lib/helpers/fzf/src/util/eventbox.go +96 -0
  95. data/lib/helpers/fzf/src/util/eventbox_test.go +61 -0
  96. data/lib/helpers/fzf/src/util/slab.go +12 -0
  97. data/lib/helpers/fzf/src/util/util.go +138 -0
  98. data/lib/helpers/fzf/src/util/util_test.go +40 -0
  99. data/lib/helpers/fzf/src/util/util_unix.go +47 -0
  100. data/lib/helpers/fzf/src/util/util_windows.go +83 -0
  101. data/lib/helpers/fzf/test/fzf.vader +175 -0
  102. data/lib/helpers/fzf/test/test_go.rb +2626 -0
  103. data/lib/helpers/fzf/uninstall +117 -0
  104. data/scripts/generate_bash_completions.rb +6 -12
  105. data/scripts/generate_fish_completions.rb +7 -16
  106. data/scripts/generate_zsh_completions.rb +6 -15
  107. 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)"