[haskeline] #99: Define key bindings in terms of commands rather than other keys

haskeline haskeline at projects.haskell.org
Tue Sep 15 13:13:48 EDT 2009


#99: Define key bindings in terms of commands rather than other keys
------------------------+---------------------------------------------------
Reporter:  korpios      |        Owner:     
    Type:  enhancement  |       Status:  new
Priority:  major        |    Milestone:     
 Version:               |   Resolution:     
Keywords:               |  
------------------------+---------------------------------------------------
Old description:

> Right now, haskeline defines key bindings in terms of other keys; this is
> quite confusing compared to other key binding system which define
> bindings in terms of particular commands.
>
> For instance, if a user wanted `meta-j` to go back one character,
> haskeline expects you to define it in terms of `ctrl-b` rather than a
> command like `backward-char`.  Furthermore, the current system actually
> changes the meaning of your bindings depending on which binding style you
> are using; `ctrl-r` may suddenly change meaning from "search backwards"
> to "redo" if you switch from emacs to vi style.
>
> It would be much easier to define a non-trivial `~/.haskeline` file like
> so:
> {{{
> bind: ctrl-r backward-char
> bind: ctrl-s forward-char
> bind: ctrl-b backward-search
> bind: ctrl-f forward-search
> }}}
> ...than the current case:
> {{{
> bind: ctrl-r ctrl-b
> bind: ctrl-s ctrl-f
> bind: ctrl-b ctrl-r
> bind: ctrl-f ctrl-s
> }}}
> It is immediately clear what the former is doing, and not at all clear
> what the latter is.  I certainly wouldn't want to puzzle out a
> `~.haskeline` file with several dozen bindings as the system currently
> stands.

New description:

 Right now, haskeline defines key bindings in terms of other keys; this is
 quite confusing compared to other key binding system which define bindings
 in terms of particular commands.

 For instance, if a user wanted `meta-j` to go back one character,
 haskeline expects you to define it in terms of `ctrl-b` rather than a
 command like `backward-char`.  Furthermore, the current system actually
 changes the meaning of your bindings depending on which binding style you
 are using; `ctrl-r` may suddenly change meaning from "search backwards" to
 "redo" if you switch from emacs to vi style.

 It would be much easier to define a non-trivial `~/.haskeline` file like
 so:
 {{{
 bind: ctrl-r backward-char
 bind: ctrl-s forward-char
 bind: ctrl-b backward-search
 bind: ctrl-f forward-search
 }}}
 ...than the current case:
 {{{
 bind: ctrl-r ctrl-b
 bind: ctrl-s ctrl-f
 bind: ctrl-b ctrl-r
 bind: ctrl-f ctrl-s
 }}}
 It is immediately clear what the former is doing, and not at all clear
 what the latter is.  I certainly wouldn't want to puzzle out a
 `~/.haskeline` file with several dozen bindings as the system currently
 stands.

Comment (by korpios):

 (fix typo in description)

-- 
Ticket URL: <http://trac.haskell.org/haskeline/ticket/99#comment:2>
haskeline <http://example.org/>
My example project


More information about the Haskeline mailing list