aboutsummaryrefslogtreecommitdiff
path: root/shell/zsh
diff options
context:
space:
mode:
authorbozo.kopic <bozo@kopic.xyz>2021-02-08 20:05:52 +0100
committerbozo.kopic <bozo@kopic.xyz>2021-02-08 20:27:22 +0100
commita510034216ce37ac0f82afabe77c38aa058cc3fb (patch)
tree293d78bd5b7adc33df6b299aa82b8bff64b40d44 /shell/zsh
parent802f2d6257f70f58d3199a522ed982fe754abb94 (diff)
.
Diffstat (limited to 'shell/zsh')
-rw-r--r--shell/zsh/.zshrc2
-rw-r--r--shell/zsh/fzf/key-bindings.zsh114
2 files changed, 116 insertions, 0 deletions
diff --git a/shell/zsh/.zshrc b/shell/zsh/.zshrc
index 01ce4ec..1d7d2b4 100644
--- a/shell/zsh/.zshrc
+++ b/shell/zsh/.zshrc
@@ -10,6 +10,8 @@ compinit
. ~/.dotfiles/shell/zsh/zsh-git-prompt/zshrc.sh
PROMPT='[%F{green}%n%f@%m %F{green}%~%f $(git_super_status)]$ '
+. ~/.dotfiles/shell/zsh/fzf/key-bindings.zsh
+
. /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
. /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
. /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh
diff --git a/shell/zsh/fzf/key-bindings.zsh b/shell/zsh/fzf/key-bindings.zsh
new file mode 100644
index 0000000..8efa6af
--- /dev/null
+++ b/shell/zsh/fzf/key-bindings.zsh
@@ -0,0 +1,114 @@
+# ____ ____
+# / __/___ / __/
+# / /_/_ / / /_
+# / __/ / /_/ __/
+# /_/ /___/_/ key-bindings.zsh
+#
+# - $FZF_TMUX_OPTS
+# - $FZF_CTRL_T_COMMAND
+# - $FZF_CTRL_T_OPTS
+# - $FZF_CTRL_R_OPTS
+# - $FZF_ALT_C_COMMAND
+# - $FZF_ALT_C_OPTS
+
+# Key bindings
+# ------------
+
+# The code at the top and the bottom of this file is the same as in completion.zsh.
+# Refer to that file for explanation.
+if 'zmodload' 'zsh/parameter' 2>'/dev/null' && (( ${+options} )); then
+ __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"
+ fi
+ done
+ }
+fi
+
+'emulate' 'zsh' '-o' 'no_aliases'
+
+{
+
+[[ -o interactive ]] || return 0
+
+# CTRL-T - 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
+ local item
+ eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $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:-40%}} -- " || echo "fzf"
+}
+
+fzf-file-widget() {
+ LBUFFER="${LBUFFER}$(__fsel)"
+ local ret=$?
+ zle reset-prompt
+ return $ret
+}
+zle -N fzf-file-widget
+bindkey '^T' fzf-file-widget
+
+# ALT-C - cd into the selected directory
+fzf-cd-widget() {
+ local cmd="${FZF_ALT_C_COMMAND:-"command find -L . -mindepth 1 \\( -path '*/\\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \\) -prune \
+ -o -type d -print 2> /dev/null | cut -b3-"}"
+ setopt localoptions pipefail no_aliases 2> /dev/null
+ local dir="$(eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore $FZF_DEFAULT_OPTS $FZF_ALT_C_OPTS" $(__fzfcmd) +m)"
+ if [[ -z "$dir" ]]; then
+ zle redisplay
+ return 0
+ fi
+ zle push-line # Clear buffer. Auto-restored on next prompt.
+ BUFFER="cd ${(q)dir}"
+ zle accept-line
+ local ret=$?
+ unset dir # ensure this doesn't end up appearing in prompt expansion
+ zle reset-prompt
+ return $ret
+}
+zle -N fzf-cd-widget
+bindkey '\ec' fzf-cd-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:-40%} $FZF_DEFAULT_OPTS -n2..,.. --tiebreak=index --bind=ctrl-r:toggle-sort,ctrl-z:ignore $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'
+}