如何重新覆盖覆盖区周围的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))))