P: ¿cómo muestro temporalmente el texto en una ventana en ubicaciones de pantalla sin texto para propiedad / superposición?
Estoy familiarizado con la idea básica detrás de las propiedades y superposiciones de texto (vea también este hilo ), las he usado varias veces, pero de ninguna manera soy experto en ellas. Mi comprensión limitada es que debe haber texto para apropiarse o superponerse, pero me pregunto cómo usar secciones de una ventana que no tengan ningún texto.
Aquí hay una captura de pantalla para un ejemplo:
¿Cómo se puede poner texto (temporalmente) en uno de los cuadros rojos en la captura de pantalla, es decir, el espacio en blanco a la derecha del texto, o debajo de la última línea en el búfer?
insert
enviar mensajes de texto al búfer y apropiarte de eso?Respuestas:
He preparado un ejemplo funcional de una función que toma una cadena y la muestra temporalmente con un tiempo de espera después del texto del búfer:
El siguiente encantamiento dará como resultado su ejemplo de cuadro rojo inferior:
La razón por la que esto funciona es porque las superposiciones usan marcadores como posiciones para mostrar entre ellas. El uso de la posición más externa como inicio y final de la superposición le permite mostrar texto después de él mediante la
after-string
propiedad. Dado que las superposiciones pueden contener texto propio, lo configuré para que aparezca sangrado y con espacios en blanco a su alrededor.El otro ejemplo puede usar la misma idea para mostrar texto después del final de la línea:
La siguiente invocación resultará en su ejemplo de cuadro rojo del lado derecho:
Puede volverse mucho más loco y agregar caras para distinguir estas superposiciones del texto del búfer, mostrarlas durante más tiempo que un tiempo de espera, ajustar su posición, detectar cuándo no hay espacio vacío y usar superposiciones normales de texto propio, etc. Recomiendo mirar el código fuente del modo empresa porque es muy legible y demuestra un uso más elaborado (y en su mayoría libre de errores) de superposiciones para crear un menú emergente flexible con las características sugeridas.
fuente
Puede mostrar temporalmente el texto en un búfer con la función
momentary-string-display
. Se necesita un mensaje para mostrar y una posición en el búfer.Esta:
colocará la cadena "hola allí" en la posición 200 en el búfer. En este punto, moverá el resto del texto a un lado para dejar espacio para "hola mundo", pero todo se restaurará a donde estaba cuando presionó cualquier tecla.
No necesita texto en el búfer para crear superposiciones, aunque eso es un requisito para las propiedades de texto. Aquí hay una superposición con ancho cero que da como resultado que se muestre texto adicional:
Tenga en cuenta que esta superposición alejará el texto del búfer; no cubrirá el texto en la posición dada.
Parece que no es posible colocar una superposición en ninguna posición en el búfer que sea mayor que
point-max
/buffer-size
, es decir, es probable que no pueda colocar texto en alguna posición específica debajo del texto del búfer a menos que modifique esta restricción. Por supuesto, puede colocar texto justo después del texto del búfer con laafter-string
propiedad en una superposición fijada en lapoint-max
posición.fuente