Shift-Space in less


9

最新のWebブラウザーやテキストコンテンツを含むその他のソフトウェアでは、Space多かれ少なかれ画面全体を下にスクロールします。ShiftSpaceすべてをスクロールアップしますless

どのようにShiftSpaceして上にスクロールすることができlessますか?または、代わりに、その仕事を実行できる別のポケットベル(POSIX互換性が唯一の要件)がありますか?

一部の端末エミュレータと一部の端末UIライブラリ(ncurses?)が認識されないと言われましたShiftSpace。それは有効な問題ですか?


PgUpボタンの何が問題になっていますか?十分に大きくありませんか?
goldilocks 2013

@goldilocks:他のツールでShift-Spaceを使い慣れている場合は特に、Shift-Spaceを使いたいことに何の問題もありません。lessSpaceとShift-Spaceを区別するのは不可能です。
キーストンプソン

端末(エミュレータ)をに送信するbか、^B(0x2)に構成することができます<shift-Space>。注bだけ多くのキーボード構成でスペースバーの上にある
ステファンChazelas

@KeithThompson:ちょうどフレンドリーなジャイブを望みます。私は共感します。/さまざまな一般的なツールとして「検索テキスト」として普遍的に採用したいのですが、同時に、1つの(普遍的に認識可能な)キーストロークで実行できることをさらに簡単にする、過度な大麻狂の基準を課すことに警戒しています。この場合、それは技術的な制限(200_successの回答を参照)であり、説明するcurmudgeonlyデザインではないことを学ぶのは興味深いことです。
goldilocks 2013

1
@ KeithThompson、translationsVT100ウィジェットのリソースを参照してください。
ステファンChazelas

回答:


6

技術的な制限によるカルチャークラッシュを提起されたと思います。以来Shift+は、Space同じ出力を生成Space、同一のUnixのターミナルモデルを扱い、それらを。2つを区別するには、キーアップ/キーダウンイベントをサポートするプログラミング環境が必要です。これは、X11と、再マッピングキーをサポートするターミナルエミュレータで可能です。Shift+ Spaceからへの再マッピングの例PageUp

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~

1
ほとんどの端末エミュレータはキーの再マッピングをサポートしているため、ほとんどの端末エミュレータを使用してそれを行うことができます(xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'たとえば、xtermで、またはと同じシーケンスを送信します<PageUp>)。もちろん、シフトキーを押したままテキストを入力するのは面倒です。
ステファンChazelas

1

端末エミュレーターでは、この機能により、Shiftキーを押したままにすると、スペースが埋め込まれた大文字のテキストを入力できなくなります。たとえば、「It's A Title」と入力したい場合は、「A」と「T」の間のShiftキーを離す必要があります。押したままにすると、カーソルが移動し、入力した残りの部分の位置がずれます。スクロールアップ機能で得られるものよりもずっと煩わしいと思います。

テキストを入力するときに通常の動作をし、Spaceが下にスクロールするたびに上にスクロールするには、アプリからの再設計と強力な協力が必要です(たとえば、アプリでShift + Spaceが送信するものを切り替えることができるなど)、それが起こらないと確信しています。

主な違いは、コンテンツを編集しているか、表示しているかに関係なく、GUIアプリが「コンテキスト」を認識していることです。ターミナルエミュレータはこれを知る方法がありません。


1

端末エミュレータは、Spaceおよびに同じ文字を送信しますShift+Space。そうしないと、Shiftキーを押しながらテキストを入力するのが面倒になります(その引数を展開する@egmontの回答を参照してください)。

ただし、Shift+Spaceデフォルトでスペースを挿入することになる文字のシーケンスにマッピングすることで、この問題を回避できますless。そのため、このようなキーを押したときに上にスクロールするようにアプリケーションを構成できます。

たとえば、そのようなシーケンスは次のようになります` DEL SPC(BSが文字であるシステムではDELを変更BSしますerase)。

の場合xterm、リソースを追加します。

XTerm.VT100.translations: #override \
  Shift <KeyPress> space: string("`") string(0x7f) string(" ") 

そして、次のように構成lessします:

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -

1

lessは現在これをサポートしていませんが、間違いなく追加できます

プログラムがxterm制御シーケンスを使用して、端末にmodifyOtherKeys書き込む\e[>4;2mことにより2 に設定 する 場合、xtermアクティブな修飾キーに関する追加情報でキーに注釈を付けます。xterm SpacemodifyOtherKeysアクティブになっているキーの場合、Shift+ Spaceはに変わり\e[27;2;32~ます。lessこれをShift+ として適切に解釈しSpace、上にスクロールする必要があります。

これは間違いなくxtermで機能しますが、すべての端末アプリケーションで機能するわけではありません。ただし、このエスケープシーケンスをオンに認識しない端末は、そのエスケープシーケンスをmodifyOtherKeys無視し、Shift+ を押したときにプログラムに通常のスペース文字を送信し続けますSpace

xtermのWebサイトには、modifyOtherKeysコードの計算方法を説明する非常に詳細なページがあります。https//invisible-island.net/xterm/modified-keys.html

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