From f6b3fc84d192274f245a7322c3994767c5e68691 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 20:48:54 +0200 Subject: [PATCH] feat(wd): update to version v0.7.0 (#12436) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/README.md | 15 ++++++- plugins/wd/_wd.sh | 4 ++ plugins/wd/wd.plugin.zsh | 9 +++-- plugins/wd/wd.sh | 87 ++++++++++++++++++++++++++++++++-------- 5 files changed, 95 insertions(+), 22 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 6ae97ad4e..d3b269361 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -39,7 +39,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.6.1 + version: tag:v0.7.0 precopy: | set -e rm -r test diff --git a/plugins/wd/README.md b/plugins/wd/README.md index 0c71c0565..bf19031f8 100644 --- a/plugins/wd/README.md +++ b/plugins/wd/README.md @@ -142,7 +142,7 @@ rm -f ~/.zcompdump; compinit If you want to make use of the `fzf`-powered browse feature to fuzzy search through all your warp points, set up a keybind in your `.zshrc`: ```zsh -bindkey '^G' wd_browse +bindkey ${FZF_WD_BINDKEY:-'^B'} fuzzy_wd_widget ``` ## Usage @@ -158,6 +158,19 @@ If a warp point with the same name exists, use `wd add foo --force` to overwrite **Note:** a warp point cannot contain colons, or consist of only spaces and dots. The first will conflict in how `wd` stores the warp points, and the second will conflict with other features, as below. +* Add warp point to any directory with default name: + +```zsh +wd addcd /foo/ bar +``` + +* Add warp point to any directory with a custom name: + +```zsh +wd addcd /foo/ +``` + + You can omit point name to automatically use the current directory's name instead. * From any directory, warp to `foo` with: diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh index 52ecb12e6..46b032f78 100644 --- a/plugins/wd/_wd.sh +++ b/plugins/wd/_wd.sh @@ -31,6 +31,7 @@ function _wd() { commands=( 'add:Adds the current working directory to your warp points' + 'addcd:Adds a directory to your warp points' 'add!:Overwrites existing warp point' 'export:Export warp points as static named directories' 'rm:Removes the given warp point' @@ -63,6 +64,9 @@ function _wd() { add) _message 'Write the name of your warp point' && ret=0 ;; + addcd) + _message 'Write the name of your path' && ret=0 + ;; show) _describe -t points "Warp points" warp_points && ret=0 ;; diff --git a/plugins/wd/wd.plugin.zsh b/plugins/wd/wd.plugin.zsh index 9e0c7ff13..9910cb968 100644 --- a/plugins/wd/wd.plugin.zsh +++ b/plugins/wd/wd.plugin.zsh @@ -14,7 +14,8 @@ eval "wd() { source '${0:A:h}/wd.sh' }" wd > /dev/null -# Register the function as a Zsh widget -zle -N wd_browse -# Bind the widget to a key combination -bindkey '^G' wd_browse +zle -N wd_browse_widget +zle -N wd_restore_buffer +autoload -Uz add-zle-hook-widget +add-zle-hook-widget line-init wd_restore_buffer +bindkey ${FZF_WD_BINDKEY:-'^B'} wd_browse_widget diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index c4f422cbf..160ab3be3 100755 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -8,7 +8,7 @@ # @github.com/mfaerevaag/wd # version -readonly WD_VERSION=0.6.1 +readonly WD_VERSION=0.7.0 # colors readonly WD_BLUE="\033[96m" @@ -59,7 +59,7 @@ wd_print_msg() then local color="${1:-$WD_BLUE}" # Default to blue if no color is provided local msg="$2" - + if [[ -z "$msg" ]]; then print "${WD_RED}*${WD_NOC} Could not print message. Sorry!" else @@ -74,18 +74,20 @@ wd_print_usage() Usage: wd [command] [point] Commands: - Warps to the directory specified by the warp point - Warps to the directory specified by the warp point with path appended - add Adds the current working directory to your warp points - add Adds the current working directory to your warp points with current directory's name - rm Removes the given warp point - rm Removes the given warp point with current directory's name - show Print path to given warp point - show Print warp points to current directory - list Print all stored warp points - ls Show files from given warp point (ls) - path Show the path to given warp point (pwd) - clean Remove points warping to nonexistent directories (will prompt unless --force is used) + Warps to the directory specified by the warp point + Warps to the directory specified by the warp point with path appended + add Adds the current working directory to your warp points + add Adds the current working directory to your warp points with current directory's name + addcd Adds a path to your warp points with the directory's name + addcd Adds a path to your warp points with a custom name + rm Removes the given warp point + rm Removes the given warp point with current directory's name + show Print path to given warp point + show Print warp points to current directory + list Print all stored warp points + ls Show files from given warp point (ls) + path Show the path to given warp point (pwd) + clean Remove points warping to nonexistent directories (will prompt unless --force is used) -v | --version Print version -d | --debug Exit after execution with exit codes (for testing) @@ -203,6 +205,28 @@ wd_add() fi } +wd_addcd() { + local folder="$1" + local point=$2 + local force=$3 + local currentdir=$PWD + + if [[ -z "$folder" ]]; then + wd_exit_fail "You must specify a path" + return + fi + + if [[ ! -d "$folder" ]]; then + wd_exit_fail "The directory does not exist" + return + fi + + cd "$folder" || return + wd_add "$point" "$force" + cd "$currentdir" || return +} + + wd_remove() { local point_list=$1 @@ -235,7 +259,15 @@ wd_browse() { return 1 fi local entries=("${(@f)$(sed "s:${HOME}:~:g" "$WD_CONFIG" | awk -F ':' '{print $1 " -> " $2}')}") - local selected_entry=$(printf '%s\n' "${entries[@]}" | fzf --height 40% --reverse) + local script_path="${${(%):-%x}:h}" + local wd_remove_output=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") + local entries_with_headers=("All warp points:" "Press enter to select. Press delete to remove" "${entries[@]}") + local fzf_bind="delete:execute(echo {} | awk -F ' -> ' '{print \$1}' | xargs -I {} "$script_path/wd.sh" rm {} > "$wd_remove_output")+abort" + local fzf_command=$(printf '%s\n' "${entries_with_headers[@]}" | fzf --height 100% --reverse --header-lines=2 --bind="$fzf_bind") + if [[ -e $wd_remove_output ]]; then + cat "$wd_remove_output" + rm "$wd_remove_output" + fi if [[ -n $selected_entry ]]; then local selected_point="${selected_entry%% ->*}" selected_point=$(echo "$selected_point" | xargs) @@ -243,6 +275,24 @@ wd_browse() { fi } +wd_browse_widget() { + if [[ -e $WD_CONFIG ]]; then + wd_browse + saved_buffer=$BUFFER + saved_cursor=$CURSOR + BUFFER= + zle redisplay + zle accept-line + fi +} + +wd_restore_buffer() { + BUFFER=$saved_buffer + CURSOR=$saved_cursor + saved_buffer= + saved_cursor=1 +} + wd_list_all() { wd_print_msg "$WD_BLUE" "All warp points:" @@ -371,7 +421,7 @@ wd_export_static_named_directories() { fi } -local WD_CONFIG=${WD_CONFIG:-$HOME/.warprc} +WD_CONFIG=${WD_CONFIG:-$HOME/.warprc} local WD_QUIET=0 local WD_EXIT_CODE=0 local WD_DEBUG=0 @@ -455,6 +505,10 @@ else wd_browse break ;; + "-c"|"--addcd"|"addcd") + wd_addcd "$2" "$3" "$wd_force_mode" + break + ;; "-e"|"export") wd_export_static_named_directories break @@ -510,6 +564,7 @@ fi unset wd_extglob_is_set unset wd_warp unset wd_add +unset wd_addcd unset wd_remove unset wd_show unset wd_list_all