Esc- [が `less`から左にスクロールしないのはなぜですか?

Esc- [が `less`から左にスクロールしないのはなぜですか?

~によるとマンページの場合、lesskey次のキーは左スクロールと右スクロールにバインドされています。

\e[       left-scroll
\e]       right-scroll
\e(       left-scroll
\e)       right-scroll
\kl       left-scroll
\kr       right-scroll

矢印キーとEsc-(/は右にスクロールするのと同じようにうまく機能しますEsc -)が、左にスクロールしてもうまくいきません。代わりに、コマンドラインプロンプトにのみ表示されます。Esc-]Esc-[

ESC[

~/.lesskey回避策として、関数に次の行を追加してください。

\e[ left-scroll

しかし、なぜ基本的には機能しないのですか?

Debian StretchとKubuntu 18.04のXFCE4とさまざまな端末エミュレータでこの動作を観察しました。

$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

バグレポートを提出することを検討しましたが、既知のバグと機能要求のリスト これが既知の動作であることを示しています。

改善依頼

[。 。 。 ]

参照番号:175

実装バージョン:322

ESC-[の代替コマンドが追加されました。

これが実際に制限ですかless、それとも端末がEscapeキーを処理する方法の問題ですか?

答え1

これは、またはまたは...ESC [などの一部の端末の複数のファンクションキーによって送信される一連の文字の先頭でもあるためです。これらの機能は特定のタスクにも関連付けられています。HomeEndPageUpless

したがってless、受信すると、ESC [より多くの時間を待ちます(他のアプリのようにタイムアウトは発生しません)。

私の端末では、ESC[6~PageDown押すとあなたのように見えますAlt+[ESC [ただし、入力すると下6~スクロールします。

TERM=vt100 less代わりに、terminfoページlessまたはエントリなしでvt100実行すると、動作することがわかります。HomeEndESC [

ただし\e[ left-scroll、に追加し~/.lesskeylesskeyコンパイルを実行すると、左にスクロールが機能しますが、すべて、...操作が停止し、すべて左にスクロールし、送信する追加の文字がビープ音になることがわかり~/.lessます。ESC [HomePageUP

コードを見ると、コマンドテーブルが処理される順序についてです。コマンド~/.lessのリストは次のとおりです。最後に追加しました、しかし頭を挿入そのため、対応する項目が処理されます。今後内蔵。

入力時にESC [項目が最初に見つかった場合は処理され、項目が最初に見つかった場合に処理されます(多くの端末ではこれは次のように変換されます)。\e[ left-scroll\kD forw-screen\e[6~ forw-screenこれはただプレフィックスマッチless追加入力を待っています

だからこれは間違いです。解決策はタイムアウトを追加することです。しかし、より短いタイムアウトを追加することは、マルチキーコマンドを放棄することを意味します。ユーザーがマルチキーコマンドを入力するのに十分な時間を提供する長いタイムアウトは、応答が遅すぎる可能性がESC [あります。

これで、PageUp背中のある端末には通常、にもバインドされたLeftキーがあるため、スクロールに使用できます。Rightleft-scrollright-scroll

関連情報