によるマニュアルページの場合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
の代わりにを実行するとless
、vt100
terminfo ページに または のエントリがない場合HomeはEnd、 がESC [
機能します。
ただし、\e[ left-scroll
を に追加し~/.lesskey
(lesskey
を実行して にコンパイル~/.less
)、ESC [
は左にスクロールしますが、 、... はすべてHome機能PageUPしなくなり、すべてが左にスクロールし、送信される余分な文字によってビープ音が鳴ります。
コードを見ると、コマンドテーブルが処理される順序がすべてです。~/.less
コマンドテーブルは最後に追加、 しかし頭に挿入、そのエントリは処理される前に組み込みのもの。
入力時にESC [
、 のエントリ\e[ left-scroll
が最初に見つかった場合はそれが処理され、 のエントリ\kD forw-screen
(多くの端末では と解釈される\e[6~ forw-screen
)が最初に見つかった場合は、それはただの接頭辞マッチ、 そしてless
さらに入力を待つ。
つまり、これは一種のバグです。修正するには、タイムアウトを追加します。ただし、短いタイムアウトを追加すると、マルチキー コマンドが使用できなくなります。ユーザーがマルチキー コマンドを入力するのに十分な時間を与えるために長いタイムアウトを追加すると、ESC [
応答が遅くなりすぎる可能性があります。
さて、 などを持つ端末には、 、にもバインドされているおよびキーPageUpも一般的に備わっているため、スクロールには代わりにそれを使用するとよいでしょう。LeftRightleft-scroll
right-scroll