diff --git a/files/shell/.zshrc b/files/shell/.zshrc index 7231871..fd55ec1 100644 --- a/files/shell/.zshrc +++ b/files/shell/.zshrc @@ -94,114 +94,94 @@ export FZF_DEFAULT_OPTS=' --color=info:#5c6a72,prompt:#5c6a72,pointer:#5c6a72 --color=marker:#5c6a72,spinner:#5c6a72,header:#5c6a72' -## ripgrep-all -# needs https://github.com/phiresky/ripgrep-all -rga-fzf() { - RG_PREFIX="rga --files-with-matches" - local file - file="$( - FZF_DEFAULT_COMMAND="$RG_PREFIX '$1'" \ - fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \ - --phony -q "$1" \ - --bind "change:reload:$RG_PREFIX {q}" \ - --preview-window="70%:wrap" - )" && - echo "opening $file" && - xdg-open "$file" -} -zle -N rga-fzf -bindkey '^S' "rga-fzf" - ## fzf Bindings in zsh (C-r and C-f) +# c/p from ohmyzsh if [[ -x $(which fzf 2> /dev/null) ]] then - # The code at the top and the bottom of this file is the same as in completion.zsh. - # Refer to that file for explanation. + # some setup if 'zmodload' 'zsh/parameter' 2>'/dev/null' && (( ${+options} )); then - __fzf_key_bindings_options="options=(${(j: :)${(kv)options[@]}})" + __fzf_key_bindings_options="options=(${(j: :)${(kv)options[@]}})" else - () { - __fzf_key_bindings_options="setopt" - 'local' '__fzf_opt' - for __fzf_opt in "${(@)${(@f)$(set -o)}%% *}"; do - if [[ -o "$__fzf_opt" ]]; then - __fzf_key_bindings_options+=" -o $__fzf_opt" - else - __fzf_key_bindings_options+=" +o $__fzf_opt" + () { + __fzf_key_bindings_options="setopt" + 'local' '__fzf_opt' + for __fzf_opt in "${(@)${(@f)$(set -o)}%% *}"; do + if [[ -o "$__fzf_opt" ]]; then + __fzf_key_bindings_options+=" -o $__fzf_opt" + else + __fzf_key_bindings_options+=" +o $__fzf_opt" + fi + done + } fi - done - } - fi - 'emulate' 'zsh' '-o' 'no_aliases' { + [[ -o interactive ]] || return 0 - [[ -o interactive ]] || return 0 + # CTRL-F - Paste the selected file path(s) into the command line + __fsel() { + local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ + -o -type f -print \ + -o -type d -print \ + -o -type l -print 2> /dev/null | cut -b3-"}" + setopt localoptions pipefail no_aliases 2> /dev/null + eval "$cmd" | FZF_DEFAULT_OPTS="--preview='cat {}' --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read item; do + echo -n "${(q)item} " + done + local ret=$? + echo + return $ret + } - # CTRL-F - Paste the selected file path(s) into the command line - __fsel() { - local cmd="${FZF_CTRL_T_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \ - -o -type f -print \ - -o -type d -print \ - -o -type l -print 2> /dev/null | cut -b3-"}" - setopt localoptions pipefail no_aliases 2> /dev/null - eval "$cmd" | FZF_DEFAULT_OPTS="--preview='cat {}' --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS" $(__fzfcmd) -m "$@" | while read item; do - echo -n "${(q)item} " - done - local ret=$? - echo - return $ret - } + __fzfcmd() { + [ -n "$TMUX_PANE" ] && { [ "${FZF_TMUX:-0}" != 0 ] || [ -n "$FZF_TMUX_OPTS" ]; } && + echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-70%}} -- " || echo "fzf" + } - __fzfcmd() { - [ -n "$TMUX_PANE" ] && { [ "${FZF_TMUX:-0}" != 0 ] || [ -n "$FZF_TMUX_OPTS" ]; } && - echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-70%}} -- " || echo "fzf" - } + fzf-file-widget() { + LBUFFER="${LBUFFER}$(__fsel)" + local ret=$? + zle reset-prompt + return $ret + } + zle -N fzf-file-widget + bindkey '^F' fzf-file-widget - fzf-file-widget() { - LBUFFER="${LBUFFER}$(__fsel)" - local ret=$? - zle reset-prompt - return $ret - } - zle -N fzf-file-widget - bindkey '^F' fzf-file-widget + # Ensure precmds are run after cd + fzf-redraw-prompt() { + local precmd + for precmd in $precmd_functions; do + $precmd + done + zle reset-prompt + } + zle -N fzf-redraw-prompt - # Ensure precmds are run after cd - fzf-redraw-prompt() { - local precmd - for precmd in $precmd_functions; do - $precmd - done - zle reset-prompt - } - zle -N fzf-redraw-prompt - - # CTRL-R - Paste the selected command from history into the command line - fzf-history-widget() { - local selected num - setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null - selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, $1)}++' | - FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-30%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) - local ret=$? - if [ -n "$selected" ]; then - num=$selected[1] - if [ -n "$num" ]; then - zle vi-fetch-history -n $num - fi - fi - zle reset-prompt - return $ret - } - zle -N fzf-history-widget - bindkey '^R' fzf-history-widget + # CTRL-R - Paste the selected command from history into the command line + fzf-history-widget() { + local selected num + setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null + selected=( $(fc -rl 1 | perl -ne 'print if !$seen{(/^\s*[0-9]+\**\s+(.*)/, $1)}++' | + FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-30%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort $FZF_CTRL_R_OPTS --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) + local ret=$? + if [ -n "$selected" ]; then + num=$selected[1] + if [ -n "$num" ]; then + zle vi-fetch-history -n $num + fi + fi + zle reset-prompt + return $ret + } + zle -N fzf-history-widget + bindkey '^R' fzf-history-widget } always { - eval $__fzf_key_bindings_options - 'unset' '__fzf_key_bindings_options' + eval $__fzf_key_bindings_options + 'unset' '__fzf_key_bindings_options' } -else +else # fzf is not installed bindkey '^R' history-incremental-search-backward fi