Como se pode substituir o Ctrl + C para parecer mais peixe?

2

Eu me encontro usando o bash com mais frequência do que em máquinas remotas, embora fish seja meu shell preferido. Fish tem um recurso pequeno, mas interessante, quando você pressiona Ctrl + C, algo assim acontece:

if command running
   send SIGINT
else
   clear line (don't start a new one)

Seria bom poder fazer isso no bash também.

Eu imagino que isso envolveria o trapping do SIGINT, que vem do stty sendo configurado para enviá-lo quando o Ctrl + C for atingido, mas não descobri como executar o pseudo-código acima.

O que eu tentei

trap 'tput dl1' SIGINT

que limpa a linha, mas continua a iniciar uma nova linha / prompt (é como digitar um prompt vazio) e o faz somente se eu não tiver navegado no histórico: \

    
por UncleJack 08.07.2017 / 12:40

1 resposta

1

OK, depois de experimentar um pouco de trap , tput e terminfo , acho que descobri ( graças a outra pergunta ).

Para uma linha de comando padrão com apenas 1 linha, por exemplo, bash-4.3$ echo something here

trap 'tput dl1; tput cuu1' SIGINT é o que eu precisava.

bash irá:

  • elimine a linha
  • mova o cursor para cima

e finalmente iniciar uma nova linha (daí o mover o cursor para cima ).

Se sua linha de comando tiver 2 ou mais linhas, por exemplo

name@host /path/to/some/dir
$ echo something here

Em seguida, outro tput dl1; tput cuu1 precisará ser adicionado para excluir a linha extra - > trap 'tput dl1; tput cuu1; tput dl1; tput cuu1' SIGINT

Acho que vou ver se isso tem algum efeito adverso.

    
por 08.07.2017 / 13:42