É possível que o bash/readline "limpe" as sugestões de conclusão do terminal?

É possível que o bash/readline "limpe" as sugestões de conclusão do terminal?

Se você estiver usando zsh e completar tabcomandos, nomes de caminho, opções, etc., sempre que houver várias correspondências potenciais, as sugestões serão exibidas abaixo do prompt.
Depois de escolher uma sugestão, o zsh removerá a lista de sugestões do terminal, como você pode ver aqui:

insira a descrição da imagem aqui

Fonte da imagem

Por outro lado, quando o bash oferece sugestões de conclusão, ele exibe a lista e retorna para um novo prompt.

insira a descrição da imagem aqui

Fonte da imagem
O comportamento zsh é preferível para mim, pois as sugestões que nunca usei não oferecem valor e apenas produzem mais "ruído" no terminal.
É possível configurar o bash/readline para se comportar como zsh dessa maneira?

Responder1

resumindo: é possível, mas complexo como .inputrcligações.

longo: conforme sugerido em um comentário, vocêpoderiafaça algo assim no prompt do bash e nas ligações readline.

Salvar/restaurar o cursor seria ineficaz, pois o único ponto em que você seria capaz de limpar com segurança o restante da tela seria pressionar Enterpara concluir a seleção.

Depois de passar o controle para accept-line, será tarde demais para limpar o restante da tela. É possível (mas complexo) definir uma série de "ligações de teclas" reais e ad hoc para fazer com que o readline execute mais de uma operação. Veja por exemplo

Mas essa abordagem limita o envio de caracteres para o bash e a emissão de comandos para o readline. Nenhum dos comandos readline faz

printf '\033[J'

para limpar orestanteda tela. O mais próximo seria o built-in do readline clear-screen(nãoo que você quer). Sua ligação teria que fazer algo como

  • beginning-of-line
  • insira " printf '\033[J';"
  • end-of-line
  • accept-line

Isso end-of-linecontornaria uma peculiaridade da readline. Ele permite que você pressioneEnter em qualquer lugarna linha. Se o seu cursor estivesse no meio da linha, você teria apenas um fragmento da sua entrada visível (embora o bash obtivesse a string inteira).

informação relacionada