1

オーバーレイとその周囲のコンテキストを可能な限り表示するために、Emacsバッファーを再センタリングしたいと思います。具体的には、次の動作が必要です。

  • オーバーレイが表示されているウィンドウに収まる場合は、前の行と後の行を同じ数だけ表示したいと思います。
  • それ以外の場合は、オーバーレイの先頭を表示します。

この動作は、で強調表示されているさまざまな領域を使用したときに表示される動作と多少似ていますediff

これを達成するためのそれほど複雑ではない方法はありますか?ediff私は(具体的には)コードを調べようとしましたediff-util.elが、物事は私には非常に複雑に思えます。

4

1 に答える 1

2

あなたが探している使い方はよくわかりませんが、このコードはあなたが望むことをするはずです。オーバーレイで呼び出すことができます。または、対話的に呼び出された場合は、現在の位置にあるオーバーレイの 1 つを選択し、それに対してアクションを実行します。

(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 に答える