ターミナルでShift +キーアップ/ダウン検出

ターミナルでShift +キーアップ/ダウン検出

どうすればいいですか?複数行を含めるかshift+up選択するターミナルメニューが必要ですshift+downncurses問題があるようです。

必ずしも高レベルの端末ライブラリが必要ではありません。私のIOが非常に単純でなければならないこと以外は、この問題に対処したいと思います。

どんな提案がありますか?

ベストアンサー1

質問の文脈で複数の項目を選択する方法を尋ねる質問なので、および(たとえば、代わりに)を参照しshift+upてください。shift+downshift-cursor-upshift-cursor-downshift-page-upshift-page-downワイヤー

これは実際には1つ以上の質問です。

  • まず、ncursesを認識する方法shift+upなど
  • ncursesメニューライブラリがこれを行うかどうか
  • そうでない場合は、これを行うためのメニューをどのように取得しますか?

まず、ncursesは移植可能な(やや少ない)特別なキーセット用に事前定義された(X / Open Curses別)定義を提供します。引用する用語情報(5)、以下を確認できます。

   key_sf                    kind   kF   scroll-forward key
   key_sleft                 kLFT   #4   shifted left-arrow
                                         key
   key_sr                    kri    kR   scroll-backward key
   key_sright                kRIT   %i   shifted right-arrow
                                         key

しかし、「上矢印キー」と表示されているものはありません。遅れた判断だけがkind調和kriと調和をkLFT結ぶことができますkRIT。 1999年に修正された特殊キーのサポートがxtermに追加される前は、従来の技術はほとんどありませんでした。

パッチ #94 - 1999/3/27 - XFree86 3.9Pf
Shift、Control、またはAltが設定されているかどうかを示すパラメータをファンクションキーに追加します。これらのコードは、PCキーボード付きのDEC VT510のJeffrey Altmanの説明に基づいています。

後でアプリケーションの混乱を減らすためにスキームが修正されました。 xtermからこの機能をコピーした他の開発者は、自分のプログラムに従うように変更しませんでした。

パッチ #167 - 2002/8/24 - XFree86 4.2.0
modifyCursorKeysShiftと同様の修飾子を使用してカーソルエスケープシーケンスを生成する方法を制御するリソースを追加します。デフォルトでは、変更されたエスケープシーケンスは常にCSIで始まり、修飾子を2番目の引数として使用して、最初の引数を反復回数として解釈するアプリケーションの混乱を防ぎます。リソースを0に設定すると、元の動作が得られます(Stephen J Turnbull、Jeffrey Altmanとのニュースグループの議論)。

また、ncursesではこれを端末記述に組み込むことが役に立ちます(ncursesはtmuxで使用されるテーブルではなく端末データベースを使用するためです)。これは、次によって導入されたユーザー定義関数の機能に依存します。ncurses 5.0。ターミナルデータベースでは、この機能はxtermに記載されています。2004年:

# 2004-07-17
#       * add xterm-pc-fkeys -TD

その中には(早ければ除く)2001年)は、xtermリソースのさまざまな組み合わせで使用できる修飾子エンコーディングのバリエーションと、xtermエンコーディングスキームとの程度が異なる同様のコンテンツを処理しようとします。

ユーザー定義関数の規則は、最初にxterm修飾子コードに対応する番号とkDNリストkUP(yourshift+downと)に追加することです。ずっと後、それは同じ意味を持つことができることがshift+upわかりました。しかし、結果として端末記述を見つけることができます(ncurses読み取りのみ可能 - 端末データベースを直接読み取る他のアプリケーションやライブラリは約16年間これを無視しました)。kindkrikDNkUP

拡張機能は次のとおりです。端末データベース

これで(パート2)、ncursesはメニューライブラリを提供します。これはSVr4メニューライブラリの再実装です(マルチバイト文字サポートなどのいくつかの拡張を含む)。マンページを参照してください。menu_driver(3x)この目的のためにncurses - 例図書館を表示します。簡単に言えば、メニューライブラリはユーザーが要求する動作を事前定義しませんが、アプリケーションはライブラリを使用して要求されたアクションを実行できます。まず、この詳細を使用する方法を見てください。

REQ_TOGGLE_ITEM
項目を選択/選択解除します。

このアプリケーションでカスタム関数を使用すると、より大きな問題が発生します。フォームライブラリとメニューライブラリを使用するほとんどのアプリケーションは、Caseステートメントの特殊キーを使用して事前定義されたシンボルに依存します。なぜならshift+up、あなたshift+downはこれを持っていないでしょう(そしてそのkind偶然がkri発見され適用されない限り)。カスタム機能の場合、事前定義されたキーコード(例:KEY_DOWNMedium)はありませんcurses.h。代わりに、ランタイムによって決定される値があります。key_defined機能。したがって、簡単なケースの説明の代わりに(以下があります。)はいKEY_SDOWNcurses.h、いくつかの間接参照が必要です。

おすすめ記事