Emacs - 插入文本时自动滚动

时间:2012-11-23 13:22:44

标签: emacs elisp

这让我疯了,我整天都在坚持下去。

我正在尝试编写一个用于与串行设备通信的进程过滤器。这样可以正常工作,但是当我将文本插入缓冲区时,我希望缓冲区能够滚动,这样我就可以看到文本了,就像当键入文本到缓冲区时一样。我将文本插入到几个缓冲区中,显示串行线路上的不同信息。实际上,每次我发出一个串行命令时,我都要向下拖动每个滚动条,这样我才能看到文本。

更改'point'只会更改插入点 - 窗口滚动不会跟随。尝试调用滚动功能和“重新定位”似乎什么都不做。如何让窗户滚动?

我还想更改缓冲区,以便您无法输入,或通过单击窗口更改“点”的位置。是否有我应该使用的模式或什么?

非常感谢任何人都可以提供帮助,

大卫。

4 个答案:

答案 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)

相关问题