Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [RFC][PATCH] Add change-directory() widget function



> +++ b/Doc/Zsh/contrib.yo
> @@ -2423,6 +2423,21 @@ history is restricted, so cursor motions, etc., may not pass outside of
>  the pasted content.  Text assigned to tt(BUFFER) by the active widgets
>  is copied back into tt(PASTED) before tt(paste-finish).
>  )
> +tindex(change-directory)
> +item(tt(change-directory))(
> +This function implements the widgets tt(cd-upward), tt(cd-backward) and
> +tt(cd-forward).  They can be used, respectively, to change to the current
> +directory's parent or the previous/next entry in the directory stack. They
> +should be initialized as follows:
> +
> +example(autoload -Uz change-directory
> +zle -N cd-upward   change-directory
> +zle -N cd-backward change-directory
> +zle -N cd-forward  change-directory
> +bindkey '^[^[OA' cd-upward    # Alt-Up
> +bindkey '^[^[OD' cd-backward  # Alt-Left
> +bindkey '^[^[OC' cd-forward   # Alt-Right

s/Right/Right)/

> +)
>  tindex(copy-earlier-word)
>  item(tt(copy-earlier-word))(
>  This widget works like a combination of tt(insert-last-word) and
> diff --git a/Functions/Zle/change-directory b/Functions/Zle/change-directory
> new file mode 100644
> index 000000000..376e4414c
> --- /dev/null
> +++ b/Functions/Zle/change-directory
> @@ -0,0 +1,29 @@
> +zle .push-line-or-edit
> +case $WIDGET in
> +  *-upward )
> +    if [[ -o autocd ]]; then
> +      BUFFER='..'
> +    else
> +      BUFFER='cd ..'
> +    fi
> +    ;;
> +  *-backward )
> +    if [[ -o pushdminus ]]; then
> +      BUFFER='pushd -1'
> +    else
> +      BUFFER='pushd +1'
> +    fi
> +    ;;
> +  *-forward )
> +    if [[ -o pushdminus ]]; then
> +      BUFFER='pushd +0'
> +    else
> +      BUFFER='pushd -0'
> +    fi
> +    ;;
> +  * )
> +    print -u2 'change-directory: widget name should end in -(up|back|for)ward'

Suggest to add a detail:

       print -u2 $'change-directory: widget name should end in -(up|back|for)ward; review the \'zle -N ... change-directory\' commands in your configuration'

And to remove an implementation detail:

       print -u2 $'change-directory: widget name should be cd-(up|back|for)ward; review the \'zle -N ... change-directory\' commands in your configuration'

And to avoid (foo|bar|baz) constructs — not for greppability reasons as
requested in 48402#13[48408] and again in 48632, but for
user-friendliness reasons (cf. my feedback to Sebastian back in
[workers/45149, second bullet]):

       print -u2 $'change-directory: widget name should be "cd-upward", "cd-backward", or "cd-downward"; review the \'zle -N ... change-directory\' commands in your configuration'

> +    return 1
> +    ;;
> +esac
> +zle .accept-line
> -- 
> 2.31.1
> 

> 
> 





Messages sorted by: Reverse Date, Date, Thread, Author