41

I accidentally typed ctrl + L in terminal and my terminal window jumped one 'screenful' size. I looked at the keyboard shortcuts in "Edit"->"Keyboard shortcuts" and didn't find that shortcut.

What does ctrl + L do and where is it defined?

58

ctrl + L just clear the terminal screen.

It is the keyboard shortcut equivalent of the command clear -x. ref

It is property of bash, so you did not found it under keyboard shortcuts in your gnome-terminal. From man bash:

clear-screen (C-l)
          Clear the screen leaving the current line  at  the  top  of  the
          screen.   With  an  argument,  refresh  the current line without
          clearing the screen.

See a detail list of Bash Keyboard Shortcuts.

|improve this answer|||||
  • Oh, that explains it. – Parto Mar 14 '14 at 15:28
  • 3
    It's not just bash though; Ctrl-L is the form-feed character. It's not so common, but sometimes you'll see ^L in source code separating "pages" of code. It made more sense when a printer would interpret it as a control character. – Joshua Taylor Mar 14 '14 at 17:37
  • @JoshuaTaylor you are correct. Related wiki article on Page break – souravc Mar 14 '14 at 18:41
  • 1
    ^L is the form-feed character in the ascii table, but that doesn't do anything unless it is received by a program that treats it accordingly (either bash or the terminal emulator, in this context). – alexis Mar 15 '14 at 12:38
  • 1
    Note that it is not the equivalent of the default command clear, because it doesn't erase your terminal history, while the command clear does, unless you add the -x argument, like so: clear -x. – jirislav Apr 19 '19 at 19:10
18

If the shell you're using is not intercepting it, you are typing a "Form-feed" character in your terminal. If the terminal application does not intercept or use the keystroke in some way, Ctrl+Letter is translated to the ASCII code of the letter minus 64(1). 65 is the ASCII code of 'A', 'L' is the 12th letter -> code 76. If the shell does not know what to do of the code, it prints it.

Printing a FF char resulted in a new page on a line printer and a clear screen on the terminal (yes, I used a VT-52 back then, at 300 baud).

So Ctrl+L is 12 which is FF. In the same way, Ctrl+I is a TAB, and Ctrl+G rings the bell --- if the terminal or the shell does not intercept it, like Ctrl+C for example.

Notice from the other answer: it seems that bash do intercept CTRL-L and do a clear. Nice touch that the bash authors associated the key with a command which will do more or less the same that the ASCII code did on old terminals!

On the other hand, in my zsh the combination CTRL-I works as TAB and CTRL-H as a Backspace(2).

Old nice ASCII... (notice that letter L is at column 4, row 12, it has ASCII code 4*16+12=76).

Image from Wikimedia commons

Original Image here, from wikipedia article on ASCII.


Footnotes:

(1) Ctrl really used to clear the bit 7.

(2) this is the source of the "fail to remove word" joke you sometime find like for example "this was a bad^H^H^Hnot so nice idea"... (with normally a word stronger than bad!)

|improve this answer|||||
  • 1
    Nice. How do I use this chart by the way? I can see that letter L is at row 12 and column 4. Do I then just minus 32 from the 124 or how do you calculate the ASCII code? – Parto Mar 14 '14 at 15:35
  • @AvatarParto ups, wrote 32 instead of 65. Answer corrected. The table is binary, so the code is column*16+row. – Rmano Mar 14 '14 at 15:52
  • 1
    Inserting literal ^Hs or ^Ws is nice when you can't use strikethroughs. :) – Blacklight Shining Mar 14 '14 at 23:47
8

Control-L is intercepted and interpreted by bash (actually by the readline library, which handles interactive editing on the command line). It is bound to the clear-screen function, as @souravc wrote.

Note on the meaning of Control-L: It is defined as Form Feed in the ASCII character table, but this means nothing unless some program interprets it accordingly. The terminal does not clear the screen when it sees a form feed, as you can verify by by saving a ^L in a file and printing the file with cat. When bash/readline sees the ^L, it executes the clear-screen function. This sends a sequence of characters that is understood by your terminal emulator (as described by termcap or terminfo), and has the effect of clearing the screen.

In very old printers, a ^L would advance the paper start printing on the next sheet, hence the name "form feed". But modern terminals and terminal emulators follow a newer ANSI standard, in which control commands are multi-character "escape codes" that begin with ^[ (escape). When bash sees your ^L, it is probably sending the two-command sequence ESC [ H ESC [ J, which moves to the top left of the screen and clears everything below it (hence the whole screen).

|improve this answer|||||
  • Actually, the sequence ESC [ ESC [ J also clears the command history, whilst the CTRL + L sequence doesn't. The sequence sent to the terminal is rather ESC [ H ESC [ 2 J, go ahead an try it yourself with this command: printf "\033[H\033[2J". – jirislav Apr 19 '19 at 19:05
0

As everyone already explained pretty well what Ctrl+L is and does, but no one explained how to "reverse" the command, here a few commands you can type to get you back to what you were doing:

history

will give you the last 20 commands you typed.

tail --lines=20 /var/log/dpkg.log

will give you the last 20 lines of output of any package installation you were performing

|improve this answer|||||

Not the answer you're looking for? Browse other questions tagged or ask your own question.