如何在叠加层周围重新定位Emacs缓冲区

时间:2013-02-28 00:56:51

标签: emacs elisp

我想重新定位Emacs缓冲区,以便尽可能多地显示覆盖及其周围的上下文。具体来说,我想要这种行为:

  • 如果叠加层适合可见窗口,我想在它之后显示尽可能多的线条;
  • 否则,我希望显示叠加层的开头。

此行为与我在ediff中突出显示的不同区域时看到的有些相似。

是否有一种不那么复杂的方法来实现这一目标?我试着查看ediff代码(特别是ediff-util.el),但事情对我来说似乎很复杂。

1 个答案:

答案 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))))