6

这让我发疯了,我整天都在做这件事。

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

更改“点”只会更改插入点 - 窗口滚动不会跟随。尝试调用滚动功能和“重新居中”似乎无济于事。如何让窗口滚动?

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

非常感谢,如果有人可以提供帮助,

大卫。

4

4 回答 4

5

我怀疑您的问题来自这样一个事实,即点位置没有附加到缓冲区,而是附加到显示缓冲区的窗口(因为您可以让不同的窗口在不同的位置显示相同的缓冲区)。

你可以尝试这样的事情:

(with-selected-window (get-buffer-window YOUR-BUFFER)
  (goto-char (point-max)))
于 2012-11-23T16:07:11.463 回答
2

你可能想(set (make-local-variable 'window-point-insertion-type) t)在你的缓冲区。

于 2012-11-23T18:24:34.887 回答
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)))))
于 2012-11-23T19:00:03.210 回答
0

(goto-char (point-max))应该将缓冲区滚动到最后。活动光标不能在 Emacs 的视口之外。您是否将您的电话包装在一个游览保存命令中?

要禁止编辑,请执行(toggle-read-only 1)

于 2012-11-23T14:07:58.483 回答