問題タブ [terminfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - さらに別の未知の端末タイプ
Ubuntu から を開きgnome-terminal
、ssh でOS X
.
OS X
バージョンは次のとおりです。
たとえば、次のファイルがありますxterm-256color
。
しかし、私は単純なことはできませんclear
:
terminal - Zsh の terminfo から Ctrl+Left の制御文字を取得する方法
私はterminfo
、自分の端末の左 (右、...) キーの制御シーケンスが何であるかを調べるために使用しているので、次のように便利なもの (左に移動) にマップできますzshrc
。
(これを機能させるには他にもいくつかあります。 sourceを参照してください)。私はいくつかの端末エミュレーターを使用しており、これらの制御シーケンスが変化するため、これは役に立ちます。たとえば、UbuntuでGnomeターミナルを使用ssh
してDebianボックスにアクセスし、tmux
その中で使用します...
しかし、terminfo から CTRL+LEFT (および RIGHT...)のキーコードを見つけるにはどうすればよいでしょうか? これらを単語の左/右にマップしたいと思います。
tty - なぜ terminfo[kcuu1] = '\EOA' なのですか?
私が読んでわかることからterminfo(5)
、 kcuu1 は、上向き矢印が押されたときに端末が送信するシーケンスである必要があります。^[[A
私はそれが(今話していることcat
、端末設定のめちゃくちゃなど)以外のものを見たことはありません。それで、私が使用した端末 (rxvt、gnome-terminal、iTerm) はすべてデフォルトで TERM=xterm になっているのに、なぜ kcuu1 ではないのでしょ\E[A
うか?
cuu1が であることがわかります\E[A
が、(man ページから、再び)、それは、端末が私に送信する文字列ではなく、カーソルを移動するために端末に送信する必要がある文字列です。
ところで、これはOS Xの場合です。
ncurses - tput: 不明な端末「xterm-256color」
OS X 10.10.5 を実行しています。ターミナルを開こうとするとエラーが発生します:
tput: 不明な端末「xterm-256color」
これは明らかに termcap エントリの欠落です。
OS X に「ncurses-term」をインストールする方法はありますか?
terminal - \r (改行) と \b (バックスペース) をサポートする端末はありますか?
私は素敵なPS1
フォーマッタを書きました:
次のようなプロンプトが表示されました:
トリックを使用し\r
てカーソルを最初の行の位置に戻すため、出力は====...
文字列のようになります。
\r (改行) と \b (バックスペース) をサポートする端末はありますか?
true を返す場合、 termcap
/でサポートを問い合わせる必要がありますか?terminfo
isatty()
ユーティリティが進行状況を示したときに、 wget / curl / git / hg\r
/ などで使用法が表示されます。
\b
アプリケーションが単一の回転位置で進行シーケンスを示す場合にも使用されます。
注意タイプのマシンで画像を投稿しないでください。最新のハードウェアまたはソフトウェア エミュレーターについて考えてみてください。
c++ - terminfoを使用した端末の色?
ターミナルでの色の使用を許可する C++ クラスを作成しています。すべての端末で動作するようにしたい:
- True Color (24 ビット) をサポートする端末での印刷、
- それをサポートする端末で256色(6x6x6)で、
- それ以外は基本16色。
termcap を使用して C 関数を書いたことがあるので、今回はそれを使用することを考えました。ただし、マニュアルページには次のように書かれています:
termcap データベースは、文字セル端末とプリンターの機能を記述するための古い機能です。古いプログラムでの機能のためにのみ保持されます。新しいものは、terminfo データベースと関連ライブラリを使用する必要があります。
そこで、terminfo を使用しようとしましたが、これを行う方法が見つかりませんでした。私のシステムには terminfo.h がありません (私は Debian で実行しています)。
私の質問は:
最新のツール (つまり、manpage によると、termcap ではない) を使用して、C/C++ で現在の端末の色の可能性を取得するにはどうすればよいですか?
linux - シリアル ポート コンソールを使用して Linux にログインする場合、terminfo または termcap を使用しますか?
Linux カーネルの VT サブシステムによって実装された Linux コンソールで、シリアル ポート コンソールからログインすると、terminfo または termcap を使用しますか?
haskell - Terminfo の Capability タイプの正しい使い方。モナド変換子は答えですか?
を使用して小さなプログラムを単純化するのに苦労していSystem.Console.Terminfo
ます。mappend
複数をまとめることまではCapability
できましたが、それらを評価する必要があるときはいつでも、getCapability
acase
を使用してから、結果のMaybe
. いつも同じパターン
ですから、これを行うためのより良い方法が必要だと思います。パターンマッチングが に置き換わっているように見えるMaybe
のでIO
、モナドトランスフォーマーの目的ではないかと思いました。Capability
定義を見ると、
MaybeT
ここで StackOverflow で見つけた例と似ていますが、関数であるという事実は私を混乱させます。(さらに、例を 1 つ読んだだけでは、モナド変換子を理解しているとは言えません。)
私は正しい軌道に乗っていますか?case
これを何度も何度も書くのを避けるのに役立つ別のパターンはありますか?
getCapability
タイプは次のとおりです。
terminal - 端末から画面文字を読み取る
私が調査した限りでは、terminfo
端末の画面の (x,y) 位置にある文字を照会することはできません。これはかなり予想外です。理由は次のとおりです。termcap
ioctl
- たとえば、端末から画面の寸法を読み取ることができます (例:
tput co
、tput li
)、 - 端末から入力を読み取ることができます
– この 2 つは、端末との通信が双方向であることを意味します。curses 関数 (curses ウィンドウでのみ機能します)のように*inch*
、特定の位置で文字を照会する方法は本当にありませんか?*in_wch*
c++ - リトル エンディアンの 16 ビット符号なし整数を読み取る
バイナリ ファイルの一種であるterminfoデータベース ファイルの解析を検討しています。そのストレージ形式について自分で読んで、私が直面している問題を確認できます。
マニュアルは言う -
ヘッダー セクションは、ファイルを開始します。このセクションには、以下で説明する形式の 6 つの短整数が含まれます。これらの整数は
(1) マジックナンバー (8 進数の 0432);
...
...
short 整数は、2 つの 8 ビット バイトに格納されます。最初のバイトには値の最下位 8 ビットが含まれ、2 番目のバイトには最上位 8 ビットが含まれます。(したがって、表される値は 256*秒 + 最初です。) 値 -1 は 2 バイト 0377、0377 で表されます。その他の負の値は不正です。通常、この値は、対応する機能がこの端末にないことを意味します。これがハードウェアに対応していないマシンは、整数を 2 バイトとして読み取り、リトルエンディアン値を計算する必要があります。
このタイプの入力を解析する際の最初の問題は、サイズが 8 ビットに固定されることです。そのため、サイズが正確に 8 ビットであることが保証されないため、単純な古い char は使用できません。だから私は「固定幅の整数型
int8_t
」を探していましたが、再び白黒を選択するかuint8_t
、「実装が型を直接サポートする場合にのみ提供される」と明確に述べているジレマに直面しました。では、タイプが十分に移植可能になるようにするには、何を選択すればよいでしょうか。2 番目の問題は
buffer.readInt16LE()
、リトル エンディアン形式で 16 バイトのデータを読み取る可能性のある C++ 標準ライブラリのメソッドがないことです。では、移植可能で安全な方法でこの機能を再度実装するにはどうすればよいでしょうか。
私はすでにchar
データ型でそれを読み取ろうとしましたが、間違いなく私のマシンでガベージが生成されます。infocmp
適切な入力は、コマンド (例: - )で読み取ることができます$ infocmp xterm
。