doing 2.0.18 → 2.0.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -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 +18 -6
- 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,96 @@
|
|
1
|
+
# ____ ____
|
2
|
+
# / __/___ / __/
|
3
|
+
# / /_/_ / / /_
|
4
|
+
# / __/ / /_/ __/
|
5
|
+
# /_/ /___/_/ key-bindings.bash
|
6
|
+
#
|
7
|
+
# - $FZF_TMUX_OPTS
|
8
|
+
# - $FZF_CTRL_T_COMMAND
|
9
|
+
# - $FZF_CTRL_T_OPTS
|
10
|
+
# - $FZF_CTRL_R_OPTS
|
11
|
+
# - $FZF_ALT_C_COMMAND
|
12
|
+
# - $FZF_ALT_C_OPTS
|
13
|
+
|
14
|
+
# Key bindings
|
15
|
+
# ------------
|
16
|
+
__fzf_select__() {
|
17
|
+
local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
|
18
|
+
-o -type f -print \
|
19
|
+
-o -type d -print \
|
20
|
+
-o -type l -print 2> /dev/null | cut -b3-"}"
|
21
|
+
eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read -r item; do
|
22
|
+
printf '%q ' "$item"
|
23
|
+
done
|
24
|
+
echo
|
25
|
+
}
|
26
|
+
|
27
|
+
if [[ $- =~ i ]]; then
|
28
|
+
|
29
|
+
__fzfcmd() {
|
30
|
+
[[ -n "$TMUX_PANE" ]] && { [[ "${FZF_TMUX:-0}" != 0 ]] || [[ -n "$FZF_TMUX_OPTS" ]]; } &&
|
31
|
+
echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
|
32
|
+
}
|
33
|
+
|
34
|
+
fzf-file-widget() {
|
35
|
+
local selected="$(__fzf_select__)"
|
36
|
+
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}"
|
37
|
+
READLINE_POINT=$(( READLINE_POINT + ${#selected} ))
|
38
|
+
}
|
39
|
+
|
40
|
+
__fzf_cd__() {
|
41
|
+
local cmd dir
|
42
|
+
cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
|
43
|
+
-o -type d -print 2> /dev/null | cut -b3-"}"
|
44
|
+
dir=$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) +m) && printf 'cd -- %q' "$dir"
|
45
|
+
}
|
46
|
+
|
47
|
+
__fzf_history__() {
|
48
|
+
local output
|
49
|
+
output=$(
|
50
|
+
builtin fc -lnr -2147483648 |
|
51
|
+
last_hist=$(HISTTIMEFORMAT='' builtin history 1) perl -n -l0 -e 'BEGIN { getc; $/ = "\n\t"; $HISTCMD = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCMD - $. . "\t$_" if !$seen{$_}++' |
|
52
|
+
FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS +m --read0" $(__fzfcmd) --query "$READLINE_LINE"
|
53
|
+
) || return
|
54
|
+
READLINE_LINE=${output#*$'\t'}
|
55
|
+
if [[ -z "$READLINE_POINT" ]]; then
|
56
|
+
echo "$READLINE_LINE"
|
57
|
+
else
|
58
|
+
READLINE_POINT=0x7fffffff
|
59
|
+
fi
|
60
|
+
}
|
61
|
+
|
62
|
+
# Required to refresh the prompt after fzf
|
63
|
+
bind -m emacs-standard '"\er": redraw-current-line'
|
64
|
+
|
65
|
+
bind -m vi-command '"\C-z": emacs-editing-mode'
|
66
|
+
bind -m vi-insert '"\C-z": emacs-editing-mode'
|
67
|
+
bind -m emacs-standard '"\C-z": vi-editing-mode'
|
68
|
+
|
69
|
+
if (( BASH_VERSINFO[0] < 4 )); then
|
70
|
+
# CTRL-T - Paste the selected file path into the command line
|
71
|
+
bind -m emacs-standard '"\C-t": " \C-b\C-k \C-u`__fzf_select__`\e\C-e\er\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f"'
|
72
|
+
bind -m vi-command '"\C-t": "\C-z\C-t\C-z"'
|
73
|
+
bind -m vi-insert '"\C-t": "\C-z\C-t\C-z"'
|
74
|
+
|
75
|
+
# CTRL-R - Paste the selected command from history into the command line
|
76
|
+
bind -m emacs-standard '"\C-r": "\C-e \C-u\C-y\ey\C-u"$(__fzf_history__)"\e\C-e\er"'
|
77
|
+
bind -m vi-command '"\C-r": "\C-z\C-r\C-z"'
|
78
|
+
bind -m vi-insert '"\C-r": "\C-z\C-r\C-z"'
|
79
|
+
else
|
80
|
+
# CTRL-T - Paste the selected file path into the command line
|
81
|
+
bind -m emacs-standard -x '"\C-t": fzf-file-widget'
|
82
|
+
bind -m vi-command -x '"\C-t": fzf-file-widget'
|
83
|
+
bind -m vi-insert -x '"\C-t": fzf-file-widget'
|
84
|
+
|
85
|
+
# CTRL-R - Paste the selected command from history into the command line
|
86
|
+
bind -m emacs-standard -x '"\C-r": __fzf_history__'
|
87
|
+
bind -m vi-command -x '"\C-r": __fzf_history__'
|
88
|
+
bind -m vi-insert -x '"\C-r": __fzf_history__'
|
89
|
+
fi
|
90
|
+
|
91
|
+
# ALT-C - cd into the selected directory
|
92
|
+
bind -m emacs-standard '"\ec": " \C-b\C-k \C-u`__fzf_cd__`\e\C-e\er\C-m\C-y\C-h\e \C-y\ey\C-x\C-x\C-d"'
|
93
|
+
bind -m vi-command '"\ec": "\C-z\ec\C-z"'
|
94
|
+
bind -m vi-insert '"\ec": "\C-z\ec\C-z"'
|
95
|
+
|
96
|
+
fi
|
@@ -0,0 +1,172 @@
|
|
1
|
+
# ____ ____
|
2
|
+
# / __/___ / __/
|
3
|
+
# / /_/_ / / /_
|
4
|
+
# / __/ / /_/ __/
|
5
|
+
# /_/ /___/_/ key-bindings.fish
|
6
|
+
#
|
7
|
+
# - $FZF_TMUX_OPTS
|
8
|
+
# - $FZF_CTRL_T_COMMAND
|
9
|
+
# - $FZF_CTRL_T_OPTS
|
10
|
+
# - $FZF_CTRL_R_OPTS
|
11
|
+
# - $FZF_ALT_C_COMMAND
|
12
|
+
# - $FZF_ALT_C_OPTS
|
13
|
+
|
14
|
+
# Key bindings
|
15
|
+
# ------------
|
16
|
+
function fzf_key_bindings
|
17
|
+
|
18
|
+
# Store current token in $dir as root for the 'find' command
|
19
|
+
function fzf-file-widget -d "List files and folders"
|
20
|
+
set -l commandline (__fzf_parse_commandline)
|
21
|
+
set -l dir $commandline[1]
|
22
|
+
set -l fzf_query $commandline[2]
|
23
|
+
set -l prefix $commandline[3]
|
24
|
+
|
25
|
+
# "-path \$dir'*/\\.*'" matches hidden files/folders inside $dir but not
|
26
|
+
# $dir itself, even if hidden.
|
27
|
+
test -n "$FZF_CTRL_T_COMMAND"; or set -l FZF_CTRL_T_COMMAND "
|
28
|
+
command find -L \$dir -mindepth 1 \\( -path \$dir'*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' \\) -prune \
|
29
|
+
-o -type f -print \
|
30
|
+
-o -type d -print \
|
31
|
+
-o -type l -print 2> /dev/null | sed 's@^\./@@'"
|
32
|
+
|
33
|
+
test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40%
|
34
|
+
begin
|
35
|
+
set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS"
|
36
|
+
eval "$FZF_CTRL_T_COMMAND | "(__fzfcmd)' -m --query "'$fzf_query'"' | while read -l r; set result $result $r; end
|
37
|
+
end
|
38
|
+
if [ -z "$result" ]
|
39
|
+
commandline -f repaint
|
40
|
+
return
|
41
|
+
else
|
42
|
+
# Remove last token from commandline.
|
43
|
+
commandline -t ""
|
44
|
+
end
|
45
|
+
for i in $result
|
46
|
+
commandline -it -- $prefix
|
47
|
+
commandline -it -- (string escape $i)
|
48
|
+
commandline -it -- ' '
|
49
|
+
end
|
50
|
+
commandline -f repaint
|
51
|
+
end
|
52
|
+
|
53
|
+
function fzf-history-widget -d "Show command history"
|
54
|
+
test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40%
|
55
|
+
begin
|
56
|
+
set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT $FZF_DEFAULT_OPTS --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS +m"
|
57
|
+
|
58
|
+
set -l FISH_MAJOR (echo $version | cut -f1 -d.)
|
59
|
+
set -l FISH_MINOR (echo $version | cut -f2 -d.)
|
60
|
+
|
61
|
+
# history's -z flag is needed for multi-line support.
|
62
|
+
# history's -z flag was added in fish 2.4.0, so don't use it for versions
|
63
|
+
# before 2.4.0.
|
64
|
+
if [ "$FISH_MAJOR" -gt 2 -o \( "$FISH_MAJOR" -eq 2 -a "$FISH_MINOR" -ge 4 \) ];
|
65
|
+
history -z | eval (__fzfcmd) --read0 --print0 -q '(commandline)' | read -lz result
|
66
|
+
and commandline -- $result
|
67
|
+
else
|
68
|
+
history | eval (__fzfcmd) -q '(commandline)' | read -l result
|
69
|
+
and commandline -- $result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
commandline -f repaint
|
73
|
+
end
|
74
|
+
|
75
|
+
function fzf-cd-widget -d "Change directory"
|
76
|
+
set -l commandline (__fzf_parse_commandline)
|
77
|
+
set -l dir $commandline[1]
|
78
|
+
set -l fzf_query $commandline[2]
|
79
|
+
set -l prefix $commandline[3]
|
80
|
+
|
81
|
+
test -n "$FZF_ALT_C_COMMAND"; or set -l FZF_ALT_C_COMMAND "
|
82
|
+
command find -L \$dir -mindepth 1 \\( -path \$dir'*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' \\) -prune \
|
83
|
+
-o -type d -print 2> /dev/null | sed 's@^\./@@'"
|
84
|
+
test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40%
|
85
|
+
begin
|
86
|
+
set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS"
|
87
|
+
eval "$FZF_ALT_C_COMMAND | "(__fzfcmd)' +m --query "'$fzf_query'"' | read -l result
|
88
|
+
|
89
|
+
if [ -n "$result" ]
|
90
|
+
cd -- $result
|
91
|
+
|
92
|
+
# Remove last token from commandline.
|
93
|
+
commandline -t ""
|
94
|
+
commandline -it -- $prefix
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
commandline -f repaint
|
99
|
+
end
|
100
|
+
|
101
|
+
function __fzfcmd
|
102
|
+
test -n "$FZF_TMUX"; or set FZF_TMUX 0
|
103
|
+
test -n "$FZF_TMUX_HEIGHT"; or set FZF_TMUX_HEIGHT 40%
|
104
|
+
if [ -n "$FZF_TMUX_OPTS" ]
|
105
|
+
echo "fzf-tmux $FZF_TMUX_OPTS -- "
|
106
|
+
else if [ $FZF_TMUX -eq 1 ]
|
107
|
+
echo "fzf-tmux -d$FZF_TMUX_HEIGHT -- "
|
108
|
+
else
|
109
|
+
echo "fzf"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
bind \ct fzf-file-widget
|
114
|
+
bind \cr fzf-history-widget
|
115
|
+
bind \ec fzf-cd-widget
|
116
|
+
|
117
|
+
if bind -M insert > /dev/null 2>&1
|
118
|
+
bind -M insert \ct fzf-file-widget
|
119
|
+
bind -M insert \cr fzf-history-widget
|
120
|
+
bind -M insert \ec fzf-cd-widget
|
121
|
+
end
|
122
|
+
|
123
|
+
function __fzf_parse_commandline -d 'Parse the current command line token and return split of existing filepath, fzf query, and optional -option= prefix'
|
124
|
+
set -l commandline (commandline -t)
|
125
|
+
|
126
|
+
# strip -option= from token if present
|
127
|
+
set -l prefix (string match -r -- '^-[^\s=]+=' $commandline)
|
128
|
+
set commandline (string replace -- "$prefix" '' $commandline)
|
129
|
+
|
130
|
+
# eval is used to do shell expansion on paths
|
131
|
+
eval set commandline $commandline
|
132
|
+
|
133
|
+
if [ -z $commandline ]
|
134
|
+
# Default to current directory with no --query
|
135
|
+
set dir '.'
|
136
|
+
set fzf_query ''
|
137
|
+
else
|
138
|
+
set dir (__fzf_get_dir $commandline)
|
139
|
+
|
140
|
+
if [ "$dir" = "." -a (string sub -l 1 -- $commandline) != '.' ]
|
141
|
+
# if $dir is "." but commandline is not a relative path, this means no file path found
|
142
|
+
set fzf_query $commandline
|
143
|
+
else
|
144
|
+
# Also remove trailing slash after dir, to "split" input properly
|
145
|
+
set fzf_query (string replace -r "^$dir/?" -- '' "$commandline")
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
echo $dir
|
150
|
+
echo $fzf_query
|
151
|
+
echo $prefix
|
152
|
+
end
|
153
|
+
|
154
|
+
function __fzf_get_dir -d 'Find the longest existing filepath from input string'
|
155
|
+
set dir $argv
|
156
|
+
|
157
|
+
# Strip all trailing slashes. Ignore if $dir is root dir (/)
|
158
|
+
if [ (string length -- $dir) -gt 1 ]
|
159
|
+
set dir (string replace -r '/*$' -- '' $dir)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Iteratively check if dir exists and strip tail end of path
|
163
|
+
while [ ! -d "$dir" ]
|
164
|
+
# If path is absolute, this can keep going until ends up at /
|
165
|
+
# If path is relative, this can keep going until entire input is consumed, dirname returns "."
|
166
|
+
set dir (dirname -- "$dir")
|
167
|
+
end
|
168
|
+
|
169
|
+
echo $dir
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# ____ ____
|
2
|
+
# / __/___ / __/
|
3
|
+
# / /_/_ / / /_
|
4
|
+
# / __/ / /_/ __/
|
5
|
+
# /_/ /___/_/ key-bindings.zsh
|
6
|
+
#
|
7
|
+
# - $FZF_TMUX_OPTS
|
8
|
+
# - $FZF_CTRL_T_COMMAND
|
9
|
+
# - $FZF_CTRL_T_OPTS
|
10
|
+
# - $FZF_CTRL_R_OPTS
|
11
|
+
# - $FZF_ALT_C_COMMAND
|
12
|
+
# - $FZF_ALT_C_OPTS
|
13
|
+
|
14
|
+
# Key bindings
|
15
|
+
# ------------
|
16
|
+
|
17
|
+
# The code at the top and the bottom of this file is the same as in completion.zsh.
|
18
|
+
# Refer to that file for explanation.
|
19
|
+
if 'zmodload' 'zsh/parameter' 2>'/dev/null' && (( ${+options} )); then
|
20
|
+
__fzf_key_bindings_options="options=(${(j: :)${(kv)options[@]}})"
|
21
|
+
else
|
22
|
+
() {
|
23
|
+
__fzf_key_bindings_options="setopt"
|
24
|
+
'local' '__fzf_opt'
|
25
|
+
for __fzf_opt in "${(@)${(@f)$(set -o)}%% *}"; do
|
26
|
+
if [[ -o "$__fzf_opt" ]]; then
|
27
|
+
__fzf_key_bindings_options+=" -o $__fzf_opt"
|
28
|
+
else
|
29
|
+
__fzf_key_bindings_options+=" +o $__fzf_opt"
|
30
|
+
fi
|
31
|
+
done
|
32
|
+
}
|
33
|
+
fi
|
34
|
+
|
35
|
+
'emulate' 'zsh' '-o' 'no_aliases'
|
36
|
+
|
37
|
+
{
|
38
|
+
|
39
|
+
[[ -o interactive ]] || return 0
|
40
|
+
|
41
|
+
# CTRL-T - Paste the selected file path(s) into the command line
|
42
|
+
__fsel() {
|
43
|
+
local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
|
44
|
+
-o -type f -print \
|
45
|
+
-o -type d -print \
|
46
|
+
-o -type l -print 2> /dev/null | cut -b3-"}"
|
47
|
+
setopt localoptions pipefail no_aliases 2> /dev/null
|
48
|
+
local item
|
49
|
+
eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read item; do
|
50
|
+
echo -n "${(q)item} "
|
51
|
+
done
|
52
|
+
local ret=$?
|
53
|
+
echo
|
54
|
+
return $ret
|
55
|
+
}
|
56
|
+
|
57
|
+
__fzfcmd() {
|
58
|
+
[ -n "$TMUX_PANE" ] && { [ "${FZF_TMUX:-0}" != 0 ] || [ -n "$FZF_TMUX_OPTS" ]; } &&
|
59
|
+
echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
|
60
|
+
}
|
61
|
+
|
62
|
+
fzf-file-widget() {
|
63
|
+
LBUFFER="${LBUFFER}$(__fsel)"
|
64
|
+
local ret=$?
|
65
|
+
zle reset-prompt
|
66
|
+
return $ret
|
67
|
+
}
|
68
|
+
zle -N fzf-file-widget
|
69
|
+
bindkey '^T' fzf-file-widget
|
70
|
+
|
71
|
+
# ALT-C - cd into the selected directory
|
72
|
+
fzf-cd-widget() {
|
73
|
+
local cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
|
74
|
+
-o -type d -print 2> /dev/null | cut -b3-"}"
|
75
|
+
setopt localoptions pipefail no_aliases 2> /dev/null
|
76
|
+
local dir="$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) +m)"
|
77
|
+
if [[ -z "$dir" ]]; then
|
78
|
+
zle redisplay
|
79
|
+
return 0
|
80
|
+
fi
|
81
|
+
zle push-line # Clear buffer. Auto-restored on next prompt.
|
82
|
+
BUFFER="cd -- ${(q)dir}"
|
83
|
+
zle accept-line
|
84
|
+
local ret=$?
|
85
|
+
unset dir # ensure this doesn't end up appearing in prompt expansion
|
86
|
+
zle reset-prompt
|
87
|
+
return $ret
|
88
|
+
}
|
89
|
+
zle -N fzf-cd-widget
|
90
|
+
bindkey '\ec' fzf-cd-widget
|
91
|
+
|
92
|
+
# CTRL-R - Paste the selected command from history into the command line
|
93
|
+
fzf-history-widget() {
|
94
|
+
local selected num
|
95
|
+
setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null
|
96
|
+
selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, $1)}++' |
|
97
|
+
FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) )
|
98
|
+
local ret=$?
|
99
|
+
if [ -n "$selected" ]; then
|
100
|
+
num=$selected[1]
|
101
|
+
if [ -n "$num" ]; then
|
102
|
+
zle vi-fetch-history -n $num
|
103
|
+
fi
|
104
|
+
fi
|
105
|
+
zle reset-prompt
|
106
|
+
return $ret
|
107
|
+
}
|
108
|
+
zle -N fzf-history-widget
|
109
|
+
bindkey '^R' fzf-history-widget
|
110
|
+
|
111
|
+
} always {
|
112
|
+
eval $__fzf_key_bindings_options
|
113
|
+
'unset' '__fzf_key_bindings_options'
|
114
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013-2021 Junegunn Choi
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|