Nota: O post Como mover o ponto para o final de outro buffer, usando `with-current-buffer` e` goto-char`? presumivelmente, faz a mesma pergunta que esta, mas as respostas dadas a ela não se aplicam prontamente ao meu caso aqui. Por exemplo, essas respostas envolvem a inserção de texto no outro buffer, etc. A pergunta que estou fazendo aqui é consideravelmente mais simples, e espero que a resposta seja igualmente simples.
Suponha que
- o quadro do Emacs é dividido em duas janelas, onde uma das janelas contém um buffer chamado
*whatever*
e a outra contém o*scratch*
buffer padrão ; - o
*whatever*
buffer contém várias linhas de texto; - o cursor no
*whatever*
buffer está no início desse buffer (ou seja, no seu(point-min)
); - o
*scratch*
buffer é o atual;
Se agora eu avaliar qualquer um dos seguintes no *scratch*
buffer, a posição do cursor no *whatever*
buffer permanecerá inalterada:
(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))
Eu acho que, o que (goto-char (point-max))
quer que (end-of-buffer)
faça ou a *whatever*
posição do cursor seja descartado posteriormente.
Como devo modificar qualquer um dos trechos acima para que o cursor
*whatever*
do buffer seja posicionado (persistentemente!) No final desse buffer.O que eu deveria ter feito para responder a essa pergunta usando os documentos do Emacs? Eu tentei tudo o que conseguia pensar.
Depois de ler a resposta esclarecedora de Jules Tamagnan, percebi que precisava explicitar mais uma estipulação:
Estou procurando uma solução que funcione independentemente do buffer em questão ser visível em uma janela ou não.
Afinal, se eu visualizar o buffer B em uma janela W , mover o cursor para um local específico L , exibir outro buffer C na mesma janela W e finalmente apontar W de volta para o buffer B , espero ver o cursor em o mesmo local L onde eu o deixei. IOW, deve haver uma maneira de um buffer lembrar onde está o seu ponto, independentemente de estar associado a uma janela ou não.
E o caso em que o buffer de destino está atualmente visível em duas ou mais janelas ( W1 , W2 , W3 , ...)? Existem muitas possibilidades razoáveis para este caso. A solução proposta pode, por exemplo, alterar a posição do cursor
- na janela ativa mais recente entre W1 , W2 , W3 , ...;
- em todas as janelas W1 , W2 , W3 , ...; ou
- etc etc.
(Não tenho uma opinião forte sobre esse caso de canto, pois espero que seja extremamente raro na prática.)