我想重新定位 Emacs 缓冲区,以便尽可能多地显示覆盖及其周围的上下文。具体来说,我想要这种行为:
- 如果叠加层适合可见窗口,我想在它之前的行和之后的行中显示一样多;
- 否则,我希望显示覆盖的开头。
这种行为有点类似于我在使用ediff
.
有没有一种不那么复杂的方法来实现这一目标?我试图研究ediff
代码(特别是ediff-util.el
),但对我来说事情似乎很复杂。
我不太确定您在寻找什么用途,但是这段代码应该可以满足您的需求。可以使用叠加层调用它,或者如果以交互方式调用,将选择当前位置的叠加层之一并对其执行操作。
(defun make-overlay-visible (overlay)
"given an overlay, center it on the window
(or make beginning visible if it cannot fit in the window)"
(interactive (list (car (overlays-at (point)))))
(when overlay
(goto-char (overlay-start overlay))
(recenter 0)
(when (and (pos-visible-in-window-p (overlay-start overlay))
(pos-visible-in-window-p (overlay-end overlay)))
(goto-char (/ (+ (overlay-start overlay) (overlay-end overlay)) 2))
(recenter))))