This seems like a bug of fish, but sometimes when you select an item
fish complains:
"insertion mode switches can not be used when not in insertion mode"
This only happens when using tmux pane. Injecting a dummy command
somehow fixes the issue.
Instead of choosing one at initialization, choose the correct one
when it's actually called, so that the behavior is correct even after
resizing.
Bonus fixes for tmux with bash 4+:
- No extra space when cancelling CTRL-T.
- Fix cursor position problem in vi mode.
In the case that fzf-tmux returns a user-selected result but with a
non-zero exit status (which can happen if a function inside $PS1 returns
non-zero) this allows CTRL-R to continue working as expected.
Addresses #203 (Tranquility's comment)
* _fzf_complete is the helper function for custom completion
* _fzf_complete FZF_OPTS ARGS
* Reads the output of the source command instead of the command string
* In zsh, you can use pipe to feed the data into the function, but
it's not possible in bash as by doing so COMPREPLY is set from the
subshell and thus nullified
* Change the naming convention for consistency:
* _fzf_complete_COMMAND
e.g.
# pass completion suggested by @d4ndo (#362)
_fzf_complete_pass() {
_fzf_complete '+m' "$@" < <(
local pwdir=${PASSWORD_STORE_DIR-~/.password-store/}
local stringsize="${#pwdir}"
find "$pwdir" -name "*.gpg" -print |
cut -c "$((stringsize + 1))"- |
sed -e 's/\(.*\)\.gpg/\1/'
)
}
# Only in bash
complete -F _fzf_complete_pass -o default -o bashdefault pass
While in bash you can externally register custom completion functions
using `complete` command, it was not possible to do so in zsh without
changing completion.zsh as the name of the supported commands are
hard-coded within the code (See #362). With this commit, fzf-completion
of zsh will first look if `_fzf_COMMAND_completion` exists and calls the
function, so one can externally define completion functions for specific
commands.
This commit also tries to make the interface of (yet undocumented)
_fzf_list_completion helper function consistent across bash and zsh.
So the following code works both on bash and zsh.
_fzf_pass_completion() {
local pwdir=${PASSWORD_STORE_DIR-~/.password-store/}
local stringsize="${#pwdir}"
let "stringsize+=1"
_fzf_list_completion '+m' "$@" << "EOF"
find "$pwdir" -name "*.gpg" -print | cut -c "$stringsize"- | sed -e 's/\(.*\)\.gpg/\1/'
EOF
}
# Only on bash
complete -F _fzf_pass_completion -o default -o bashdefault pass
Note that the suggested convention and the interface are not yet final
and subject to change.
/cc @d4ndo
In addition to being simpler, it allows subsequent up/down history
or accept-line-and-down-history widgets to work.
Also allow for find being and alias if alias expansion
after command is enabled.
- Add `--history` option (e.g. fzf --history ~/.fzf.history)
- Add `--history-max` option for limiting the size of the file (default 1000)
- Add `previous-history` and `next-history` actions for `--bind`
- CTRL-P and CTRL-N are automatically remapped to these actions when
`--history` is used
Closes#249, #251
- Use symlinks instead of generating the full content
- Update fish_user_paths and remove ~/.config/fish/functions/fzf.fish
- Create wrapper script for fzf when Ruby version and use it instead of
exported function not to break fzf-tmux