1

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

  • 如果叠加层适合可见窗口,我想在它之前的行和之后的行中显示一样多;
  • 否则,我希望显示覆盖的开头。

这种行为有点类似于我在使用ediff.

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

4

1 回答 1

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))))
于 2013-02-28T03:33:42.363 回答