Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Aug 2007 15:46:26 -0400
From:      Christopher Hilton <chris@vindaloo.com>
To:        "d.Z." <dz902i@gmail.com>
Cc:        Jerry McAllister <jerrymc@msu.edu>, freebsd-questions@freebsd.org, Derek Ragona <derek@computinginnovations.com>
Subject:   Re: Backspace
Message-ID:  <46C5FB12.1080202@vindaloo.com>
In-Reply-To: <3e34b6550708122345m44ef52edla4ea01b54f6c8afe@mail.gmail.com>
References:  <3e34b6550708112054u332f6760we3181393dbbdfe18@mail.gmail.com>	<6.0.0.22.2.20070812132652.026483b0@mail.computinginnovations.com>	<20070812233107.GA95837@gizmo.acns.msu.edu> <3e34b6550708122345m44ef52edla4ea01b54f6c8afe@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
d.Z. wrote:
> Thanks for helping everybody.
> 
> But actually I'm using Bourne shell on FreeBSD 6.1 just like the
> Solaris in lab, and the FreeBSD is freshly installed, I have checked
> .shrc and .profile, but nothing related to key bindings or stty's
> there, so what I thought it should be is:
> 
> after I login -> [press backspace] -> ^H appears -> [press DEL] -> ^? appears
> in emacs -> [press backspace] -> oops, help appears
> 

stty can translate a small set of keystrokes into functions and gets 
used by the shell. In stty you can set the erase character to Ctrl-H. 
The shell uses the stty definitions for the keys.

For historical reasons emacs uses it's own keybindings and they don't 
work well with the default keystrokes emitted by the syscons driver in 
FreeBSD. In particular emacs want's Ctrl-H to start the help system, "H" 
for help... But, CTRL-H is also the default ASCII code sent by the 
Backspace key. That's why backspace works fine in your shell and brings 
up help in emacs. There are at least three solutions to this problem.

In the distant past some old terminals sent the ASCII code DEL (^? , or 
0x7f) when the backspace key was pressed. Most modern terminals and 
terminal emulators can be setup to have this behaviour. In this case you 
can have stty use ^? as your erase character and have emacs respond to 
DEL by deleting the character before the point in the buffer. Then you 
can have FreeBSD send DEL when you press backspace by changing the keymap.

      $ man syscons
      $ man 1 kbdmap
      $ man 5 kbdmap
      $ ls -l /usr/share/syscons/keymaps | grep emacs

To make the change permanent you would modify /etc/rc.conf

      $ grep keymap /etc/defaults/rc.conf

will show you the variable you need to change.

Disclaimer: I've never done it this way.

Another method which involves changing the function of ^H in emacs but 
that makes it difficult to get the help system going. A short search of 
google for "emacs ^h backspace" will probably yield fruit. I used to do 
it this way and it was okay. I t really depends on how much you need the 
help system.

As a long time Gnu Emacs users I can say that the best way to solve this 
problem is to an X11 aware emacs under X-Windows. In this state emacs 
completely bypasses the terminal, catching and interpreting the 
keystroke events from the X window system. Since X can say 'The user 
pressed "KeyBackspace" which has an ASCII code of 0x08 (Ctrl-H)' emacs 
can see that as a Backspace attempt and delete the appropriate 
character. Further more X can differentiate that keypress from "The user 
pressed 'H' while holding down Ctrl which gives an ASCII code of 0x08". 
Emacs gets complete information from the X-Windows system and can take 
the right action, starting the help system.

-- Chris

-- 
       __o          "All I was doing was trying to get home from work."
     _`\<,_           -Rosa Parks
___(*)/_(*)___________________________________________________________
Christopher Sean Hilton                    <chris | at | vindaloo.com>
         pgp key: D0957A2D/f5 30 0a e1 55 76 9b 1f 47 0b 07 e9 75 0e 14



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46C5FB12.1080202>