home-config/fish/functions/fzf_configure_bindings.fish
f3ee8355e3b453fc14ac3d6b63fb7368798d66d7
· 2.6 KB · 46 lines
raw
| 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 |