Tela Bash vs. Gnu: Substitua Ctrl-A por Ctrl-Shift-A

44

Eu sou um novo usuário do GNU Screen. Uso o Bash há muito tempo e quero experimentar o GNU Screen.

Como você sabe, o GNU Screen usa 'Ca' (Control-A) como caractere de comando. O problema é que isso interfere no recurso de edição de linha no Bash (e no GNU Readline), porque o Control-A no Bash será movido para o início da linha. "

Sei que posso definir o caractere de comando para outra sequência de teclas , como "^ Q" ou "` `" (Backtick), mas tenho problemas para encontrar outra sequência de teclas que ainda não esteja em uso (^ Q é usado pelo terminal , backtick é usado ao escrever scripts de shell). Parece que o caractere de comando pode ter apenas um ou dois caracteres. Posso definir o caractere de controle GNU Screen para algo como "Control-Shift-A"?

(Ainda não posso usar mais de um hiperlink, não posso vincular à documentação do Bash)

Stefan Lasiewski
fonte
5
Para não ficar desorientado ao usar screenem outros sistemas, é melhor seguir as combinações de teclas padrão ou pelo menos aprendê-las primeiro. ^A aPor padrão, enviará a ^Acombinação de teclas usual . É um pouco inconveniente se você usa muito esse combo; Eu normalmente uso a HOMEchave por causa disso. Mas isso também nem sempre funciona.
intuited
Não há amor aqui pelo Ctrl-space. Funciona bem.
Wildcard

Respostas:

18

O problema com Control- Shift- Aé que a maioria dos programas de emulação de terminal não envia para ele um código diferente daquele enviado por Control- A, portanto, não há como a tela dizer a diferença.

Você poderá usar o Cq se stty -ixondesativar o "controle de fluxo de software" no tty. Eu costumo fazer isso para poder usar Cs para pesquisar na linha de comando.

Você pode considerar C- ^, pois parece geralmente não ter ligação. É Control- Shift- 6nos layouts de teclado dos EUA, mas pode ser difícil digitar em outros layouts.

A maioria das pessoas nunca usa o caractere de controle tty C- \ para enviar SIGQUIT. Para usá-lo, desative a funcionalidade tty com with stty quit undefe ligue-a como sua chave de prefixo. No entanto, isso é um pouco arriscado, pois se você pressionar C- \ em um tty onde a chave de encerramento não foi desativada com stty , você poderá interromper o processo de primeiro plano em vez de ativar a tela .

Eu mudei para o tmux há um tempo atrás. Seu padrão é Cb porque foi desenvolvido na tela e não interferiu no padrão da tela . Descobri que Cb funciona razoavelmente bem para mim (normalmente uso as teclas de seta para o movimento de um único caractere na linha de comando do shell - apesar de usar Mb e Mf para mover por palavras).

Aliás, o autor do tmux usa o Ca em suas sessões principais e sempre digita o Ca duas vezes (seja em uma sessão do tmux ou não). Se você está disposto a adotar esse hábito, parece um compromisso decente, já que o segundo Ca deve ser um não operacional na maioria dos contextos de edição do tipo Emacs. Não funcionaria se você costuma usar programas / contextos fora da tela, onde o segundo Ca não seria um não operacional.

Por padrão, o Ca Ca está vinculado ao outro comando (alterne para a tela ativa mais recente) na tela . Para que o Ca Ca envie um Ca real e o Ca o troque de janela, coloque o seguinte em .screenrc:

escape ^A^A
bind o other
Chris Johnsen
fonte
2
Parece bom, então eu percebi que na tela GNU, digitar Ca duas vezes alternará para a janela exibida anteriormente. Talvez eu possa mapear "Ca Ca" para outra coisa, embora não tenha muita certeza de como fazer isso (parece que preciso especificar 'escape xy' ou 'meta' para isso). Consulte gnu.org/software/screen/ manual / screen.html # Outra janela
Stefan Lasiewski
1
@ Stefan Lasiewski: Opa, esqueci que o Ca Ca não envia o Ca por padrão. Veja a adição no final da resposta para um pouco de configuração que faz com que o Ca Ca envie o Ca e o Ca alternar para a janela anterior.
Chris Johnsen
Funciona bem! Ca Ca enviará um Ca real para o shell subjacente e Ca o 'mudará para a janela' outro '. Para enviar 'Ca' para Bash, pressione 'Ca' duas vezes. Isso deve ocorrer fora da tela e não deve causar problemas.
Stefan Lasiewski
41

Não há necessidade de solução alternativa.
Para ir para o início da linha enquanto usa a tela no bash, use

Control- A(solte e depois)A


Em geral, se houver um caractere de controle de tela em conflito com um atalho do bash, o primeiro do atalho do bash Controlserá substituído por Control-A

Da mesma forma para outros atalhos de edição de linha.

skyshock21
fonte
obrigado, eu não fiz isso agora, mesmo que seja tão fácil. de fato, não há necessidade de reconfigurar nada. Eu gosto mais da sua resposta.
21711 harald
+1 ty - essa é, de longe, a melhor opção. O engraçado é que, ao tentar isso, acertei Ca Ca por acidente e encontrei mais uma ótima combinação.
Kfmfe04
3

Eu uso C- \ for Screen e não posso recomendar o suficiente. Você pode encontrar qualquer outra definição de chave em acidente, mas geralmente não C- \. É disso que eu gosto.

MikeHoss
fonte
3

Eu uso isso .screenrc

escape ^bb

Exemplo: para desanexar, digite ctrl-b d

guettli
fonte
0

Eu uso ctrl-_ (que também pode ser produzido por ctrl + 7 e geralmente ctrl + /) com screen / tmux.

graywh
fonte
0

Eu uso ctrl-z na maioria das vezes, mas também uso ctrl-x para alguns. Não uso muito a interrupção 'stop', mas quando necessário, posso digitar ^ zz. Isso também me permite iniciar sessões de tela secundárias em servidores remotos que usam o ctrl-a padrão. E se eu iniciar uma terceira sessão (em um terceiro servidor), então eu posso usar ctrl-x. Ctrl-x é a função da tela de bloqueio, que em muitos ambientes não é tão usual (uma vez que a tela geralmente é executada dentro de um emulador de terminal).

Arcege
fonte