NetBSD-Users archive

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

Re: That DEL key thing...



pl%szwajn.net@localhost (pl) writes:

>Why is DEL deletes characters from the left (making BackSpace redundant), while on X (from base) it behaves as expected (removes from right)? How can I make it behave as in X11?
>I know there's some historical background ongoing, but so far I know DEL removed chars from right since ever on IBM PC, so logical for me would be making such behaviour default at least on i386 and amd64 ports.
>If that's important: both DEL and BS generate same control key "^?"

Hmm.


A standard PC keyboard has a "Backarrow" key and a "Delete" key.

On a PS/2 keyboard:
The "Backarrow" key generates a scancode 14, mapped to symbol "Delete"
The "Delete" key generates a scancode 211, mapped to symbol "Delete"

On a USB keyboard:
The "Backarrow" key generates a usage code 42, mapped to symbol "Backspace".
The "Delete" key generates a usage code 76, mapped to symbol "Delete".

The console generates a "^H" for "Backspace" and a "^?" for "Delete".

There is no PS/2 key that would generate "Backspace", you can enter
a "^H" with "Ctrl"+"H".


X11 has its own mappings.

The "Backarrow" key generates a keycode 22, mapped to symbol "Backspace".
The "Delete" key generates a keycode 107, mapped to symbol "Delete".

xterm then(*) interprets the symbols and generates "^H" for "Backspace"
and "^[[3~" for Delete (unless you have configured "DEL is Delete",
then it generates a "^?").

(*) xterm tries to deduce that behaviour from other sources, in
particular the "ptyInitialErase" resource, data from the tty driver
(i.e. if canonical mode uses ^H or ^? as erase character) and the
termcap entry. Then it checks the backarrowKeyIsErase resource
to modify it further. And finally an application can modify the
behaviour using escape sequences and the user can switch using
a menu entry.

Other terminal programs use different, even more complex, methods
to map the key symbols to some character sequence.



The terminal driver has configured an 'erase' character, that is
used to remove the last character entered (i.e. the "backspace"
operation to delete left from the cursor). This should better
be the same as the character generated by the "Backarrow" key,
which can be a problem of its own.

Some programs (usually those that do line-editing themselves)
handle this themselves. They either copy the behaviour of the
terminal driver, or (like tmux) have a hardcoded behaviour,
or (like tcsh) accept "^H" and "^?" as equal.



The currently most common (but not the original) behaviour is
to make the "Backarrow" key generate "^H" and use that for the
erase operation, and since that is handled by the defaults almost
everywhere, I'm changing only the keyboard map if I have a PS/2
keyboard.

In /etc/rc.conf I set wscons=YES to enable the wsconsole. You
probably have that as default.

In /etc/wscons.conf I have added the following line:

setvar wskbd map+ \"keycode\ 14\ =\ Cmd_ResetEmul\ BackSpace\ Delete\"

This makes the "Backarrow" key (code 14) generate a "^H" on the
console and "Shift" + "Backarrow" generates a "^?".


Greetings


Home | Main Index | Thread Index | Old Index