2013-02-28 196 views
1

我想重新接收一個Emacs緩衝區,以便儘可能多地顯示覆蓋區及其上下文。具體來說,我想要這樣的行爲:如何重新覆蓋覆蓋區周圍的Emacs緩衝區

  • 如果覆蓋圖符合可見窗口,我想顯示與行之前一樣多的行;
  • 否則,我想要顯示疊加的開始。

此行爲有點類似於我在使用ediff中突出顯示的不同區域時看到的內容。

有沒有一種不那麼複雜的方式來實現這一目標?我試圖查看ediff代碼(特別是ediff-util.el),但事情似乎對我來說非常複雜。

回答

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