Ctrl + L no terminal

41

Digitei acidentalmente ctrl+ Lno terminal e minha janela do terminal saltou para um tamanho de "tela cheia". Eu olhei para os atalhos de teclado em "Editar" -> "Atalhos de teclado" e não encontrei esse atalho.

O que ctrl+ Lfaz e onde é definido?

Parto
fonte

Respostas:

58

ctrl+ Llimpe a tela do terminal.

É o atalho de teclado equivalente ao comando clear -x. ref

É propriedade de bash, portanto você não o encontrou sob atalhos de teclado no seu terminal gnome. De 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.

Veja uma lista detalhada de atalhos do teclado Bash .

souravc
fonte
Oh, isso explica isso.
Parto 14/03
3
Não é apenas uma festa; Ctrl-L é o caractere de alimentação de formulário. Não é tão comum, mas às vezes você verá ^ L no código fonte separando "páginas" do código. Fazia mais sentido quando uma impressora o interpretaria como um caractere de controle.
21414 Joshua Taylor
@JoshuaTaylor você está correto. Artigo wiki relacionado no Page break
souravc 14/03
1
^ L é o caractere de alimentação de formulário na tabela ascii, mas isso não faz nada, a menos que seja recebido por um programa que o trate de acordo (nesse caso, o bash ou o emulador de terminal).
22414 alexis
1
Note que não é o equivalente do comando padrão clear, porque não apagar seu histórico de terminal, enquanto o comando clearfaz, a menos que você adicione o -xargumento, assim: clear -x.
jirislav 19/04
18

Se o shell que você está usando não estiver interceptando, você está digitando um caractere "Form-feed" no seu terminal. Se o aplicativo do terminal não interceptar ou usar o pressionamento de tecla de alguma maneira, Ctrl+ Letter será traduzida para o código ASCII da letra menos 64 (1). 65 é o código ASCII de 'A', 'L' é a 12ª letra -> código 76. Se o shell não souber o que fazer com o código, ele o imprimirá.

A impressão de um char FF resultou em uma nova página em uma impressora de linha e uma tela nítida no terminal (sim, eu usei um VT-52 naquela época, a 300 baud).

Então Ctrl+ Lé 12, que é FF. Da mesma forma, Ctrl+ Ié uma TAB e Ctrl+ Gtoca a campainha --- se o terminal ou o shell não a interceptar, como Ctrl+ Cpor exemplo.

Comunicação da outra resposta: parece que o bash fazer interceptação CTRL- Le fazer um clear. Bom toque que os bashautores associaram a chave a um comando que fará mais ou menos o mesmo que o código ASCII fazia nos terminais antigos!

Por outro lado, na minha zshcombinação CTRL- Ifunciona como TABe CTRL- Hcomo um Backspace(2).

Antigo e agradável ASCII ... (observe que a letra L está na coluna 4, linha 12, tem o código ASCII 4 * 16 + 12 = 76).

Imagem de Wikimedia commons

Imagem original aqui , do artigo da wikipedia sobre ASCII .


Notas de rodapé:

(1) Ctrlrealmente usado para limpar o bit 7.

(2) esta é a fonte da piada "falha ao remover a palavra" que você encontra em algum momento como, por exemplo, "essa foi uma péssima idéia ... H ^ H ^ não é uma idéia tão boa" ... (normalmente uma palavra mais forte do que ruim!)

Rmano
fonte
1
Agradável. Como uso esse gráfico a propósito? Percebo que a letra L está na linha 12 e na coluna 4. Então, menos 32 do 124 ou como você calcula o código ASCII?
Parto 14/03
@AvatarParto ups, escreveu 32 em vez de 65. Resposta corrigida. A tabela é binária, portanto, o código é coluna * 16 + linha.
Rmano 14/03
1
Inserir ^Hs ou s literais ^Wé bom quando você não pode usar rasuras. :)
Blacklight Shining
8

Control-Lé interceptado e interpretado pelo bash (na verdade pela readlinebiblioteca , que lida com a edição interativa na linha de comando). Está vinculado à clear-screenfunção, como escreveu @souravc.

Nota sobre o significado de Control-L: Ele é definido como Alimentação de formulário na tabela de caracteres ASCII, mas isso não significa nada, a menos que algum programa o interprete adequadamente. O terminal não limpa a tela quando vê um feed de formulário, como você pode verificar salvando um ^ L em um arquivo e imprimindo-o com cat. Quando bash/readlinevê o ^L, ele executa a clear-screenfunção. Isso envia uma sequência de caracteres que é entendida pelo emulador de terminal (conforme descrito por termcap ou terminfo) e tem o efeito de limpar a tela.

Em impressoras muito antigas, a ^Ladiantaria o início do papel na próxima folha, daí o nome "alimentação de formulário". Porém, terminais modernos e emuladores de terminal seguem um padrão ANSI mais recente, no qual os comandos de controle são "códigos de escape" de vários caracteres que começam com ^[(escape). Quando o bash vê o seu ^L, provavelmente está enviando a sequência de dois comandos ESC [ H ESC [ J, que se move para o canto superior esquerdo da tela e limpa tudo abaixo dela (daí a tela inteira).

alexis
fonte
Na verdade, a sequência ESC [ ESC [ Jtambém limpa o histórico de comandos, enquanto a CTRL + L sequência não. A seqüência enviada para o terminal é um pouco ESC [ H ESC [ 2 J, vá em frente uma experimentar por si mesmo com este comando: printf "\033[H\033[2J".
jirislav 19/04
0

Como todos já explicaram muito bem o que é Ctrl+ Lfaz, mas ninguém explicou como "reverter" o comando, aqui estão alguns comandos que você pode digitar para voltar ao que estava fazendo:

history

lhe dará os últimos 20 comandos digitados.

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

fornecerá as últimas 20 linhas de saída de qualquer instalação de pacote que você estava executando

Fabby
fonte