如何重新覆盖覆盖区周围的Emacs缓冲区
问题描述:
我想重新接收一个Emacs缓冲区,以便尽可能多地显示覆盖区及其上下文。具体来说,我想要这样的行为:如何重新覆盖覆盖区周围的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))))