diff options
Diffstat (limited to 'home-config/fish/functions/fzf_configure_bindings.fish')
-rw-r--r-- | home-config/fish/functions/fzf_configure_bindings.fish | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/home-config/fish/functions/fzf_configure_bindings.fish b/home-config/fish/functions/fzf_configure_bindings.fish new file mode 100644 index 0000000..4b4e7a2 --- /dev/null +++ b/home-config/fish/functions/fzf_configure_bindings.fish | |||
@@ -0,0 +1,46 @@ | |||
1 | # Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect | ||
2 | # https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1 | ||
3 | function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options." | ||
4 | # no need to install bindings if not in interactive mode or running tests | ||
5 | status is-interactive || test "$CI" = true; or return | ||
6 | |||
7 | set -f options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'processes=?' 'variables=?' | ||
8 | argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null | ||
9 | if test $status -ne 0 | ||
10 | echo "Invalid option or a positional argument was provided." >&2 | ||
11 | _fzf_configure_bindings_help | ||
12 | return 22 | ||
13 | else if set --query _flag_help | ||
14 | _fzf_configure_bindings_help | ||
15 | return | ||
16 | else | ||
17 | # Initialize with default key sequences and then override or disable them based on flags | ||
18 | # index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = processes, 6 = variables | ||
19 | set -f key_sequences \e\cf \e\cl \e\cs \cr \e\cp \cv # \c = control, \e = escape | ||
20 | set --query _flag_directory && set key_sequences[1] "$_flag_directory" | ||
21 | set --query _flag_git_log && set key_sequences[2] "$_flag_git_log" | ||
22 | set --query _flag_git_status && set key_sequences[3] "$_flag_git_status" | ||
23 | set --query _flag_history && set key_sequences[4] "$_flag_history" | ||
24 | set --query _flag_processes && set key_sequences[5] "$_flag_processes" | ||
25 | set --query _flag_variables && set key_sequences[6] "$_flag_variables" | ||
26 | |||
27 | # If fzf bindings already exists, uninstall it first for a clean slate | ||
28 | if functions --query _fzf_uninstall_bindings | ||
29 | _fzf_uninstall_bindings | ||
30 | end | ||
31 | |||
32 | for mode in default insert | ||
33 | test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory | ||
34 | test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log | ||
35 | test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status | ||
36 | test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history | ||
37 | test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] _fzf_search_processes | ||
38 | test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] "$_fzf_search_vars_command" | ||
39 | end | ||
40 | |||
41 | function _fzf_uninstall_bindings --inherit-variable key_sequences | ||
42 | bind --erase -- $key_sequences | ||
43 | bind --erase --mode insert -- $key_sequences | ||
44 | end | ||
45 | end | ||
46 | end | ||