¿Es posible que bash/readline "limpie" las sugerencias de finalización del terminal?

¿Es posible que bash/readline "limpie" las sugerencias de finalización del terminal?

Si está utilizando zsh y completa tabcomandos, nombres de rutas, opciones, etc., siempre que haya múltiples coincidencias potenciales, las sugerencias se mostrarán debajo del mensaje.
Una vez que elijas una sugerencia, zsh eliminará la lista de sugerencias del terminal, como puedes ver aquí:

ingrese la descripción de la imagen aquí

Fuente de imagen

Por el contrario, cuando bash ofrece sugerencias de finalización, genera la lista y le devuelve a un nuevo mensaje.

ingrese la descripción de la imagen aquí

Fuente de imagen
Para mí, prefiero el comportamiento zsh ya que las sugerencias que nunca usé no ofrecen ningún valor y solo producen más "ruido" en la terminal.
¿Es posible configurar bash/readline para que se comporte como zsh de esta manera?

Respuesta1

En resumen: es posible pero complejo como .inputrclas vinculaciones.

de largo: como se sugiere en un comentario, ustedpodríaHaga algo como esto en su indicador de bash y en los enlaces de línea de lectura.

Guardar/restaurar el cursor sería ineficaz, ya que el único punto en el que podría borrar de manera confiable el resto de la pantalla sería presionar Enterpara completar la selección.

Una vez que haya pasado el control a accept-line, será demasiado tarde para borrar el resto de la pantalla. Es posible (pero complejo) definir una serie de "combinaciones de teclas" reales y ad hoc para que readline realice más de una operación. ver por ejemplo

Pero ese enfoque lo limita a enviar caracteres a bash y emitir comandos a readline. Ninguno de los comandos readline

printf '\033[J'

para limpiar elrestode la pantalla. Lo más cercano sería el incorporado de readline clear-screen(noLo que quieras). Tu enlace tendría que hacer algo como

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

Esto end-of-linesolucionaría una peculiaridad de readline. Te permite presionarEnter en cualquier lugaren la línea. Si su cursor estuviera en el medio de la línea, solo le quedaría visible un fragmento de su entrada (aunque bash obtendría la cadena completa).

información relacionada