【问题标题】:Emacs - scroll automatically when inserting textEmacs - 插入文本时自动滚动
【发布时间】:2012-11-23 13:22:44
【问题描述】:

这让我发疯了,我整天都在忙。

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

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

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

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

大卫。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

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

    【讨论】:

    • 这个值有什么作用,Stefan?文档字符串说该变量指定了一种标记类型,但我不清楚 t 的值在这方面意味着什么。
    • 这意味着当文本被添加到窗口光标所在的位置时,光标应该停留在新文本之后而不是之前。
    • 谢谢,斯特凡。也许可以更详细地记录该变量?也就是说,如果我将M-: (insert "foo") RET 放入缓冲区,听起来好像我应该看到nilt 之间的行为差​​异,但无论哪种情况,结果似乎都是一样的,所以我仍然对此有点困惑。
    • 这个变量只对那些不是当前选中窗口的窗口有效。对于选定的窗口,行为通常类似于具有值 t(例如,在您上面的 insert 示例中,光标在 foo 之后而不是之前结束)。
    【解决方案2】:

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

    你可以试试这样的:

    (with-selected-window (get-buffer-window YOUR-BUFFER)
      (goto-char (point-max)))
    

    【讨论】:

      【解决方案3】:

      感谢大家对此的帮助。如果它对任何人有任何用处,这就是我迄今为止提出的方法,并且似乎有效。

      (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)))))
      

      【讨论】:

        【解决方案4】:

        (goto-char (point-max)) 应该将缓冲区滚动到末尾。活动光标不能在 Emacs 的视口之外。您是否将您的通话包装在一个行程节省命令中?

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

        【讨论】:

        • 感谢马格纳的回复。我的代码中有 (goto-char (point-max)) 。它成功地将点发送到缓冲区的末尾。但是当我插入我的文本(插入 )时,它最终会跑出窗口底部,我必须继续向下拖动滚动条以跟上我的输出。
        • 我确实包含了一个游览命令。我是从 ielm 做的。我不知道这是否有区别。例如,如果您打开了一个名为 'xbee.el' 的缓冲区并在 ielm 中键入 (with-current-buffer "xbee.el" (goto-char (point-min)) (insert "some text")),则文本将进入“xbee.el”缓冲区的开头,但在滚动到它之前您看不到它(假设它不在屏幕上)。
        猜你喜欢
        • 2012-10-15
        • 2017-11-13
        • 2012-08-07
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        相关资源
        最近更新 更多