ウィンドウの上部と下部に異なるスクロールマージンがありますか?


8

Q:ウィンドウの上下に異なるスクロールマージンを設定する方法はありますか?

変数scroll-margin(Cソースコードで定義)は、Emacsが最低でもウィンドウの上部と下部に表示するテキストの行数を設定します。

ウィンドウの上部と下部のマージンの行数。ポイントがウィンドウの上部または下部のこの数行内に入るたびにウィンドウを再配置します。

scroll-marginウィンドウの下部に使用したいが、上部に表示したくない(たとえば、下部は正の値、上部は0)。そうする方法はありますか?


答えはわかりませんが、おそらくscroll-margin仕事に適したツールではありません。post-command-hookウィンドウをスクロールするかどうかを決定するために、いくつかの関数が必要になる場合があります。
Harald Hanche-Olsen

私の以前のコメントをフォローアップするために、折り返された行や隠しテキストなどを考慮すると、ポイントの周りに何本の線が見えるかを見つけることは非常に簡単ではないようです。必要な情報は、表示コード内でのみ簡単に利用できると思います。あなたは(たとえば)できるように、短所を機能要求を提出しようとすることができ(top . bottom)ためscroll-margin
Harald Hanche-Olsen、2015

あなたと一緒に遊んで興味があるかもしれませんwindow-scroll-functions(二つの引数を取る)フックと入れてrecenterそのフックに取り付けた関数にコマンドをし、その後の設定を使用(setq scroll-conservatively 101)-を本質的には、センタリングが発生したときには、定義し、内蔵のオートオフ-スクロール。次のようなもの(when (and (>= (point) (window-end nil t)) (not (pos-visible-in-window-p (point) (get-buffer-window (current-buffer) (selected-frame))))) (recenter))
法律家、2015年

@lawlist:提案に感謝しますが、docstringの終わりは「警告:ウィンドウのスクロール方法を変更するためにこの機能を使用しないでください。それはそのように設計されていません。そのような使用はおそらく機能しません。」
ダン

興味深い質問ですが、PythonNutが提供する回答にコメントや投票がないのはなぜですか。
名前

回答:


1

次は私のために働きます:

(defun my-define-scroll-margins (&rest _args)
  (interactive)
  (with-demoted-errors
    (let ((computed-margin
            (if (> (cdr (nth 6 (posn-at-point)))
                  (/ (window-body-height) 2)) 5 0)))
      (setq
        scroll-margin computed-margin
        smooth-scroll-margin computed-margin))))

(add-hook 'post-command-hook #'my-define-scroll-margins)

これは理論的には非効率的ですが、足りないコンピューターのパフォーマンスには影響がないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.