-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
27 changed files
with
578 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
complete fzf_configure_bindings --no-files | ||
complete fzf_configure_bindings --long help --short h --description "Print help" --condition "not __fish_seen_argument --help -h" | ||
complete fzf_configure_bindings --long directory --description "Change the key binding for Search Directory" --condition "not __fish_seen_argument --directory" | ||
complete fzf_configure_bindings --long git_log --description "Change the key binding for Search Git Log" --condition "not __fish_seen_argument --git_log" | ||
complete fzf_configure_bindings --long git_status --description "Change the key binding for Search Git Status" --condition "not __fish_seen_argument --git_status" | ||
complete fzf_configure_bindings --long history --description "Change the key binding for Search History" --condition "not __fish_seen_argument --history" | ||
complete fzf_configure_bindings --long processes --description "Change the key binding for Search Processes" --condition "not __fish_seen_argument --processes" | ||
complete fzf_configure_bindings --long variables --description "Change the key binding for Search Variables" --condition "not __fish_seen_argument --variables" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,28 @@ | ||
# bind \cr '__fzf_history' | ||
bind -M insert \ch __fzf_tldr | ||
bind -M insert \ct __fzf_files | ||
# fzf.fish is only meant to be used in interactive mode. If not in interactive mode and not in CI, skip the config to speed up shell startup | ||
if not status is-interactive && test "$CI" != true | ||
exit | ||
end | ||
|
||
set -l color00 '#292D3E' | ||
set -l color01 '#444267' | ||
set -l color02 '#32374D' | ||
set -l color03 '#676E95' | ||
set -l color04 '#8796B0' | ||
set -l color05 '#959DCB' | ||
set -l color06 '#959DCB' | ||
set -l color07 '#FFFFFF' | ||
set -l color08 '#F07178' | ||
set -l color09 '#F78C6C' | ||
set -l color0A '#FFCB6B' | ||
set -l color0B '#C3E88D' | ||
set -l color0C '#89DDFF' | ||
set -l color0D '#82AAFF' | ||
set -l color0E '#C792EA' | ||
set -l color0F '#FF5370' | ||
# Because of scoping rules, to capture the shell variables exactly as they are, we must read | ||
# them before even executing _fzf_search_variables. We use psub to store the | ||
# variables' info in temporary files and pass in the filenames as arguments. | ||
# This variable is global so that it can be referenced by fzf_configure_bindings and in tests | ||
set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)' | ||
|
||
source ~/projects/tokyonight.nvim/extras/fzf/tokyonight_moon.zsh | ||
set -x FZF_DEFAULT_OPTS "--cycle --layout=reverse --height 40% --preview-window=right:70% $FZF_DEFAULT_OPTS" | ||
|
||
# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings | ||
fzf_configure_bindings | ||
|
||
# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased | ||
function _fzf_uninstall --on-event fzf_uninstall | ||
_fzf_uninstall_bindings | ||
|
||
set --erase _fzf_search_vars_command | ||
functions --erase _fzf_uninstall _fzf_migration_message _fzf_uninstall_bindings fzf_configure_bindings | ||
complete --erase fzf_configure_bindings | ||
|
||
set_color cyan | ||
echo "fzf.fish uninstalled." | ||
echo "You may need to manually remove fzf_configure_bindings from your config.fish if you were using custom key bindings." | ||
set_color normal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
bind -M insert \ch __fzf_tldr | ||
|
||
source ~/projects/tokyonight.nvim/extras/fzf/tokyonight_moon.sh | ||
|
||
set -x FZF_DEFAULT_OPTS "$FZF_DEFAULT_OPTS | ||
--cycle | ||
--layout=reverse | ||
--height 60% | ||
--ansi | ||
--preview-window=right:70% | ||
--bind=ctrl-u:half-page-up,ctrl-d:half-page-down,ctrl-x:jump | ||
--bind=ctrl-f:preview-page-down,ctrl-b:preview-page-up | ||
--bind=ctrl-a:beginning-of-line,ctrl-e:end-of-line | ||
--bind=ctrl-j:down,ctrl-k:up | ||
" | ||
|
||
set fzf_diff_highlighter delta --paging=never --width=20 | ||
fzf_configure_bindings \ | ||
--directory=\ct \ | ||
--git_log=\cg \ | ||
--git_status= \ | ||
--history= \ | ||
--processes=\cp \ | ||
--variables=\c\ev |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
jorgebucaran/fisher | ||
franciscolourenco/done | ||
jorgebucaran/autopair.fish | ||
patrickf1/fzf.fish |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings." | ||
echo "\ | ||
USAGE: | ||
fzf_configure_bindings [--COMMAND=[KEY_SEQUENCE]...] | ||
DESCRIPTION | ||
fzf_configure_bindings installs key bindings for fzf.fish's commands and erases any bindings it | ||
previously installed. It installs bindings for both default and insert modes. fzf.fish executes | ||
it without options on fish startup to install the out-of-the-box key bindings. | ||
By default, commands are bound to a mnemonic key sequence, shown below. Each command's binding | ||
can be configured using a namesake corresponding option: | ||
COMMAND | DEFAULT KEY SEQUENCE | CORRESPONDING OPTION | ||
Search Directory | Ctrl+Alt+F (F for file) | --directory | ||
Search Git Log | Ctrl+Alt+L (L for log) | --git_log | ||
Search Git Status | Ctrl+Alt+S (S for status) | --git_status | ||
Search History | Ctrl+R (R for reverse) | --history | ||
Search Processes | Ctrl+Alt+P (P for process) | --processes | ||
Search Variables | Ctrl+V (V for variable) | --variables | ||
Override a command's binding by specifying its corresponding option with the desired key | ||
sequence. Disable a command's binding by specifying its corresponding option with no value. | ||
Because fzf_configure_bindings erases bindings it previously installed, it can be cleanly | ||
executed multiple times. Once the desired fzf_configure_bindings command has been found, add it | ||
to your config.fish in order to persist the customized bindings. | ||
In terms of validation, fzf_configure_bindings fails if passed unknown options. It expects an | ||
equals sign between an option's name and value. However, it does not validate key sequences. | ||
Pass -h or --help to print this help message and exit. | ||
EXAMPLES | ||
Default bindings but bind Search Directory to Ctrl+F and Search Variables to Ctrl+Alt+V | ||
\$ fzf_configure_bindings --directory=\cf --variables=\e\cv | ||
Default bindings but disable Search History | ||
\$ fzf_configure_bindings --history= | ||
An agglomeration of different options | ||
\$ fzf_configure_bindings --git_status=\cg --history=\ch --variables= --processes= | ||
SEE Also | ||
To learn more about fish key bindings, see bind(1) and fish_key_reader(1). | ||
" | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# helper function for _fzf_search_variables | ||
function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output." | ||
# Extract only the lines about the variable, all of which begin with either | ||
# $variable_name: ...or... $variable_name[ | ||
string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output | | ||
|
||
# Strip the variable name prefix, including ": " for scope info lines | ||
string replace --regex "^\\\$$variable_name(?:: )?" '' | | ||
|
||
# Distill the lines of values, replacing... | ||
# [1]: |value| | ||
# ...with... | ||
# [1] value | ||
string replace --regex ": \|(.*)\|" ' $1' | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# helper for _fzf_search_git_status | ||
# arg should be a line from git status --short, e.g. | ||
# MM functions/_fzf_preview_changed_file.fish | ||
# D README.md | ||
# R LICENSE -> "New License" | ||
function _fzf_preview_changed_file --argument-names path_status --description "Show the git diff of the given file." | ||
# remove quotes because they'll be interpreted literally by git diff | ||
# no need to requote when referencing $path because fish does not perform word splitting | ||
# https://fishshell.com/docs/current/fish_for_bash_users.html | ||
set -f path (string unescape (string sub --start 4 $path_status)) | ||
# first letter of short format shows index, second letter shows working tree | ||
# https://git-scm.com/docs/git-status/2.35.0#_short_format | ||
set -f index_status (string sub --length 1 $path_status) | ||
set -f working_tree_status (string sub --start 2 --length 1 $path_status) | ||
|
||
set -f diff_opts --color=always | ||
|
||
if test $index_status = '?' | ||
_fzf_report_diff_type Untracked | ||
_fzf_preview_file $path | ||
else if contains {$index_status}$working_tree_status DD AU UD UA DU AA UU | ||
# Unmerged statuses taken directly from git status help's short format table | ||
# Unmerged statuses are mutually exclusive with other statuses, so if we see | ||
# these, then safe to assume the path is unmerged | ||
_fzf_report_diff_type Unmerged | ||
git diff $diff_opts -- $path | ||
else | ||
if test $index_status != ' ' | ||
_fzf_report_diff_type Staged | ||
|
||
# renames are only detected in the index, never working tree, so only need to test for it here | ||
# https://stackoverflow.com/questions/73954214 | ||
if test $index_status = R | ||
# diff the post-rename path with the original path, otherwise the diff will show the entire file as being added | ||
set -f orig_and_new_path (string split --max 1 -- ' -> ' $path) | ||
git diff --staged $diff_opts -- $orig_and_new_path[1] $orig_and_new_path[2] | ||
# path currently has the form of "original -> current", so we need to correct it before it's used below | ||
set path $orig_and_new_path[2] | ||
else | ||
git diff --staged $diff_opts -- $path | ||
end | ||
end | ||
|
||
if test $working_tree_status != ' ' | ||
_fzf_report_diff_type Unstaged | ||
git diff $diff_opts -- $path | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# helper function for _fzf_search_directory and _fzf_search_git_status | ||
function _fzf_preview_file --description "Print a preview for the given file based on its file type." | ||
# because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file | ||
# as one argument, we collect all the arguments into one single variable and treat that as the path | ||
set -f file_path $argv | ||
|
||
if test -L "$file_path" # symlink | ||
# notify user and recurse on the target of the symlink, which can be any of these file types | ||
set -l target_path (realpath "$file_path") | ||
|
||
set_color yellow | ||
echo "'$file_path' is a symlink to '$target_path'." | ||
set_color normal | ||
|
||
_fzf_preview_file "$target_path" | ||
else if test -f "$file_path" # regular file | ||
if set --query fzf_preview_file_cmd | ||
# need to escape quotes to make sure eval receives file_path as a single arg | ||
eval "$fzf_preview_file_cmd '$file_path'" | ||
else | ||
bat --style=numbers --color=always "$file_path" | ||
end | ||
else if test -d "$file_path" # directory | ||
if set --query fzf_preview_dir_cmd | ||
# see above | ||
eval "$fzf_preview_dir_cmd '$file_path'" | ||
else | ||
# -A list hidden files as well, except for . and .. | ||
# -F helps classify files by appending symbols after the file name | ||
command ls -A -F "$file_path" | ||
end | ||
else if test -c "$file_path" | ||
_fzf_report_file_type "$file_path" "character device file" | ||
else if test -b "$file_path" | ||
_fzf_report_file_type "$file_path" "block device file" | ||
else if test -S "$file_path" | ||
_fzf_report_file_type "$file_path" socket | ||
else if test -p "$file_path" | ||
_fzf_report_file_type "$file_path" "named pipe" | ||
else | ||
echo "$file_path doesn't exist." >&2 | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# helper for _fzf_preview_changed_file | ||
# prints out something like | ||
# ╭────────╮ | ||
# │ Staged │ | ||
# ╰────────╯ | ||
function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch." | ||
# number of "-" to draw is the length of the string to box + 2 for padding | ||
set -f repeat_count (math 2 + (string length $diff_type)) | ||
set -f line (string repeat --count $repeat_count ─) | ||
set -f top_border ╭$line╮ | ||
set -f btm_border ╰$line╯ | ||
|
||
set_color yellow | ||
echo $top_border | ||
echo "│ $diff_type │" | ||
echo $btm_border | ||
set_color normal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# helper function for _fzf_preview_file | ||
function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file." | ||
set_color red | ||
echo "Cannot preview '$file_path': it is a $file_type." | ||
set_color normal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths." | ||
# Directly use fd binary to avoid output buffering delay caused by a fd alias, if any. | ||
# Debian-based distros install fd as fdfind and the fd package is something else, so | ||
# check for fdfind first. Fall back to "fd" for a clear error message. | ||
set -f fd_cmd (command -v fdfind || command -v fd || echo "fd") | ||
set -f --append fd_cmd --color=always $fzf_fd_opts | ||
|
||
set -f fzf_arguments --multi --ansi $fzf_directory_opts | ||
set -f token (commandline --current-token) | ||
# expand any variables or leading tilde (~) in the token | ||
set -f expanded_token (eval echo -- $token) | ||
# unescape token because it's already quoted so backslashes will mess up the path | ||
set -f unescaped_exp_token (string unescape -- $expanded_token) | ||
|
||
# If the current token is a directory and has a trailing slash, | ||
# then use it as fd's base directory. | ||
if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token" | ||
set --append fd_cmd --base-directory=$unescaped_exp_token | ||
# use the directory name as fzf's prompt to indicate the search is limited to that directory | ||
set --prepend fzf_arguments --prompt="Directory $unescaped_exp_token> " --preview="_fzf_preview_file $expanded_token{}" | ||
set -f file_paths_selected $unescaped_exp_token($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments) | ||
else | ||
set --prepend fzf_arguments --prompt="Directory> " --query="$unescaped_exp_token" --preview='_fzf_preview_file {}' | ||
set -f file_paths_selected ($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments) | ||
end | ||
|
||
|
||
if test $status -eq 0 | ||
commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ') | ||
end | ||
|
||
commandline --function repaint | ||
end |
Oops, something went wrong.