Al iniciar XTerm, el mensaje comienza en la primera línea del terminal. Al ejecutar comandos, el indicador se mueve hacia abajo hasta llegar al fondo y, a partir de ese momento, permanece allí (ni siquiera Shift, Page Downo el mouse puede cambiar esto). En lugar de que el inicio de la vida útil del terminal sea "especial", el mensaje siempre debe estar en la parte inferior del terminal. Tenga en cuenta que tengo un mensaje de varias líneas .
Por supuesto, de lo contrario debería funcionar como antes (redimensionable, desplazable, sin nuevas líneas innecesarias en la salida y sin salida que desaparezca misteriosamente), por lo que PROMPT_COMMAND='echo;echo;...'o similar no es una opción. La solución idealmente no debe ser específica de la carcasa.
Editar: La solución actual , mientras se trabaja en casos sencillos, tiene algunos problemas:
- Es Bash específico . Una solución ideal debe ser portátil a otros proyectiles.
- Se produce un error si otros procesos modifican
PS1. Un ejemplo es virtualenv, que agrega(virtualenv)al comienzo dePS1, que luego siempre desaparece justo por encima del pliegue. - Ctrl- lAhora elimina la última página del historial.
¿Hay alguna manera de evitar estos problemas, sin bifurcar XTerm?

clearcomando.Respuestas:
Si se usa
bash, lo siguiente debería hacer el truco:O (menos eficiente ya que ejecuta un
tputcomando antes de cada solicitud, pero funciona después de que la ventana del terminal ha cambiado de tamaño):Para evitar
tputcambiar el código de salida, puede guardarlo y restablecerlo explícitamente:Tenga en cuenta que la variable
retvales local; no afecta a ningunaretvalvariable que podría haber definido de otra manera en el shell.Como la
cupcapacidad de la mayoría de los terminales es la misma\e[y;xH, también puede codificarla:Si desea que sea seguro contra el reinicio posterior de PS1, también puede utilizar la
PROMPT_COMMANDvariable. Si se establece, se ejecuta como comando antes de que se muestre el mensaje. Entonces el efecto también se puede lograrPor supuesto, si bien el reinicio
PS1no afectará esto, algún otro software también podría cambiarPROMPT_COMMAND.fuente
tputdifieren de muchosechocomandos? (Preguntando por curiosidad)'\[$(tput cup "$LINES")\]'funciona de maravilla . ¡Gracias!tput: Parece que se reinicia$exit_code. Solucionado mediante el uso\[\e[$LINES;1H\].tputque conserva el código de salida.Como una ligera simplificación a la respuesta anterior, me resultó más fácil simplemente ejecutar:
al comienzo de
.bashrco.zshrc. Simplemente hace el trabajo.Pros:
Contras:
clearaclear; tput ...no ayuda;fuente
Las respuestas que utilizan
$LINESson innecesariamente no portátiles. Como se hizoresize, simplemente puede solicitarxtermestablecer la posición en un número de línea arbitrariamente grande, por ejemplo,(suponiendo que tiene una ventana más pequeña que 10 mil líneas, sin tener en cuenta el desplazamiento hacia atrás ).
Debido a que la cadena no cambiará como un efecto secundario de cambiar el tamaño de la ventana, puede calcular esto una vez y pegarlo en su cadena de solicitud como una constante, por ejemplo,
y después
De acuerdo a sus preferencias.
En cuanto a otros procesos de modificación
PS1: tendrá que volver a calcularPS1después de esos cambios, para asegurarse de que se ve como lo desea. Pero no hay suficientes detalles en la pregunta para señalar dónde hacer los cambios.Y finalmente: el comportamiento para completar pestañas no encaja con este tipo de cambio, debido a los supuestos de bash.
fuente
PS1="${TPUT_END} myprompt: ", o inclusoPS1="${TPUT_END}${PS1}"