summaryrefslogtreecommitdiff
path: root/home-config/fish/functions/fzf_configure_bindings.fish
diff options
context:
space:
mode:
Diffstat (limited to 'home-config/fish/functions/fzf_configure_bindings.fish')
-rw-r--r--home-config/fish/functions/fzf_configure_bindings.fish46
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
3function 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
46end