From 7cef4ec48c432053dc9ff2fd20958c0e1cba438e Mon Sep 17 00:00:00 2001 From: ViViDboarder Date: Tue, 28 Nov 2017 18:48:44 -0800 Subject: [PATCH] Better fish completion for Python with FZF --- assets/default/fish/completions/python.fish | 2 + .../fish/functions/fzf_extensions.fish | 9 ++++ .../functions/fzf_key_bindings_enhanced.fish | 47 ------------------- 3 files changed, 11 insertions(+), 47 deletions(-) create mode 100644 assets/default/fish/completions/python.fish create mode 100644 assets/default/fish/functions/fzf_extensions.fish delete mode 100644 assets/default/fish/functions/fzf_key_bindings_enhanced.fish diff --git a/assets/default/fish/completions/python.fish b/assets/default/fish/completions/python.fish new file mode 100644 index 0000000..2532940 --- /dev/null +++ b/assets/default/fish/completions/python.fish @@ -0,0 +1,2 @@ +# Use FZF to complete python modules rather than standard file completion +complete -c python -s m -a "(ag --py -g '' | sed -e 's/\//./g' -e 's/\(.__init__\)*.py\$//' | fzf --reverse --height 40%)" diff --git a/assets/default/fish/functions/fzf_extensions.fish b/assets/default/fish/functions/fzf_extensions.fish new file mode 100644 index 0000000..04f6e2c --- /dev/null +++ b/assets/default/fish/functions/fzf_extensions.fish @@ -0,0 +1,9 @@ +# A function that can be used as the preview function for FZF to make fancy previews with syntax highlighting +function __fzf_preview + if file --mime "$argv" | grep -q binary + echo "$argv is a binary file" + else + coderay "$argv" ;or cat "$argv" 2> /dev/null | head -250 + end +end + diff --git a/assets/default/fish/functions/fzf_key_bindings_enhanced.fish b/assets/default/fish/functions/fzf_key_bindings_enhanced.fish deleted file mode 100644 index 17127c1..0000000 --- a/assets/default/fish/functions/fzf_key_bindings_enhanced.fish +++ /dev/null @@ -1,47 +0,0 @@ -# Extends fzf-file-widget by changing the FZF_CTRL_T_COMMAND based on context -# Should be added to fish_user_keybindings after fzf_key_bindings -# Author: ViViDboarder -function fzf_key_bindings_enhanced - function fzf-enhanced-widget -d "FZF widget that takes command and args via args" - set -lx FZF_CTRL_T_COMMAND $argv[1] - set -lx FZF_CTRL_T_OPTS $FZF_CTRL_T_OPTS - if [ (count $argv) -gt 1 ] - set FZF_CTRL_T_OPTS $argv[2] - end - set -l commandline (__fzf_parse_commandline) - set -l fzf_query $commandline[2] - - set -q FZF_TMUX_HEIGHT; or set FZF_TMUX_HEIGHT 40% - begin - set -lx FZF_DEFAULT_OPTS "--height $FZF_TMUX_HEIGHT --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" - eval "$FZF_CTRL_T_COMMAND | "(__fzfcmd)' -m --query "'$fzf_query'"' | while read -l r; set result $result $r; end - end - if [ -z "$result" ] - commandline -f repaint - return - else - # Remove last token from commandline. - commandline -t "" - end - for i in $result - commandline -it -- (string escape $i) - commandline -it -- ' ' - end - commandline -f repaint - end - - function fzf-enhanced-binding -d 'List files or other completions based on context' - set -l cmd (commandline -opc) - if [ (count $cmd) -gt 1 -a "$cmd[1]" = "python" -a "$cmd[-1]" = "-m" ] - # List python modules - set -l FZF_CTRL_T_COMMAND "ag --py -g '' | sed -e 's/\//./g' -e 's/\(.__init__\)*.py\$//'" - fzf-enhanced-widget "$FZF_CTRL_T_COMMAND" - end - fzf-file-widget - end - - bind \ct fzf-enhanced-binding - if bind -M insert >> /dev/null 2>&1 - bind -M insert \ct fzf-enhanced-binding - end -end