zsh-workers
 help / color / mirror / code / Atom feed
From: joe M <joe9mail@gmail.com>
To: zsh-workers@zsh.org
Subject: Re: auto list choices
Date: Fri, 8 Mar 2013 10:48:18 -0500	[thread overview]
Message-ID: <CAHjjW16220P5ZTGvaw=vwJ8vRVerh2RPANU=NrT6p=6v5GnjaQ@mail.gmail.com> (raw)
In-Reply-To: <CAHjjW15L5EOHMKpNgYX4o8Gbugpxxhr3zsAYqbevpNyGin4dkA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 105 bytes --]

Hello,

This code does a list-choices on every self-insert. Might be of
interest to someone.

Thanks
Joe

[-- Attachment #2: 80-auto-list-choices.zsh --]
[-- Type: application/octet-stream, Size: 3047 bytes --]

# basde on
#  incremental completion for zsh
#  by y.fujii <y-fujii at mimosa-pudica.net>, public domain

zle -N self-insert self-insert-incr
# zle -N vi-backward-delete-char-incr

# bindkey -M viins '^h' vi-backward-delete-char-incr
# bindkey -M viins '^?' vi-backward-delete-char-incr

# to increase the incr-0.2 max matches
export INCR_MAX_MATCHES=60

# function limit-completion () {
#    if ((compstate[nmatches] <= 1)); then
#       zle -M ""
#    elif ((compstate[list_lines] > ${INCR_MAX_MATCHES:-20})); then
#       compstate[list]=""
#       zle -M "too many matches."
#    fi
# }
function limit-completion () {
   # got the line comparing with LINES from
   #  /usr/share/zsh/5.0.2/functions/Zle/incremental-complete-word
   if ((compstate[list_lines] > ${INCR_MAX_MATCHES:-20} \
        || compstate[list_lines]+BUFFERLINES+2 > LINES))
   then
      compstate[list]=''
      zle -M "too many matches."
   fi
}

function self-insert-incr () {
   if zle .self-insert; then
      show-choices
      # complete-word-incr
   fi
}

function vi-backward-delete-char-incr () {
   if zle vi-backward-delete-char; then
      show-choices
      # complete-word-incr
   fi
}

function show-choices () {
   # local cursor_org
   # local buffer_org
   # local cursor_now
   # local buffer_now
   # cursor_org="$CURSOR"
   # buffer_org="$BUFFER"
   # if [[ "$BUFFER[1]" != "!" ]]
   # echo $widgets[list-choices]
   #  user:_zsh_highlight_widget_list-choices
   # mv 91-history-substring-search.zsh \
   #     91-history-substring-search.zsh.disable
   # rm 90-syntax.zsh
   # echo $widgets[list-choices]
   #  completion:.list-choices:_main_complete
   # compinit is redirecting list-choices to _main_complete
   #  and the _normal called by _main_complete is doing a
   #  bang expansion as soon as it sees a ! in the string
   #  Hence, do not call list-choices if there is a ! in that line
   #  or, instead of filtering $BUFFER on !, unsetopt BANG_HIST
   #  as list-choices is checking on BANG_HIST before expanding
   #  the !.
   # if [[ "$BUFFER" != *\!* && \
   unsetopt localoptions BANG_HIST
   # do not list-choices if it is a paste, pending > 0 in such cases
   # do not list-choices if editing in the middle of a word
   if [[ "$PENDING" -eq 0  && \
         ( -z "$RBUFFER" || "$RBUFFER[1]" == ' ' )
         ]]
   then
      comppostfuncs=(limit-completion)
      zle list-choices
   fi
   # cursor_now="$CURSOR"
   # buffer_now="$BUFFER"
}

function complete-word-incr () {
   local cursor_org
   local buffer_org
   local cursor_now
   local buffer_now
   local lbuffer_now
   cursor_org="$CURSOR"
   buffer_org="$BUFFER"
   comppostfuncs=(limit-completion)
   zle complete-word
   cursor_now="$CURSOR"
   buffer_now="$BUFFER"
   lbuffer_now="$LBUFFER"
   # if [ "$cursor_now" -gt "$cursor_org" \
   #    -a "$buffer_org[1,cursor_org]" == "$buffer_now[1,cursor_org]" \
   #    -a "$lbuffer_now[-1]" == " " ]
   # then
   #    CURSOR="$cursor_org"
   # fi
}

# vim: set filetype=zsh shiftwidth=3 tabstop=3 expandtab fileformat=unix

  reply	other threads:[~2013-03-08 15:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-07  3:57 joe M
2013-03-07  4:23 ` joe M
2013-03-07  4:35   ` joe M
2013-03-08 15:48     ` joe M [this message]
2013-03-09 15:25       ` Bart Schaefer
2013-03-10  5:45         ` joe M
2013-03-10 18:23           ` Bart Schaefer

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='CAHjjW16220P5ZTGvaw=vwJ8vRVerh2RPANU=NrT6p=6v5GnjaQ@mail.gmail.com' \
    --to=joe9mail@gmail.com \
    --cc=zsh-workers@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).