Usando a roda de rolagem na tela GNU


254

Como posso configurar a tela GNU para permitir que a roda de rolagem do mouse role no buffer de rolagem? Tentei pesquisar no Google sobre isso, mas a maioria dos acessos era sobre como permitir que aplicativos dentro da tela usassem a roda de rolagem.


JesperE - Você pode alterar a resposta escolhida? Fiquei confuso, e os comentários estão certos, a outra resposta é bem melhor.
Geoff

Atualmente, não usando a tela, mas os upvotes parecem convincentes o suficiente. :)
JesperE

Respostas:


359

Acredito que você pode simplesmente adicionar uma linha como esta ao seu ~/.screenrc:

termcapinfo xterm* ti@:te@

Onde "xterm *" é uma correspondência global do seu TERM atual. Para confirmar que funciona, ^ A ^ D para se desconectar da tela, depois screen -d -rpara reconectá-la lsalgumas vezes e tente rolar para trás. Funciona para mim.


O que é essa mágica? Bem, vamos consultar as páginas de manual.

screen(1) diz:

termcapinfo term terminal-tweaks [window-tweaks]
  [..]
  The first argument specifies which terminal(s) should be affected by this
  definition. You can specify multiple terminal names by separating them with
  `|'s. Use `*' to match all terminals and `vt*' to match all terminals that
  begin with "vt".
  [..]
  Some examples:

      termcap xterm*  LP:hs@

  Informs screen that all terminals that begin with `xterm' have firm
  auto-margins that allow the last position on the screen to be updated (LP),
  but they don't really have a status line (no 'hs' -  append  `@'  to turn
  entries off).  Note that we assume `LP' for all terminal names that start
  with "vt", but only if you don't specify a termcap command for that terminal.

De termcap(5):

String capabilities
    [..]
    te   End program that uses cursor motion
    ti   Begin program that uses cursor motion

28
Eu segui a sugestão de Pistos, e ela funciona parcialmente. Como ele descreve, posso inserir alguns comandos (para produzir saída suficiente para rolar a tela) e depois usar a roda do mouse para rolar de volta pelas linhas anteriores. Na verdade, estou usando a tela via Konsole no KDE (xterm com guias, basicamente), e a barra de rolagem da janela do Konsole funciona da mesma maneira. Mas há um problema: se você alternar entre as janelas da tela (^ An, ^ Ap), seu buffer de rolagem fica desarrumado. O conteúdo de qualquer janela em que você alternar será apenas 'dobrado' no seu buffer de rolagem. Isso realmente diminui.
22919 Ryan B. Lynch

22
Mas isso rola no histórico de comandos. Eu quero rolar pelo buffer de saída.
precisa

15
@ JesperE: Eu experimentei rolar o histórico de comandos também (estou usando o terminal GNOME do Ubuntu). Eu o corrigi indo em Editar -> Preferências do perfil -> Rolagem e desmarcando "Use as teclas para rolar na tela alternativa". Note que eu ainda precisava usar a correção de Pistos.
Michael Krebs

2
Além de trabalhar no OS X Lion, isso também funciona em Putty, iSSH e Prompt (da Panic). Esta linha deve estar presente em todos os arquivos .screenrc!
funroll

20
Isso permite que a rolagem no terminal não seja rolada na sessão da tela. Ou seja, se você trabalha com regiões divididas ou alterna uma janela, não será possível rolar para trás nessa região. Em vez disso, você voltará para a saída do terminal e verá a saída como era antes de dividir a região ou alterar a janela. .
precisa saber é o seguinte

69

Na tela, você deve primeiro entrar no "modo de retorno de rolagem" (ou "modo de cópia") para poder rolar no buffer de rolagem: combinação de teclas Ctrl- a Escou Ctrl- a Ctrl- [. Em seguida, você pode rolar pelo histórico usando as teclas Para cima e Para baixo (ou Ctrl- b, Ctrl- fpara mover uma página).

Nesse modo, a roda do mouse também deve funcionar, se funcionar em outros aplicativos. Você termina o "modo de retorno" com Esc.

Quanto à rolagem do buffer de rolagem sem primeiro entrar no modo de rolagem, provavelmente isso não é possível sem a modificação da tela. Eu nunca ouvi falar de uma maneira de acessar o buffer de rolagem, além do modo de rolagem.


21
Sim, eu sei sobre o modo de rolagem. Eu esperava não ter que entrar manualmente no modo de rolagem para usar o mouse. Obrigado.
JesperE

4
"Modo de retorno" é um termo não oficial IMHO. :) Ctrl + a Esc entra no modo de cópia ; esse modo sempre foi chamado assim, pois seu objetivo principal é tornar possível copiar texto para lá e para cá. A possibilidade de rolar com a roda do mouse no modo de cópia (nb. Não funciona para mim) deve ser vista como uma espécie de "artifício adicional", mas não como o principal objetivo desse modo.
syntaxerror

1
@syntaxerror: bem, os documentos chamam de "modo de cópia / retrocesso" e mencionam um "buffer de retrocesso " ( gnu.org/software/screen/manual/screen.html#Copy-and-Paste ), então acho que nós ' ambos estão certos :-). De qualquer forma, adicionei "modo de cópia" à minha resposta.
sleske

Ótimo! Também queria fazer isso, mas antes de me deparar com respostas tão antigas, sou conhecido por perguntar primeiro (mesmo sabendo que as regras do SO / SE não o prescrevem; mas é isso que acontece com regras não escritas.)
syntaxerror

Essa deveria ter sido a resposta oficial. Obrigado :)
Linh

24

O excelente artigo a que Jon Z se refere não está mais disponível, mas eu pude pescar a versão somente em texto do cache do Google. Estou salvando aqui caso o Google solte isso também no futuro. O post original foi de Mikael Ståldal, portanto, credite onde o crédito é devido.

-

Como usar a roda do mouse na tela GNU

O GNU Screen tem suporte para rolagem, mas por padrão você precisa usar teclas estranhas para usá-lo. Eu gostaria de poder usar Shift-PageUp, Shift-PageDown e a roda do mouse para rolar, assim como você pode fazer no xterm.

Não foi fácil configurar o Screen para isso e envolve cooperação com o emulador de terminal. Mas finalmente consegui alcançar uma solução que funciona muito bem. Adicione isso ao seu arquivo ~ / .Xresources (você precisa fazer logout para que isso entre em vigor):

XTerm*saveLines: 0
XTerm*vt100.translations: #override \n\
  Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  <Btn4Down>: string(0x1b) string("[5S") \n\
  Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  <Btn5Down>: string(0x1b) string("[5T") \n\
  Shift <KeyPress> Prior: string(0x1b) string("[25S") \n\
  Shift <KeyPress> Next: string(0x1b) string("[25T") \n

Em seguida, adicione isso ao seu arquivo ~ / .screenrc:

defscrollback 1000

# Scroll up
bindkey -d "^[[5S" eval copy "stuff 5\025"
bindkey -m "^[[5S" stuff 5\025

# Scroll down
bindkey -d "^[[5T" eval copy "stuff 5\004"
bindkey -m "^[[5T" stuff 5\004

# Scroll up more
bindkey -d "^[[25S" eval copy "stuff \025"
bindkey -m "^[[25S" stuff \025

# Scroll down more
bindkey -d "^[[25T" eval copy "stuff \004"
bindkey -m "^[[25T" stuff \004

Isso funciona no xterm. Não tenho certeza se funciona em outros emuladores de terminal.

Observe que isso desativa o suporte de rolagem normal no xterm; você só poderá rolar ao usar Tela. Você pode querer iniciar o xterm assim para sempre usar o Screen:

xterm -e screen


11

E para usar a roda de rolagem em um VIM dentro da tela GNU:

[.vimrc]

set mouse=a             " hold shift to copy xterm
set ttymouse=xterm2     " necessary for gnu screen & mouse

Impressionante, este em combinação com o truque screenrc fez o meu dia desde que eu uso awesomewm e terminais são minha vida
Fotios

7

Pressione Ctrl+ aseguido de[

A barra de título do seu terminal deve agora dizer modo de cópia.

Agora, as teclas de seta e a roda do mouse devem funcionar conforme o esperado.

Para retornar ao normal, pressione Esc ou pressione Enter algumas vezes.


5

Definir TERMvariável como em vt100vez de xtermantes de executar a tela também funciona.
Eu uso isso há muito tempo, funciona como um encanto.

Adicione isto ao seu .bashrc:

# make scrollbar / wheel scrolling work when running screen in gnome-terminal (or other)
if [ "$TERM" = "xterm" ]; then
  export TERM=vt100
fi

-

Para referência, meu .screenrctem isso (não é necessário para este AFAIK):

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC

Definir a variável de ambiente TERM como descrito (antes da tela de execução) funcionou para mim. É tão simples quanto digitar "export TERM = vt100". Muito obrigado. PS: Estou em um Mac, ssh em uma caixa Linux e lá corro a tela.
Daniel K.

Como mencionado acima, isso não funciona conforme o esperado. Sim, você pode rolar, no entanto, seu buffer de rolagem é substituído quando você altera as janelas.
Halsafar 02/11/2015

solução muito subestimado
MolbOrg

4

O seguinte funcionou para mim em Cygwin e Putty: Edite .screenrc e adicione

terminfo xterm* ti=:te=

3

Se as respostas acima não funcionarem para você, verifique se você não tem uma legenda ou a opção alwayslastline definida no seu .screenrc. Se você os tiver, isso não funcionará:

termcapinfo xterm* ti@:te@

Se você precisar dessas informações, tente configurá-las no título do seu terminal (com termcapinfo)


0

A solução ao usar o "Ubuntu 16.04.2 LTS" é a seguinte:

uma). Atualize $ HOME / .screenrc conforme as respostas anteriores tenham especificado:

termcapinfo xterm* ti@:te@

b) Use "Configurações". "Aplicativos preferidos" para alterar o terminal padrão para xterm, selecionando o "Terminal X" na lista suspensa.

Algumas notas supérfluas

  • Nenhum dos outros terminais, incluindo a instalação do "lxterminal", funcionou para mim, mesmo quando alterei a linha termcapinfo para "*" em vez de "xterm *".

  • Ao clicar no botão de menu no canto superior esquerdo da tela, você pode obter a caixa de diálogo Configurações usando o terceiro ícone no canto inferior direito.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.