这让我疯了,我整天都在坚持下去。
我正在尝试编写一个用于与串行设备通信的进程过滤器。这样可以正常工作,但是当我将文本插入缓冲区时,我希望缓冲区能够滚动,这样我就可以看到文本了,就像当键入文本到缓冲区时一样。我将文本插入到几个缓冲区中,显示串行线路上的不同信息。实际上,每次我发出一个串行命令时,我都要向下拖动每个滚动条,这样我才能看到文本。
更改'point'只会更改插入点 - 窗口滚动不会跟随。尝试调用滚动功能和“重新定位”似乎什么都不做。如何让窗户滚动?
我还想更改缓冲区,以便您无法输入,或通过单击窗口更改“点”的位置。是否有我应该使用的模式或什么?
非常感谢任何人都可以提供帮助,
大卫。
答案 0 :(得分:5)
我怀疑你的问题来自于点位置没有附加到缓冲区,而是附加到显示缓冲区的窗口(因为你可以让不同的窗口在不同的位置显示相同的缓冲区)。
您可以尝试这样的事情:
(with-selected-window (get-buffer-window YOUR-BUFFER)
(goto-char (point-max)))
答案 1 :(得分:2)
感谢大家的帮助。如果它对任何人都有用,那么这就是我到目前为止所提出的,它似乎有效。
(defun append-to-buffer (buffer string)
"Append the text to the end of a buffer"
(let ((win (get-buffer-window buffer)))
(if (eq win nil)
(progn
(with-current-buffer buffer
(goto-char (point-max))
(insert string)))
(with-selected-window
(get-buffer-window buffer)
(goto-char (point-max))
(insert string)))))
答案 2 :(得分:1)
您可能希望缓冲区中有(set (make-local-variable 'window-point-insertion-type) t)
。
答案 3 :(得分:0)
(goto-char (point-max))
应该将缓冲区滚动到最后。活动光标不能位于Emacs中的视口之外。你在一个游览保存命令中包裹你的电话吗?
要禁止编辑,请执行(toggle-read-only 1)