Reconfigurando o "prompt claro" em mutt

9

Por padrão, ao inserir informações no prompt de comando mutt, você pode limpá-lo com Ctrlg, conforme descrito no manual :

^ G n / a abortar

Eu tenho tentado vincular essa função Escape. Infelizmente, abortnão está listado nas funções disponíveis, nem no manual nem na fonte .

Eu tentei usar isso no meu .muttrc:

editor de ligação <esc> abortar

mas gera um erro:

Erro no /home/jason/.mutt/muttrc, linha 143: abort: nenhuma função no mapa

Eu tentei usar um mapa diferente, como ( generic), e experimentei outras funções fictícias, como clear, sem sucesso.

Como eu ligaria Escapepara limpar a linha de prompt?

jasonwryan
fonte
11
Encadernação de fuga não é uma boa idéia de como o caractere de escape (enviado após pressionar escape) é também o prefixo para seqüências de escape enviado por todas as teclas de função como setas, del, F1 ...
Stéphane Chazelas
Esse é um bom ponto que eu não havia considerado. Testando-o, o Escape precisa ser enviado duas vezes para enviar um literal, ^[para que ele não seja um limitador de exibição (não uso nenhuma ligação que dependa disso).
jasonwryan
Esc, Escenviaria dois caracteres ESC. Você também pode pressionar Escuma vez e aguardar cerca de um segundo (o tempo limite padrão aguardando o restante de uma sequência de escape).
Stéphane Chazelas
Sim. Primeiro eu tenho que trabalhar para fora como para vinculá-lo :)
jasonwryan

Respostas:

5

Não é possível com ligações de teclas. Ctrl-Gé codificado no mutt em um nível inferior ao processamento de macro ou de ligação de teclas (consulte mutt_getch()o código-fonte do mutt, no centro de todas as entradas do usuário no mutt que retornam um erro ^G).

macro editor \e '^G'

também não funcionaria.

O que você pode fazer é configurar seu terminal para enviar ^Gao pressionarEscape

Com o xterm:

xterm -xrm 'XTerm.VT100.translations: #override <KeyPress> Escape: string(0x7)'

Se você estiver usando screen, você também pode fazer

screen -X bindkey $'\e' stuff $'\a'

antes de chamar o mutt e restaurá-lo posteriormente (infelizmente, não parece que você possa ter as combinações de teclas por janela da tela). Além disso, será um problema se o seu editor de mensagens de email for vi.

Stéphane Chazelas
fonte
Promovido: porque responde à pergunta (ou seja, não é possível). Você poderia, por favor, elaborar o "código fixo ... em um nível inferior". E embora a solução alternativa seja engenhosa, não é realmente viável, pois uso o Escape em muitos outros programas de terminal - daí o desejo de vinculá-lo aqui.
jasonwryan
Eu editei minha resposta com mais detalhes. Estou surpreso que você tenha esc ligado em outros programas, pois geralmente não está em aplicativos que conheço pelo motivo mencionado nos comentários acima.
Stéphane Chazelas
2

Parece-me uma péssima idéia vincular a fuga ControlGtambém. Eu vim aqui procurando uma solução de vira-lata, mas como parece que não há, darei uma resposta do que estou fazendo para qualquer um que tropeçar nisso. Não é o ideal, mas não afeta outros programas:

macro editor \e "<enter><shell-escape>xdotool key control+g<enter>"

ou

macro editor \e "<enter><shell-escape>xsendkey Control+g<enter>"

Usando algo como xdotool ou xsendkey para falsificar o controle + g funciona e não atrapalha a fuga em qualquer outro lugar. Há um atraso visual para que eu saia do editor de linha, mas as ligações de índice funcionarão imediatamente e o atraso visual desaparecerá assim que você usar uma ligação de índice. A primeira entrada é necessária para que o mutt não digite apenas "...." e faça isso em um cabeçalho ou termo de pesquisa ou algo assim.

noctuida
fonte
0

Essa solução é tão ruim que o autor preferiu editar o código-fonte do Mutt para se livrar de ^ G

Aviso: esta solução parece incompatível com OSX, Emacs e outras aplicações que usam Ctrl+G

Após meu primeiro dia em Mutt, eu estava quase usando ^ G no Vim por engano ... Então tentei algo que parece funcionar aqui, no gerenciador de janelas i3 e no xfce-terminal .

Adicionou esta linha a ~/.i3/config:

bindsym --release Escape exec --no-startup-id xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"

Teve que usar "\[Escape]\[Control]\[g]"porque só "\[Control]\[g]"fez parar de funcionar no Vim.

Se você não estiver usando o i3, acho que você pode usar o xbindkeys para executar xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"quando Escpressionado.

Não é uma solução bonita ... Pode tornar sua Escchave inutilizável em alguns programas, mas pelo menos aqui parece ok.

EDITAR:

Agora vejo que a parte Ctrl+ Gfaz com que o Vim mostre a posição no arquivo. Nada muito dramático, por enquanto.

Este link parece ter uma solução melhor, mas para o urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

alguém
fonte