Ao usar o Terminal.app, você pode limpar a tela usando o shell interno clear
ou pressionando ^+ L(Control-L).
No entanto, tudo o que isso faz é empurrar o conteúdo da tela atual para trás uma altura da tela e redefinir o cursor / entrada na primeira linha. Ou seja, você ainda pode rolar para trás e vê-lo.
O que você também pode fazer é redefinir todo o seu scrollback pressionando ⌘+ K(Command-K).
Depois de fazer isso, você não poderá voltar atrás.
Em certas situações (principalmente antes da execução screen
ou vim
), eu gostaria de redefinir a rolagem antes que o comando realmente seja executado.
Existe um comando (como clear
) implementado no OS X que me permita fazer isso? Dada a existência de pbcopy
e pbpaste
, estou pensando que algo semelhante possa existir que me permita fazer isso.
fonte
clear && printf '\e[3J'
(Você selecionou a resposta errada como resposta correta!)Respostas:
O terminal suporta uma extensão da sequência de escape ED (Apagar no visor) para apagar a rolagem para trás. Também é suportado pelo xterm. O comando ED, descrito no manual do VT100 , aceita estes valores para o parâmetro Ps:
O terminal ( e o xterm ) adiciona:
Observe que isso apaga apenas a rolagem para trás, não a tela. Isso permite apagar um ou outro, ou ambos, enviando duas seqüências de escape.
Por exemplo, você pode limpar a tela e retroceder com o seguinte comando shell:
clear && printf '\e[3J'
(O
clear
comando procura a sequência apropriada para limpar a tela do terminal atual, mas a sequência de escape “apagar rolagem para trás” é personalizada e deve ser codificada. Se você colocar isso em um script de shell que não conhece com certeza só vai ser executado com o Terminal, você deve verificar se$TERM_PROGRAM
éApple_Terminal
antes de enviá-lo.)fonte
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, atalho para “Exibir> Limpar rolagem”.
UPDATE : Isso pode ser automatizado com AppleScript pelo seguinte comando:
… Que você pode, obviamente,
alias
com o que quiser, ou armazenar em uma função no seu~/.profile
script de login :)Como segurança, no entanto, para poder usá-lo mesmo em segundo plano, sem correr o risco de pressionar uma tecla para um aplicativo frontal errado, aconselho envolvê-lo com o seguinte teste:
… Que nos fornece o seguinte código:
… Que por sua vez, devidamente escapado e
alias
ed, termina em:E aqui está o seu novo
clear
! :)fonte
vim
), o shell execute o "scrollback reset" antes de executar o vim. Programático, não interativo.clear
; isto é, limpa a tela, mas ainda posso voltar. BaterCommand
K
funciona normalmente.Aqui está o código que funciona para o Terminal do macOS e para o iTerm2. Também não precisa que a janela esteja em primeiro plano.
Como funciona
Essa é uma composição de 3 seqüências de escape ANSI , particularmente os comandos "Control Sequence Introducer" .
\033
é uma sequência de escape que codifica o ponto de código para o caractere que representa. A0
indicação inicial indica que o restante da sequência codifica um valor octal, nesse caso,33
em octal. O valor decimal disso é27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). No ASCII, o ponto do código27
é o caractere "ESC" (escape).CSI
comandos começam comESC [
, aka\033[
. Sabendo disso, podemos dividir a corda em três partes.CSI 2 J
CSI n J
n
valor é definido como2
neste caso, que chama a segunda variante: "Se n for 2, limpe a tela inteira (e move o cursor para a parte superior esquerda no DOS ANSI.SYS)."CSI 3 J
:CSI n J
n
valor é definido como3
neste caso, que chama a terceira variante: "Se n for 3, limpe a tela inteira e exclua todas as linhas salvas no buffer de rolagem (esse recurso foi adicionado ao xterm e é suportado por outros aplicativos de terminal)."CSI 1 ; 1 H
:CSI n ; m H
n
em
são definidos como1
, o que significa que este comando move o cursor para o canto superior esquerdo.fonte
CSI n J
" (onde n = 2) + "CSI n J
" (onde n = 3) + "CSI n ; m H
" (onde n, m = 1, 1), que se traduz em: "ED - Apagar no visor" (variante 2), "ED - Apagar na tela" (variante 3), "CUP - posição do cursor" (movendo para 1, 1)