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?
clear
comando.Respuestas:
Si se usa
bash
, lo siguiente debería hacer el truco:O (menos eficiente ya que ejecuta un
tput
comando antes de cada solicitud, pero funciona después de que la ventana del terminal ha cambiado de tamaño):Para evitar
tput
cambiar el código de salida, puede guardarlo y restablecerlo explícitamente:Tenga en cuenta que la variable
retval
es local; no afecta a ningunaretval
variable que podría haber definido de otra manera en el shell.Como la
cup
capacidad 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_COMMAND
variable. 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
PS1
no afectará esto, algún otro software también podría cambiarPROMPT_COMMAND
.fuente
tput
difieren de muchosecho
comandos? (Preguntando por curiosidad)'\[$(tput cup "$LINES")\]'
funciona de maravilla . ¡Gracias!tput
: Parece que se reinicia$exit_code
. Solucionado mediante el uso\[\e[$LINES;1H\]
.tput
que 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
.bashrc
o.zshrc
. Simplemente hace el trabajo.Pros:
Contras:
clear
aclear; tput ...
no ayuda;fuente
Las respuestas que utilizan
$LINES
son innecesariamente no portátiles. Como se hizoresize
, simplemente puede solicitarxterm
establecer 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 calcularPS1
despué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}"