diff options
| author | Marc Cornellà <marc.cornella@live.com> | 2019-10-24 17:57:01 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-24 17:57:01 +0200 | 
| commit | cad48e38bfbfa6e3e0096caddf330d6fc8f1ffb9 (patch) | |
| tree | 2b07ec259bbd2b1a4919245669900a87fa87a03b /plugins/fzf | |
| parent | 225425fe091ca052997833279ccc08643818c24a (diff) | |
| parent | 40df67bc3b9b51caa24df5d220487043040d1f9a (diff) | |
| download | zsh-cad48e38bfbfa6e3e0096caddf330d6fc8f1ffb9.tar.gz zsh-cad48e38bfbfa6e3e0096caddf330d6fc8f1ffb9.tar.bz2 zsh-cad48e38bfbfa6e3e0096caddf330d6fc8f1ffb9.zip | |
Merge branch 'master' into fabric_task_description
Diffstat (limited to 'plugins/fzf')
| -rw-r--r-- | plugins/fzf/README.md | 19 | ||||
| -rw-r--r-- | plugins/fzf/fzf.plugin.zsh | 95 | 
2 files changed, 114 insertions, 0 deletions
| diff --git a/plugins/fzf/README.md b/plugins/fzf/README.md new file mode 100644 index 000000000..b3a434347 --- /dev/null +++ b/plugins/fzf/README.md @@ -0,0 +1,19 @@ +# fzf + +This plugin enables [junegunn's fzf](https://github.com/junegunn/fzf) fuzzy auto-completion and key bindings + +```zsh +# Set fzf installation directory path +export FZF_BASE=/path/to/fzf/install/dir + +# Uncomment the following line to disable fuzzy completion +# export DISABLE_FZF_AUTO_COMPLETION="true" + +# Uncomment the following line to disable key bindings (CTRL-T, CTRL-R, ALT-C) +# export DISABLE_FZF_KEY_BINDINGS="true" + +plugins=( +  ... +  fzf +) +``` diff --git a/plugins/fzf/fzf.plugin.zsh b/plugins/fzf/fzf.plugin.zsh new file mode 100644 index 000000000..fe471a363 --- /dev/null +++ b/plugins/fzf/fzf.plugin.zsh @@ -0,0 +1,95 @@ +function setup_using_base_dir() { +    # Declare all variables local not no mess with outside env in any way +    local fzf_base +    local fzf_shell +    local fzfdirs +    local dir + +    test -d "${FZF_BASE}" && fzf_base="${FZF_BASE}" + +    if [[ -z "${fzf_base}" ]]; then +        fzfdirs=( +          "${HOME}/.fzf" +          "/usr/local/opt/fzf" +          "/usr/share/fzf" +        ) +        for dir in ${fzfdirs}; do +            if [[ -d "${dir}" ]]; then +                fzf_base="${dir}" +                break +            fi +        done + +        if [[ -z "${fzf_base}" ]]; then +            if (( ${+commands[brew]} )) && dir="$(brew --prefix fzf 2>/dev/null)"; then +                if [[ -d "${dir}" ]]; then +                    fzf_base="${dir}" +                fi +            fi +        fi +    fi + +    if [[ -d "${fzf_base}" ]]; then +        # Fix fzf shell directory for Archlinux package +        if [[ ! -d "${fzf_base}/shell" ]] && [[ -f /etc/arch-release ]]; then +          fzf_shell="${fzf_base}" +        else +          fzf_shell="${fzf_base}/shell" +        fi + +        # Setup fzf binary path +        if ! (( ${+commands[fzf]} )) && [[ ! "$PATH" == *$fzf_base/bin* ]]; then +          export PATH="$PATH:$fzf_base/bin" +        fi + +        # Auto-completion +        if [[ ! "$DISABLE_FZF_AUTO_COMPLETION" == "true" ]]; then +          [[ $- == *i* ]] && source "${fzf_shell}/completion.zsh" 2> /dev/null +        fi + +        # Key bindings +        if [[ ! "$DISABLE_FZF_KEY_BINDINGS" == "true" ]]; then +          source "${fzf_shell}/key-bindings.zsh" +        fi +    else +        return 1 +    fi +} + + +function setup_using_debian_package() { +    (( $+commands[dpkg] )) && dpkg -s fzf &> /dev/null +    if (( $? )); then +        # Either not a debian based distro, or no fzf installed. In any case skip ahead +        return 1 +    fi + +    # NOTE: There is no need to configure PATH for debian package, all binaries +    # are installed to /usr/bin by default + +    local completions="/usr/share/zsh/vendor-completions/_fzf" +    local key_bindings="/usr/share/doc/fzf/examples/key-bindings.zsh" + +    # Auto-completion +    if [[ $- == *i* ]] && [[ ! "$DISABLE_FZF_AUTO_COMPLETION" == "true" ]]; then +         source $completions 2> /dev/null +    fi + +    # Key bindings +    if [[ ! "$DISABLE_FZF_KEY_BINDINGS" == "true" ]]; then +        source $key_bindings +    fi + +    return 0 +} + +function indicate_error() { +    print "[oh-my-zsh] fzf plugin: Cannot find fzf installation directory.\n"\ +          "Please add \`export FZF_BASE=/path/to/fzf/install/dir\` to your .zshrc" >&2 +} + +# Check for debian package first, because it easy to short cut +# Indicate to user that fzf installation not found if nothing worked +setup_using_debian_package || setup_using_base_dir || indicate_error + +unset -f setup_using_debian_package setup_using_base_dir indicate_error | 
