1

ポイントが現在のバッチの端に近づいたときに、通常スクロールするとファイルの追加部分が再ロードされるように、 vlfを変更しようとしています。それはうまくいっていますが、奇妙な問題が発生しています。

このようなアドバイスでリロードを実装しています。

(defadvice scroll-up (after vlf-scroll-up activate)
  "In `vlf-mode', scrolling will reload sections to avoid getting
  near the edge of the block."

  (vlf-force-near-center))

vlf-force-near-center必要に応じてファイルをリロードするために書いた関数です。これは正しく機能messageし、末尾の a は、そのポイントが新しいバッチの中央にあることを示しています。ただし、関数が終了してから表示の更新が終了するまでの間のある時点で、ポイントはバッファーの先頭近くに移動しますが、完全には移動しません。ファイルの先頭に移動してから、ポイントを画面の中央に移動したようです。

何が起こっているのかを理解するために、私は(debug-on-entry 'vlf-force-near-center). 関数をステップ実行すると、期待どおりに機能しました。しかし、終了後 (以前は最後cまで実行させていました)、ポイントはあるべき場所に留まりました。

私はpost-command-hookandとafter-change-functionsandの両方を見ました。

複雑な .emacs を使用していますが、emacs を実行すると問題が発生します。

emacs -Q --load ~/emacs/vlf.el very-large-file.txt

だから私は、私の問題に直接的および間接的な解決策を与える2つの質問があります.

  1. なぜポイントが移動するのですか?
  2. デバッガを実行しても問題が発生しないのはなぜですか?
4

2 に答える 2

1

Emacs でのスクロールはトリッキーな作業です: Emacs の再表示は通常、ポイントをビュー内に保持するために自動的にスクロールします (つまり、ウィンドウの開始位置を移動します)。そのため、明示的なスクロール コマンドを実行すると、スクロール コマンド自体の間で競合が発生することがあります (これにより、ポイントが強制的に移動される場合があります)。ビュー内にとどまるように)と、ポイントを移動するのではなく、代わりにウィンドウの開始を移動しようとする自動スクロール。

デバッガーの下で実行すると、ポイント (および/またはウィンドウ開始) が既に変更されているため、「実際の」再表示 (デバッグなしでも発生する再表示) が異なる方法で実行されるように、さまざまな中間再表示が発生することにより、この動作に影響を与えることがよくあります。以前の再表示によって移動しました。

多分これはあなたがぶつかっている問題です。

もちろん、そうではないかもしれません。コードを見ずに判断するのは困難です。

于 2013-05-16T12:53:22.427 に答える
1

vlf を拡張するvlfiという新しいパッケージがあります。機能の 1 つは、バッチの自動スクロールです。関数vlfi-next-batch/vlfi-prev-batchは適切なバッチを表示し、その後、あなたがしたことと同様に、ファイルをスクロールしながらそれらを呼び出すためにアドバイスが使用されます。

于 2013-05-16T15:16:22.447 に答える