我想重新定位Emacs缓冲区,以便尽可能多地显示覆盖及其周围的上下文。具体来说,我想要这种行为:
此行为与我在ediff
中突出显示的不同区域时看到的有些相似。
是否有一种不那么复杂的方法来实现这一目标?我试着查看ediff
代码(特别是ediff-util.el
),但事情对我来说似乎很复杂。
答案 0 :(得分:2)
我不太确定你在寻找什么用途,但这段代码应该做你想要的。 它可以通过叠加调用,或者如果以交互方式调用,将在当前位置选择一个叠加并对其执行操作。
(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))))