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

Re: Interactive program in Zsh



    Hi Bart :)

 * Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> dixit:
> >     I don't know if this is the proper approach for what I need to
> > do: the user is limited to use up arrow and down arrow for travelling
> > into the list of options (maybe pg-up and pg-down for scrolling) and
> > 'enter' to select the highlighted option. The program must process a
> > text, present a list of options containing the text that matched
> > certain regex and allow the user to choose one of the options.
> I would say the canonical way to do this is using a "select x in ..."  
> loop -- "select" already being clever enough these days to paginate its
> list of choices -- but that doesn't allow the user to scroll up and down
> with arrow keys.  (I think that's only because the history is disabled,
> as it uses the default keymaps.)

    And doesn't let me implement the navigation... I mean, I can use
'select', no problem, and that will do since it will present me the
list of choices, but I would like to do the navigation too, and
selects doesn't allow me to do that, since it reads from the keyboard
and does it's own output formatting (not configurable AFAIK).

> Or you could stuff the list of options into the history with "print -s"  
> and then use "vared -h" to let the user choose one, but then they aren't
> actually navigating through the list, just displaying them each in turn.
> Maybe that would be good enough, combined with first printing out the
> entire list, except then you run into pagination issues.  You'll have to
> play with key bindings to keep the user from modifying the choices --
> that'd be easier in recent zsh that let you redefine the whole keymap.

    Nice, but very complex if I need to modify the whole keymap. For
me would be easy to do the 'print -s', but instead of the list I will
print into the history the command to run the chosen option followed
by each option. Something like:

    command option1 
    command option2
    ...

    Don't know, very... ugly.
 
> Also in 4.2.x you might be able to do something with zle-line-init to
> start up one of the widgets (previously posted) that invoke menu selection
> on the history, which would then be pretty nearly what you asked for.

    That would be nice, too, but limited to zsh 4.2.x No problem for
me, but I would like to have this running at least in 4.0.x too.

    Anyway, I think I will use the 'select' way (I will rarely need
more than 20-30 options, and 'select' fills the lines beautifully) or
maybe I will try my first solution, using the key codes or bindkey to
get the mappings. The problem with that last solution is the speed:
slow and weird screen refreshing, etc. In addition to this, 'read -k',
when used with keys that generates multiple characters (an escape
sequence, for example), will read each character separately, so I
must assemble the individual chars and process the result. Very
complex...

    BTW, what I want to do is something like urlview, but with
multiple regexes each handled by a different handler. Currently it
can be done (but in a very ugly way) using a very BIG regex and using
url_handler.sh to do the discrimination, or maybe with multiple
configuration files, etc. Or even rewriting it (which I certainly
won't do!). But the point is that I would like to do with zsh just
for the sake of it, because I want, for learning O:)

    Thanks a lot for your help :) I'll try the 'select' way, for now.

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736
http://www.pleyades.net & http://raul.pleyades.net/



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