以前、コンソールでちょっとした処理を行うプログラムを作成した時に、見栄えをよ
くするために、cursesを用いて、カラー表示を行いました。
initscr();
start_color();
init_pair( ... );
color_set( ... );
等々を使用。
クライアントからの要求で、日本語対応にするためにkonを起動して、このプログ
ラムを実行したところ、この色処理ルーチンが使えなくなってしまいました。ただ
し、
mvprintwやmvgetchなどは普通に動いているので、curses自体が無効になったわけ
ではないらしい。
kon.cfg内を見て、STDPELの設定を変えると、バックグラウンド(1番目のカ
ラー)とフォアグラウンドカラー(8番目のカラー)が常に使っていることだけは確
認できました。
kon起動時に、特定の場所の文字やスペースのフォアグラウンドカラーやバックグ
ラウンドカラーをcursesを用いた時と同じように変更することは可能でしょうか?変
更する場合、どのようなライブラリーが必要となり、どのような関数を用いてやる必
要があるのでしょうか?ご助言下さい。
ちなみに、OSはFreeBSD4.7またはFreeBSD5.2です。
--
**************************************
*** 田淵義弘 in SPOONsoftware
*** E-Mail : tab...@spoonsoftware.com
*** HP : http://www.spoonsoftware.com
**************************************
> 以前、コンソールでちょっとした処理を行うプログラムを作成した時に、見栄えをよ
> くするために、cursesを用いて、カラー表示を行いました。
>
> initscr();
> start_color();
> init_pair( ... );
> color_set( ... );
>
> 等々を使用。
>
> クライアントからの要求で、日本語対応にするためにkonを起動して、このプログ
> ラムを実行したところ、この色処理ルーチンが使えなくなってしまいました。ただ
TERM=kterm-color とかでカラー表示できたりしませんか?
最近の FreeBSD は知りませんが、以前は termcap に kon のエン
トリがなくって、kon を起動するとデフォルトで vt100 になって
いたと思います。
# Linux にはたいていあるみたいなんですけどね。
で、vt100 の termcap には Co とかがなくって、色が表示できな
い端末だということになってしまっているんだと思います。
# 確信はありませんが。
--
01/07 22:46頃
水戸
早速の返答ありがとうございます。
えーと、ちょっと分からないので教えていただけますか?(汗)
TERM=kterm-color
にするというのは、kon.cfgとかでしょうか?或いはプログラム内のsettermか何か
を使うと言うことなのでしょうか?
TERM=というので、具体的なドキュメントが見つからず、どのようにやっていいの
かが分かりませんでした。お手数をおかけして大変申し訳ありませんが、ご教示いた
だければありがたいです。
> TERM=kterm-color
>
> にするというのは、kon.cfgとかでしょうか?或いはプログラム内のsettermか何か
> を使うと言うことなのでしょうか?
> TERM=というので、具体的なドキュメントが見つからず、どのようにやっていいの
> かが分かりませんでした。お手数をおかけして大変申し訳ありませんが、ご教示いた
> だければありがたいです。
環境変数の TERM のことです。
$ printenv TERM
vt100
となってるんじゃないかなぁ、ということで、
$ TERM=kterm-color
$ your_program
とすればいいのかなと。
curses などは通常この TERM 環境変数から端末タイプを取得し、
termcap や terminfo といった端末データベースを参照して、この
端末は強調表示が可能かどうかとか、色を表示することができるか
どうかとかいった情報を得るわけです。
マニュアルは environ、termcap、terminfo、initscr あたりでしょ
うかね。
ちなみに、vt100 ってのは、むかーしあったVT100という有名な端
末のことなんですが、現在の xterm や kterm といった多くの端末
エミュレータと呼ばれるソフトウェアはこの端末の動作を模倣して
いるため、環境変数 TERM が vt100 になっているというのは悪い
ことではないんです。
でも、VT100 では色が表示できなかったので、termcap なんかには
「色表示できません」みたいな情報が入っているわけで、curses
はこれを見て、ほんじゃ色を付けるためのエスケープシーケンスを
出力しても無駄だから出さないねっていう感じで処理するんだと思
います。
ということで、「色表示できます」って端末タイプをTERM環境変数
に指定することで解決するのではないかということになって、そう
いうので思い付いたのが kterm-color というものでした。
termcap の場合、/etc/termcap に Co#8 みたいなのがある端末は
色を表示できるものと思ってかまわないと思います。(厳密には違
いますが。)
もし、kterm-color がなかったらそういうやつを探してみてくださ
い。
そういや、kon.cfg とかで TERM を指定することができるかどうか
は知りません。できるようだったら私も知りたいです。
--
01/09 01:21頃
水戸
ありがとうございます!感動です!
とりあえずTERMをkterm-colorにしてもまともには表示できなかったのですが、ご
指定のファイル内(/etc/termcap)にvt100-colorがあったので、それにしてみたら
見事動きました。感謝です。
具体的なメカニズムまで教えていただきありがとうございました。以下、コマンド
プロンプトを書いておきます。
konの起動
% kon
ターミナルのセット
% setenv TERM vt100-color
プログラム起動
% myprogram
バッチにでも組んでおこうと思います。助かりました!!
--
In article <m3k742l...@kzin.dip.jp>, Mito <co_...@ybb.ne.jp> wrote:
>でも、VT100 では色が表示できなかったので、termcap なんかには
>「色表示できません」みたいな情報が入っているわけで、curses
>はこれを見て、ほんじゃ色を付けるためのエスケープシーケンスを
>出力しても無駄だから出さないねっていう感じで処理するんだと思
>います。
話としては逆ですよね。「色表示出来ません」と書かれている訳
ではなくて、「色表示出来ます」と書かれていないというのが正解
です。結果としては同じことかも知れませんが。
色関連の capability が現れたのは SVR4 以降のことなので、そ
れ以前に現役を退いた端末 entry には「出来ます」とも「出来ま
せん」とも書かれていないことが多いと思います。
>termcap の場合、/etc/termcap に Co#8 みたいなのがある端末は
>色を表示できるものと思ってかまわないと思います。(厳密には違
>いますが。)
Co は max_colors なので、実際に色属性指定 sequence を表し
ている AF とか Sf とかの方がもっと重要だと思いますよ。
libncurses の色関数だと厳密に見ているので、この他 pa とか
op とか色々必要になりますが、termcap/terminfo 情報を見て色指
定する時に最低限見なくてはならないのは AF なり Sf なりですよ
ね。これが判らないんじゃどうやって色指定していいんだか。
>そういや、kon.cfg とかで TERM を指定することができるかどうか
>は知りません。できるようだったら私も知りたいです。
残念ながら FreeBSD の実装では hard coat されているみたいで
すね。
Linux だと TERM=kon という entry がわざわざ用意されていて、
ちゃんと色関連の設定も書かれているので、vt100 とはまた別物と
して扱えるのですが。
そもそも kon の vt100 emulation は完全ではないので、素直に
termcap/terminfo から vt100 entry を拾ってくると、瑣末な差異
のせいで色々と支障が生じるんですよね。
Linux が kon を OS の一部として扱っているのに対して、*BSD
では飽くまでも ports というよそ者扱いなので、その違いが元凶
になっているのかも知れません。
--
しらい たかし
> 残念ながら FreeBSD の実装では hard coat されているみたいで
> すね。
hard coat ってなんですか?
どうも表面加工技術の用語らしいですが……
神田敏広 <ca...@kgc.co.jp>
<btmlj2$1mok$1...@nsvn01.zaq.ne.jp>の記事において
shi...@unixusers.netさんは書きました。
shirai> Linux が kon を OS の一部として扱っているのに対して、*BSD
shirai> では飽くまでも ports というよそ者扱いなので、その違いが元凶
shirai> になっているのかも知れません。
「OS の一部」かどうかって, どのように判定すればいいのでしょうか?
そもそも「Linux」によっては kon が入ってないのだってあるし....
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男