NB: Bài viết Làm thế nào để di chuyển điểm đến cuối bộ đệm khác, sử dụng `with-current-buffer` và` goto-char`? có lẽ hỏi cùng một câu hỏi như câu hỏi này, nhưng câu trả lời cho nó không dễ dàng áp dụng cho trường hợp của tôi ở đây. Ví dụ: những câu trả lời liên quan đến việc chèn văn bản vào bộ đệm khác, v.v ... Câu hỏi tôi đang hỏi ở đây đơn giản hơn đáng kể và tôi hy vọng câu trả lời cho nó cũng tương tự đơn giản.
Giả sử rằng
- khung Emacs được chia thành hai cửa sổ, trong đó một trong các cửa sổ giữ một bộ đệm được gọi
*whatever*
và một cửa sổ khác giữ*scratch*
bộ đệm tiêu chuẩn ; - các
*whatever*
bộ đệm chứa một số dòng văn bản; - con trỏ trong
*whatever*
bộ đệm nằm ở đầu bộ đệm đó (tức là tại bộ đệm(point-min)
); - các
*scratch*
bộ đệm là một trong những hiện hành;
Nếu bây giờ tôi đánh giá bất kỳ điều nào sau đây trong *scratch*
bộ đệm, vị trí của con trỏ trong *whatever*
bộ đệm vẫn không thay đổi:
(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))
Tôi cho rằng, bất cứ điều gì (goto-char (point-max))
hoặc (end-of-buffer)
không làm cho *whatever*
vị trí của con trỏ sẽ bị loại bỏ sau đó.
Tôi phải sửa đổi bất kỳ đoạn mã nào ở trên để con trỏ
*whatever*
của bộ đệm được định vị (liên tục!) Ở cuối bộ đệm đó.Tôi nên làm gì để tự trả lời câu hỏi này bằng tài liệu Emacs? Tôi đã thử mọi thứ tôi có thể nghĩ ra.
Sau khi đọc câu trả lời soi sáng của Jules Tamagnan, tôi nhận ra rằng tôi cần đưa ra một quy định rõ ràng hơn:
Tôi đang tìm kiếm một giải pháp sẽ hoạt động bất kể liệu bộ đệm trong câu hỏi có thể nhìn thấy trong một cửa sổ hay không.
Rốt cuộc, nếu tôi xem bộ đệm B trong cửa sổ W , hãy di chuyển con trỏ đến một vị trí cụ thể L , sau đó xem một số bộ đệm C khác trong cùng cửa sổ W và cuối cùng trỏ W trở lại bộ đệm B , tôi hy vọng sẽ thấy con trỏ tại cùng một vị trí L nơi tôi rời nó. IOW, phải có một cách để bộ đệm ghi nhớ điểm của nó ở đâu, bất kể nó có được liên kết với cửa sổ hay không.
Còn trường hợp bộ đệm đích hiện đang hiển thị trong hai hoặc nhiều cửa sổ ( W1 , W2 , W3 , ...) thì sao? Có nhiều khả năng hợp lý cho trường hợp này. Giải pháp đề xuất có thể, ví dụ, thay đổi vị trí của con trỏ
- trong cửa sổ hoạt động gần đây nhất trong số W1 , W2 , W3 , ...;
- trong tất cả các cửa sổ W1 , W2 , W3 , ...; hoặc là
- Vân vân.
(Tôi không có ý kiến mạnh mẽ về trường hợp góc này, vì tôi hy vọng nó sẽ cực kỳ hiếm trong thực tế.)