terminfo u6 文字列の解析

terminfo u6 文字列の解析

見ている用語情報そしてパラメータ化された文字列

いくつかの例は次のとおりですinfocmp -1 xterm

  • cud=\E[%p1%dB、与えられたパラメータ13

    • \E=><ESC>
    • [=>[
    • %p1プッシュパラメータ1(13)スタックに
    • %dPOPとスタックで符号付き10進数で印刷=>13
      • 結果:<ESC>[13B
  • csr=\E[%i%p1%d;%p2%dr、与えられたパラメータ13, 16

    • \E=><ESC>
    • [=>[
    • %i増分パラメーター1と2:++ 13、++ 16は14、17を提供します。
    • %p1プッシュパラメータ1(14)スタックに。
    • %dスタックからPOPし、符号付き10進形式で印刷します。 =>14
    • ;=>;
    • %p2プッシュパラメータ2(17)スタックに。
    • %dスタックからPOPし、符号付き10進形式で印刷します。 =>17
    • r=>r
      • 結果:<ESC>14;17r

ところで…これをどのように読みますか?

  • u6=\E[%i%d;%dR

処理後にパラメータ1と2(存在する場合)を追加します\E[%i<ESC>[しかし、スタックは空です。これらの2つを%dスタックから取り出して両方の数字を印刷しないでください。

ベストアンサー1

一つはない%p表示はncursesの珍しい点です:terminfoコンパイラ(チック)すべての用語情報を識別するために(使用%p1到着表示パラメータ)またはtermcap(によって異なります)習慣パラメータとして)。これは合法でしょう。用語キャップ表現する。 ~からチックtermcap 式の処理方法がわかると、表示された文字列は、追加の翻訳なしで「十分に近い」。

次のコマンドを使用して、ncurses が実行する操作を確認できます。tput、例えば、

tput u6 40 50

与えられる(引数の反転に注意)

^[[51;41R

式が次のように与えられた場合

u6=\E[%i%p2%d;%p1%dR

同じ結果が生成されます。

u6-u9 機能は初期段階です。拡大するncursesに記録端末データベース:

# INTERPRETATION OF USER CAPABILITIES
#
# The System V Release 4 and XPG4 terminfo format defines ten string
# capabilities for use by applications, <u0>...<u9>.   In this file, we use
# certain of these capabilities to describe functions which are not covered
# by terminfo.  The mapping is as follows:
#
#       u9      terminal enquire string (equiv. to ANSI/ECMA-48 DA)
#       u8      terminal answerback description
#       u7      cursor position request (equiv. to VT100/ANSI/ECMA-48 DSR 6)
#       u6      cursor position report (equiv. to ANSI/ECMA-48 CPR)
#
# The terminal enquire string <u9> should elicit an answerback response
# from the terminal.  Common values for <u9> will be ^E (on older ASCII
# terminals) or \E[c (on newer VT100/ANSI/ECMA-48-compatible terminals).
#
# The cursor position request (<u7>) string should elicit a cursor position
# report.  A typical value (for VT100 terminals) is \E[6n.
#
# The terminal answerback description (u8) must consist of an expected
# answerback string.  The string may contain the following scanf(3)-like
# escapes:
#
#       %c      Accept any character
#       %[...]  Accept any number of characters in the given set
#
# The cursor position report (<u6>) string must contain two scanf(3)-style
# %d format elements.  The first of these must correspond to the Y coordinate
# and the second to the %d.  If the string contains the sequence %i, it is
# taken as an instruction to decrement each value after reading it (this is
# the inverse sense from the cup string).  The typical CPR value is
# \E[%i%d;%dR (on VT100/ANSI/ECMA-48-compatible terminals).
#
# These capabilities are used by tack(1m), the terminfo action checker
# (distributed with ncurses 5.0).

最後のコメントを確認してください練習u8や、u9しかしu6、では何もしませんu7

拡張機能が追加されました1995年初め:

# 9.3.4 (Wed Feb 22 19:27:34 EST 1995):
#       * Added correct acsc/smacs/rmacs strings for vt100 and xterm.
#       * Added u6/u7/u8/u9 capabilities.
#       * Added PCVT entry.

複数のアイテムに含まれていますが、真実性(多くはありません:18,699行に16回発生しましたterminfo.src)この機能を使用している既知のユーザーはいません。実際、ncursesには次のことができる場所があります。できるこれを使用してifdef'dデバッグコードを作成しました(tty_update.cファイル)ですが、ハードコーディングされたエスケープシーケンス(「ANSI互換」と表示されます)を使用します。

ユーザー不在の理由は次のとおりです。

  • 任意のterminfo式を反転するのは、ビューよりも困難です。
  • xterm と同様の端末は、これらのエスケープシーケンスを解釈します。

存在するECMA-48、これらは(u7)デジタルSR(デバイスステータスレポート)および(u6)心肺蘇生術(活動位置報告)。

おすすめ記事