Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: How to add a 'non-escaped' tilde to the completion list
On Mon, 2014-11-10 at 22:03 +0100, Oliver Kiddle wrote:
> Death Jester wrote:
> > The binding however was not the problem, but the type of
> > completion.
>
> Using menu completion is an improvement. You'll find that this now works
> on an empty word but fails when you have already typed a prefix (or
> suffix) of the directory.
>
> The problem with _generic is that _main_complete has special handling for
> tildes and equals. _history already works around this: you need to move
> the ~ back to $PREFIX from $IPREFIX.
>
> I've attached a fixed function that also has a replacement for the pidof
> that will work on Solaris. I think lsof can also be used on other
> platforms. Would be nice to support the BSDs. It may also be possible to
> better filter the processes: just those with a controlling tty perhaps?
>
> readlink is replaced by zsh's internal :A modifier and the current
> process is filtered out. It also enables partial completion for /
> and pattern matching so if you know that another shell is in a src
> directory, you can type *src and the widget will complete that to the
> right directory.
>
> > zstyle ':completion:term_list:*' completer _term_list
>
> I'd recommend changing that to the more specific
> zstyle ':completion:term_list::::' completer _term_list
>
> In at least my setup a different completer style would otherwise take
> precedence.
>
> > Btw, I'm not sure if "advertisement" is allowed here. I have submitted
> > the plugin to the oh-my-zsh project. But without any testers, they don't
> > want to merge it in to the mainline project. So if anybody is interested
> > you can test it... =)
>
> I'd have thought the function itself was something we could include in
> the main zsh distribution if people are agreeable? I'm not too sure on
> the name but am struggling to offer something better - foreign-pwds,
> external-pwds perhaps?
That would be awesome! I think a short name for 'external-pwds', like
'ext_pwds' sounds good to me...
>
> For omz, you might want to consider a different keystroke. Ctrl-V has
> an existing purpose that some people might not be pleased to have
> replaced.
Yes, of course. Unfortunately I don't have an overview what keys are
already bound to something. Ctrl+V seemed to be available. But I'm open
for other suggestions.
>
> Oliver
>
> #autoload
>
> local -a expl
> local -au dirs
>
> # undo work _main_complete did to remove the tilde
> PREFIX="$IPREFIX$PREFIX"
> IPREFIX=
> SUFFIX="$SUFFIX$ISUFFIX"
> ISUFFIX=
>
> [[ -o magicequalsubst ]] && compset -P '*='
>
> case $OSTYPE in
> solaris*) dirs=( ${(M)${${(f)"$(pgrep -U $UID -x zsh|xargs pwdx)"}:#$$:*}%%/*} ) ;;
> linux*) dirs=( /proc/${^$(pidof zsh):#$$}/cwd(N:A) ) ;;
> esac
> dirs=( ${(D)dirs} )
>
> compstate[pattern_match]='*'
> _wanted directories expl 'current directory from other shell' \
> compadd -M "r:|/=* r:|=*" -f -a dirs
I tested your new function on Linux (with version string: 'zsh 5.0.7
(x86_64-pc-linux-gnu)') and it works for me. I have also tested the
cases
1) The list is empty except the current shell (works -> no list only '~'
on commandline)
2) I start to type and then hit the completion button (works -> sublist
appears)
I have replaced the zstyle line as you suggested:
zle -C term_list menu-complete _generic
bindkey "^v" term_list
zstyle ':completion:term_list::::' completer _term_list
I neither have a BSD, nor a Solaris machine, so I can't test it for
Solaris, or implement it for BSD...
Thank you for your awesome help Peter and Oliver.
Cheers,
Julian
Messages sorted by:
Reverse Date,
Date,
Thread,
Author