From ac5b94f4663568640fd9a06033ff3a8c64b0a809 Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Mon, 26 Aug 2019 08:54:05 +0200 Subject: zshrc: Add project cd hotkey Signed-off-by: Florian Pritz --- .zshrc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.zshrc b/.zshrc index ab08cc3..0e45a81 100644 --- a/.zshrc +++ b/.zshrc @@ -281,6 +281,38 @@ fzf-hosts-widget() { return $ret } +__fproject() { + local startdir="$PWD" + if git rev-parse --show-toplevel &>/dev/null; then + startdir=$(git rev-parse --show-toplevel) + elif [[ $PWD == $HOME ]]; then + startdir="$HOME/projects" + fi + + find "$startdir" -type d -not \( \( -path '*/vendor' -or -path '*/.git' \) -prune \) | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS" $(__fzfcmd) -m "$@" | while read item; do + echo -n "${(q)item}" + done + local ret=$? + echo + return $ret +} + +fzf-projects-widget() { + local _dir=$(__fproject) + local ret=$? + if [[ "$_dir" == *"'"* ]] || [[ "$_dir" == "" ]]; then + printf "%s\n" "ERROR: Invalid dir name for widget: '$_dir'" >&2 + zle reset-prompt + return 1 + fi + + zle push-line + LBUFFER="cd '${_dir}'" + zle accept-line + zle reset-prompt + return $ret +} + if type fzf &>/dev/null; then zle -N fzf-history-widget bindkey '^R' fzf-history-widget @@ -288,6 +320,8 @@ if type fzf &>/dev/null; then bindkey '^T' fzf-file-widget zle -N fzf-hosts-widget bindkey '^H' fzf-hosts-widget + zle -N fzf-projects-widget + bindkey '^P' fzf-projects-widget fi # }}} -- cgit v1.2.3-24-g4f1b