NB: La publicación ¿Cómo mover el punto al final de otro búfer, usando `with-current-buffer` y` goto-char`? presumiblemente hace la misma pregunta que esta, pero las respuestas que se le dan no se aplican fácilmente a mi caso aquí. Por ejemplo, esas respuestas implican insertar texto en el otro búfer, etc. La pregunta que hago aquí es considerablemente más simple, y espero que la respuesta también sea correspondientemente simple.
Suponer que
- el marco de Emacs se divide en dos ventanas, donde una de las ventanas contiene un búfer llamado
*whatever*
y el otro contiene el*scratch*
búfer estándar ; - el
*whatever*
búfer contiene varias líneas de texto; - el cursor en el
*whatever*
búfer está al comienzo de ese búfer (es decir, en su(point-min)
); - el
*scratch*
búfer es el actual;
Si ahora evalúo alguno de los siguientes en el *scratch*
búfer, la posición del cursor en el *whatever*
búfer permanece sin cambios:
(with-current-buffer "*whatever*"
(goto-char (point-max)))
(with-current-buffer "*whatever*"
(end-of-buffer))
(save-excursion
(set-buffer "*whatever*")
(goto-char (point-max)))
(save-excursion
(set-buffer "*whatever*")
(end-of-buffer))
Me imagino que, sea lo que sea (goto-char (point-max))
o (end-of-buffer)
haga *whatever*
, la posición del cursor se descarta posteriormente.
¿Cómo debo modificar cualquiera de los fragmentos anteriores para que el cursor
*whatever*
del búfer se posicione (¡persistentemente!) Al final de ese búfer.¿Qué debería haber hecho para responder esta pregunta yo mismo usando los documentos de Emacs? Intenté todo lo que se me ocurrió.
Después de leer la respuesta iluminadora de Jules Tamagnan, me di cuenta de que necesito hacer una estipulación adicional explícita:
Estoy buscando una solución que funcione independientemente de si el búfer en cuestión es visible en una ventana o no.
Después de todo, si veo el búfer B en una ventana W , muevo el cursor a una ubicación particular L , luego veo algún otro búfer C en la misma ventana W y finalmente apunto W nuevamente al búfer B , espero ver el cursor en el mismo lugar L donde lo dejé. IOW, debe haber una manera para que un búfer recuerde dónde está su punto, independientemente de si está asociado con una ventana o no.
¿Qué pasa con el caso en el que el búfer de destino está actualmente visible en dos o más ventanas ( W1 , W2 , W3 , ...)? Hay muchas posibilidades razonables para este caso. La solución propuesta podría, por ejemplo, cambiar la posición del cursor
- en la ventana activa más reciente entre W1 , W2 , W3 , ...;
- en todas las ventanas W1 , W2 , W3 , ...; o
- etcétera etcétera.
(No tengo una opinión sólida sobre este caso de esquina, ya que espero que sea extremadamente raro en la práctica).