スクロールホイールに対するページャーの応答を減らし、画面をクリアしない方法


13

$ LESS環境変数からフラグを削除する方法であるhow-to-make-mouse-wheel-scroll-the-less-pager-using-bash-and-gnome-terminalのような回答について知ってい-Xます。しかし、私はこれらの両方をしたいと思います:

  1. (ターミナルウィンドウのスクロールバーをスクロールするのではなく)マウスホイールを使用してページャーをスクロールします(これはから削除する ことで取得できます)。-X$LESS
  2. 終了後、ページャーからのコンテンツを画面に残します(通常はに追加 -Xすることで完了します$LESS)。

ケーキを食べて食べる方法はありますか?

回答:


20

lessのソースコードをハッキングすることなしにはできません。背景の話:

Lessはマウス(スクロールイベントを含む)をまったく処理できません。

端末エミュレーターは、いわゆる代替画面をサポートしています。これは、ほとんどの全画面アプリがその間切り替えて(そして、終了すると通常の画面に戻り、前のコンテンツが「復元」されて)、スクロールバックバッファーがありません。Less -Xは、指定されない限り、この代替画面に切り替えます。

多くの端末エミュレーターは、代替画面モードであり、内部で実行されているアプリケーションがマウスイベントに関心がない場合、スクロールを上または下のキープレスイベントに変換することは理にかなっていると考えました。これはハックであり、通常の画面(シェルプロンプトなどで何が起こるかを想像してください)、またはアプリケーションがマウスを処理したい場合(確かに、実際のマウスイベントを確認する必要があります)のいずれかでは有害です。ただし、デフォルトでは、これらの2つはどちらも実行中lessには保持されないため、このハッキングが始まります(それをサポートするターミナルエミュレーターが対象であり、\e[?1007hvs。\e[?1007l)。スクロールイベントは、ターミナルエミュレーターによって上下のキープレスに変換され、lessは実際のキープレスと区別できません。マウススクロールイベントを受け取りません。上方向キーと下方向キーが押されたことを確認します。

つまり、次のようになります。代替画面に切り替え、端末のハックによってスクロールイベントが少ないキープレスに変換され、終了すると通常の画面が復元されます。またはあなたがそうしないと、スクロールイベントをキープレスに変換する魔法がなくなり、スクロールイベントを理解できなくなります。

それで、何ができるでしょうか?まあ、少ないマウスサポートを実装し、スクロールイベント自体を処理する(およびデフォルト以外のクリックまたはコピー/貼り付け動作を有効にする)か、別の奇妙なハックを実装します:終了すると、通常の画面に戻った後less、最後に終了する前に表示されていた内容を繰り返して、画面一杯のコンテンツを印刷します。

実際には、基本的には次のようになります。申し訳ありませんが、忘れてください。


0

どうやら530以下にアップグレードすると、必要な機能が得られます。

http://www.greenwoodsoftware.com/less/news.530.html

バージョン487とバージョン530の違いは次のとおりです。

-Fを使用してファイルが1つの画面に収まる場合は、端末の初期シーケンスを出力しません。

新しいバージョンの「少ない」PPAが見つからなかったため、ソースパックをダウンロードしてローカルでビルドし、インストールしてください。

次のようにgitを構成します。

git config --global core.pager 'less -F -S -R -i -+X'

詳細: 「-X」なしで「less -F」を使用する方法が、1ページのみの場合でも出力を表示する方法


0

マウスホイールを使用して少ないページャーでスクロールすることは実際には可能ではありませんが、マウスホイールを使用してw3mページャーでコンテンツをスクロールすることは可能です。w3mは「優れたテーブル/フレームのサポートを備えたWWWブラウズ可能なページャー」なので、コンソールのWebブラウザーとしても使用できます。さらに、w3mをコンソールイメージビューアとして使用することもできます(すべてのターミナルエミュレータで機能するわけではありませんが、xtermでかなりうまく機能します)。w3mは「テーブル、フレーム、SSL接続、カラーおよびインライン画像をサポートしています」。とても便利なアプリケーション! スクリーンショット

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