Emacs 一直向下滚动,无错误“;“缓冲区的开始”;

Emacs 一直向下滚动,无错误“;“缓冲区的开始”;,emacs,elisp,Emacs,Elisp,我正在寻求一些帮助,以编程方式将特定窗口滚动到最开始,而不会导致缓冲区开始出现错误(这必然会停止函数)。当前(点)位于可见窗口内,但靠近底部。要向下滚动的行数可能会有所不同,因此我无法确定需要多少行,但缓冲区的最开始就是我要寻找的。我不认为(保存远足(goto char(point min))能满足我的需要 向下滚动没有特定窗口的参数,因此如果此问题的解决方案还可以包括使用特定窗口执行操作的示例(无需切换到该窗口),将不胜感激。换句话说,当这个函数在目标窗口中运行时,我希望处于不同的窗口中 (w

我正在寻求一些帮助,以编程方式将特定窗口滚动到最开始,而不会导致缓冲区开始出现
错误
(这必然会停止函数)。当前
(点)
位于可见窗口内,但靠近底部。要向下滚动的
行数可能会有所不同,因此我无法确定需要多少行,但缓冲区的最开始就是我要寻找的。我不认为
(保存远足(goto char(point min))
能满足我的需要

向下滚动
没有特定窗口的参数,因此如果此问题的解决方案还可以包括使用特定窗口执行操作的示例(无需切换到该窗口),将不胜感激。换句话说,当这个函数在目标窗口中运行时,我希望处于不同的窗口中

(when
    (not (pos-visible-in-window-p (point-min)
       (get-buffer-window calendar-buffer (selected-frame))))
  (scroll-down 20))

当发出错误信号时,您可以在<代码>情况下向下卷绕<代码>以重新获得控制:

(condition-case nil
    (scroll-down 20)
  (error nil))
我不确定您是否希望最后一个代码段是您所引用的函数的一部分,但您可以将其全部包装在
保存所选窗口中

(let ((cal (get-buffer-window calendar-buffer (selected-frame))))
  (when cal
    (save-selected-window
      (select-window cal)
      (condition-case nil
          (scroll-down 20)
        (error nil)))))
编辑:jpkotta建议在评论中忽略错误,我同意:

(ignore-errors
  (scroll-down 20))
(let((win(获取缓冲区窗口日历缓冲区(选定帧)))
(当(非(pos-visible-in-window-p(最小点)win))
(设置窗口开始赢取(最小点数)))

另见



另请参见

还有外观稍好的
忽略错误
。它相当于您的
条件案例
`set-window-start` is a built-in function in `C source code'.

(set-window-start WINDOW POS &optional NOFORCE)

Make display in WINDOW start at position POS in WINDOW's buffer.
WINDOW must be a live window and defaults to the selected one.  Return
POS.  Optional third arg NOFORCE non-nil inhibits next redisplay from
overriding motion of point in order to display at this exact start.