bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: readline: How to unbind _all_ keys


From: Chet Ramey
Subject: Re: readline: How to unbind _all_ keys
Date: Wed, 22 May 2019 11:38:42 -0400
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

On 5/21/19 5:33 PM, Dennis Williamson wrote:
> On Tue, May 21, 2019 at 3:04 AM Henning <address@hidden> wrote:
> 
>> On 20/05/2019 15:38, Chet Ramey wrote:
>>> On 5/19/19 10:43 AM, Henning wrote:
>>>> I don't like to have dozens of key bindings I never use. Currently I
>>>> am issuing lots of lots of bind -r/-u commands to get rid of the
>>>> default bindings. This slows down console startup unnecessarily.
>>>>
>>>> I would really like to have an inputrc command like $removeall or
>>>> something like bind -r/-u all.
>>>> Or is there something undocumented for this purpose?
>>>
>>> There is not, and I don't see much point to adding one. If you want to
>>> remove the bindings for all keys, something like this should work:
>>
>> Sorry, the subject of my mail should have been "... all non-self-insert
>> kes.
>>
>>>
>>> for ((f=0; f < 256; f++ ))
>>> do
>>>       bind -r \\$(printf "%03o" $f)
>>> done
>>>
>>
>> smiling ...
>>
>> The following variant does what I want:
>>
>>         K=( ' ' ! '\"' \# $ % \& \' \( \) \*  +   ,   -  .  /
>>              0  1   2   3 4 5  6  7  8  9  : \;  \<   = \> \?
>>              @  A   B   C D E  F  G  H  I  J  K   L   M  N  O
>>              P  Q   R   S T U  V  W  X  Y  Z \[ '\\' \]  ^  _
>>             \`  a   b   c d e  f  g  h  i  j  k   l   m  n  o
>>              p  q   r   s t u  v  w  x  y  z \{  \|  \} \~     )
>>
>>         for ((k=0; k<95; k++)); do
>>             bind -r "\e${K[k]}"
>>             bind -r "\e\C-${K[k]}"
>>             bind -r "\C-x\C-${K[k]}"
>>             bind -r "\C-x${K[k]}"
>>             bind -r "\C-${K[k]}"
>>         done
>>
>>         for k in O{A,B,C,D,H,F} \\e [200; do
>>             bind -r "\e$k"
>>         done
>>
>>         bind -f /0/e/inputrc
>>
>>         unset k K
>>
>> But this means nearly 500 bind -r commands. And that was the reason for
>> my original mail, the question, if there is a less expensive way to get
>> what I want.
>>
>> And another problem: after removing all \C-x sequences I used bind -x
>> to bind a shell command to \C-x proper. The result, when hitting \C-x,
>> is the following error message:
>>
>>         bash_execute_unix_command: cannot find keymap for command
>>
>> Using a sequence other than \C-x works as expected.
>> My guess is that \C-x can't be used alone. And that this can only be
>> changed in the source code.
>>
>> Henning
>>
>>
>>
> Why don't you unbind the keystrokes that are actually bound?
> 
> while read -r b; do bind -r "$b"; done < <(bind -p | awk -F ':' '/./
> && !/self-insert|accept-line|^#/ {gsub("\"", "", $1); print $1}')
> 
> On my system, that takes 0.011 seconds to run and it's not iterating
> through a bunch of key sequences that aren't there.
> 
> It does seem to leave behind a few, some of which match cchars (control
> characters) in stty -a
> 
> "\C-?": backward-delete-char
> "\C-v": quoted-insert


> "\C-u": unix-line-discard
> "\C-w": unix-word-rubout

These are all auto-bound to their stty equivalents, which is controlled by
the `bind-tty-special-chars' variable.

There is a problem with attempting to unbind "\C-@", since that translates
to 0. I'll fix that today.

I don't see any problem attempting to unbind "\e " (or "\M- " if you have
the right variables set to translate the meta prefix to ESC).

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    address@hidden    http://tiswww.cwru.edu/~chet/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]