Obnoxious postings from Google Groups

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Nov 6 19:13:47 EST 2012


On Tue, 06 Nov 2012 23:08:11 +0000, Prasad, Ramit wrote:

> Steven D'Aprano wrote:
>> 
>> On Tue, 06 Nov 2012 17:16:44 +0000, Prasad, Ramit wrote:
>> 
>> >> To enter the newline, I typed Ctrl-Q to tell bash to treat the next
>> >> character as a literal, and then typed Ctrl-J to get a newline.
>> >
>> > That sounds complicated, my version of bash lets me type
>> > 'foo<enter>bar'<enter> for the same effect.
>> 
>> Well, I learned something new about bash.
>> 
>> On the other hand, the Ctrl-Q next-char-is-literal trick works for
>> entering control characters that otherwise don't have a key on the
>> keyboard.
>> 
>> 
> Would you mind elaborating on how this works? I know it's not a bash
> list, but I do not understand how ctrl-J is considered a literal.
> Obviously, I must have a different definition of "literal". Where can I
> find a list of other literals? My Google-fu is being weak today. :(

I'm not an expert, so the following may not be exactly correct. As I 
understand it, when you hit a key on the keyboard, it sends the character 
you typed to the operating system. (The OS can then remap keys, generate 
keyboard events including a timestamp, etc.)

Hit the J key, and the event includes character "j". Hit Shift-J, and 
character "J" is sent. Hit Ctrl-J, and the character sent is the ASCII 
control character ^J, or newline. (Technically, the name for ASCII 10 is 
"linefeed" rather than "newline".)

Similarly, other control character combinations send other control codes:

^A = ASCII 0x01 Start Of Heading
^L = ASCII 0xFF Formfeed \f
^M = ASCII 0x0D Carriage Return \r

etc.

http://en.wikipedia.org/wiki/C0_and_C1_control_codes


When readline is enabled in bash, one of the standard editing commands is 
that C-q (usually ctrl-Q on the keyboard) instructs readline to treat the 
next key as a literal. So Ctrl-Q followed by Backspace won't delete the 
previous character, but insert a literal DEL 0x7F character. 

(One of those historical quirks is that on most(?) keyboards, the 
Backspace key generates a DEL character rather than the ^H backspace 
control code, and the Delete key generates an escape sequence. Go figure.)


-- 
Steven



More information about the Python-list mailing list