zsh-users
 help / color / mirror / code / Atom feed
From: Death Jester <d3ath.jest3r@gmail.com>
To: Oliver Kiddle <okiddle@yahoo.co.uk>
Cc: zsh-users@zsh.org
Subject: Re: How to add a 'non-escaped' tilde to the completion list
Date: Tue, 11 Nov 2014 11:17:37 +0100	[thread overview]
Message-ID: <1415701057.1247.1.camel@gmail.com> (raw)
In-Reply-To: <17517.1415653425@thecus.kiddle.eu>

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


  reply	other threads:[~2014-11-11 10:17 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-10 11:07 Death Jester
2014-11-10 11:31 ` Peter Stephenson
2014-11-10 12:18   ` Peter Stephenson
2014-11-10 13:21     ` Death Jester
2014-11-10 13:42       ` Peter Stephenson
2014-11-10 13:57       ` Oliver Kiddle
2014-11-10 15:32         ` Death Jester
2014-11-10 21:03           ` Oliver Kiddle
2014-11-11 10:17             ` Death Jester [this message]
2014-11-11 21:40             ` Jan Larres
2014-11-10 12:54   ` Death Jester

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1415701057.1247.1.camel@gmail.com \
    --to=d3ath.jest3r@gmail.com \
    --cc=okiddle@yahoo.co.uk \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).