Como procurar um “caractere de comando” adequado para a tela GNU?

3

Estou tendo dificuldade em encontrar um "caractere de comando" para a tela GNU que não colide com alguma combinação de teclas que eu já uso.

Através do Emacs (e modo org, e meu shell regular etc.), praticamente todos os caracteres de comando que consistem em Ctrl+ [A-Z] estão fora dos limites .

Eu imagino que, se houvesse uma maneira simples e consistente de digitar qualquer um dos caracteres no intervalo ASCII 27 a 31, isso pode ser suficiente.

Existe alguma ferramenta que eu possa usar para encontrar uma maneira de digitar um desses caracteres que atenda aos critérios acima?

(BTW, por "consistente", quero dizer que pode ser digitado da mesma maneira em "todos os teclados" ou, pelo menos, em "todos os teclados dos EUA".)

kjo
fonte
Você ainda pode usar o screenmetacaractere do seu terminal; por padrão, ^A-aé um literal ^Aenviado para a sessão do terminal. Dito isso, você deve poder usar a -eopção para definir o sinal de comando de substituição e o comando para enviá-lo como um literal. ( -e^Aaé o padrão, por exemplo).
DopeGhoti

Respostas:

3

Você pode usar qualquer tecla de função que a Tela reconheça como o caractere de escape. Defina o caractere de escape (mais precisamente, o byte de escape ) como aquele que você nunca digita, por exemplo, \377que nunca é usado pelo UTF-8. Ligue a tecla que você deseja usar como tecla de escape command, por exemplo F12(que está F2no termcap speak - consulte a seção "Tradução de entrada" no manual da tela):

escape \377\377
bindkey -k F2 command

Você não está limitado às teclas para as quais o Screen conhece um nome simbólico. Para definir uma chave arbitrária ou keychord como a tecla de comando (a chave precisa enviar uma sequência de escape no terminal), descubra qual seqüência de escape ela envia pressionando Ctrl+ Ve a tecla em um prompt de shell. Isso faz com que a sequência de escape seja inserida literalmente, em vez de ser reconhecida pelo shell como uma sequência de escape. Por exemplo, se você quiser usar F12, poderá pressionar Ctrl+ Ve F12inserir ^[[24~(o primeiro ^[representa o caractere de escape) (alguns terminais podem enviar uma sequência de escape diferente); então você usaria

bindkey ^[[24~ command

Uso Ctrl+ \como minha tecla de escape da tela ( escape ^\\\) e deixo Ctrl+ \ \injetar um ^\caractere. Poucos programas usam o ^\caractere de controle. No Emacs, chama toggle-input-method, que eu não uso; sua milhagem pode variar. Em um terminal preparado, ele envia SIGQUIT, o que raramente é útil (quando necessário, Ctrl+ Zseguido pelo killcomando geralmente também funciona; eu padrão de desabilitar os core dumps). Ctrl+ \pode ser difícil digitar em alguns layouts de teclado quando \necessário AltGr, mas no layout dos EUA é simples. Também configuro meu emulador de terminal para enviar o ^\caractere quando pressiono Ctrl+ `, o que me permite digitá-lo com a mão esquerda também.

Ctrl+ ](Emacs :) abort-recursive-edite Ctrl+ ^(Emacs: indefinido; mas é estranho digitar em um teclado dos EUA e em muitos outros layouts) são outros candidatos prováveis ​​para um usuário do Emacs.


A propósito, se você usar o Screen apenas para executar o Emacs e algumas conchas, não precisará do Screen. O Emacs pode desempenhar o mesmo papel. Mantenha um único processo do Emacs em execução e use-o emacsclientpara abrir uma janela nesse processo do Emacs a partir de qualquer terminal. Se o terminal desaparecer, você poderá executar emacsclientnovamente para conectar-se à mesma instância do Emacs. Você pode ter quantas instâncias emacsclientquiser e conectadas à mesma instância do Emacs, possivelmente sendo exibidas por diferentes conexões locais e remotas.

Para iniciar o Emacs sem interface, execute emacs --daemon. Em seguida, execute emacsclient -cpara abrir uma janela para a instância existente do Emacs (ou emacsclient -c -nwpara forçar uma janela no modo de texto). Se você deseja iniciar o Emacs, se ele ainda não foi iniciado, mas conecte-se à instância existente do Emacs, se houver, execute emacsclient -a '' -c.

Se você deseja executar conchas, pode usar M-x shellou algo M-x termsemelhante dentro do Emacs. O Emacs pode fazer praticamente tudo o que a Screen pode fazer.

Gilles
fonte
Obrigado! Percebo que existem muitas combinações de teclas que não interferem (demais) no Emacs. (Meu favorito entre eles, de fato, seria <kbd> Ctrl </kbd> + <kbd> '</kbd>, se eu pudesse invadir.) Minha dificuldade é não saber como traduzir essas possibilidades em diretivas para colocar em .screenrc ... Deixe-me perguntar: o que você coloca no seu arquivo .screenrc para obter <kbd> Ctrl </kbd> + <kbd> \ </kbd> como sua chave de caractere de tela? Além disso, suponho que no exemplo que você deu a intenção de fazer da tecla <kbd> F12 </kbd> a chave de caractere?
KJo
1
@kjo Editado. Não há Ctrl+'caractere, então Ctrl+'envia 'na maioria dos terminais; consulte emacs.stackexchange.com/questions/1020/… para saber como fazer com que ela envie uma sequência de escape no xterm, mas não tenho certeza se você pode usar essa sequência de escape para vinculá-la command, acho que Screen é limitado às chaves definidas por termcap.
Gilles
Obrigado pela edição e seu comentário muito útil. Minha resposta a este último ficou grande demais para ser um comentário, então eu o publiquei como uma pergunta separada .
Kd
Eu também uso o ^` as my screen escape for decades. The default ^ A` sempre parecia louco (só posso supor que o autor original não usou o Emacs).
Barmar 23/11
@ Barmar: obrigado! Com base no que aprendi até agora, eu não esperava ^` que isso fosse adequado, pois não é um "personagem de controle" de boa-fé (o segundo caractere no "acorde da chave" não é uma letra nem um dos @ [\]^_?) . Funciona ^` para você "pronto para uso", ou seja, sem nenhuma configuração adicional? Se sim, como você sabia antecipadamente que ^` isso funcionaria (considerando que, como já mencionado, não é um "personagem de controle"). Se, por outro lado, você se requerem uma configuração adicional para ^` trabalhar, seria a configuração análoga começar ^'a trabalhar?
KJo
0

Eu uso o Meta-a para tela, porque todos os caracteres de controle já estão em uso pelos meus aplicativos. Para fazer isso, coloquei meus xterms no modo de 8 bits (codificação UTF-8 desativada, LANG = C) e coloquei

escape "<E1>a"

no meu ~/.screenrc, onde <E1>está o byte hex 0xe1 (ou seja, minúsculas acom o bit alto definido para escape e uma planície apara enviar uma meta-a).

Isso não é tão bom se você se preocupa com o UTF-8 em seus xterms, mas funciona bem se você estiver de acordo com o padrão de 8 bits.

user3188445
fonte
0

Pessoalmente, uso o Ctrl-J para a tela GNU por 2 razões:

  • geralmente está vinculado à chave de retorno, portanto, não é muito usado,
  • seu dedo normalmente está localizado lá, se você é um datilógrafo.

    escape ^ Jj

Xavier Nicollet
fonte
O Ctl-J é usado na maioria dos modos de programação do Emacs como newline-and-indentcomando.
Barmar