弱りましたねぇ。
gnome-terminalで確認しました。
WM_NAMEプロパティになぞの値
WM_NAMEプロパティの内容は、以下のようになっていました。設定しているのはたぶんアプリ。
- ASCII文字のときXTextProperty.encodingがXA_STRING(31)
- 日本語混じってると228
(gdb) p xtpName
$1 = {
value = 0x451f3b8 "syasuda@syasuda-ubuntu: ~/\033$(B\262\350\301", <incomplete sequence \374>,
encoding = 228,
format = 8,
nitems = 34
}
なぞの値とアトム
で、xlsatomsコマンドでアトムの番号を調べると、
syasuda@syasuda-ubuntu:~$ xlsatoms|grep -3 STRING
28 RGB_GRAY_MAP
29 RGB_GREEN_MAP
30 RGB_RED_MAP
31 STRING
32 VISUALID
33 WINDOW
34 WM_COMMAND
--
222 CLIPBOARD_MANAGER
223 WM_PROTOCOLS
224 CYGX_CUT_BUFFER
225 UTF8_STRING
226 COMPOUND_TEXT
227 TARGETS
228 WM_DELETE_WINDOW
「226」ならCOMPOUND_TEXTでビンゴだと思うんですが、228はWM_DELETE_WINDOWに見えますな。
もしかしたらコンパイルしたXmingの中でアトムの番号が不整合を起こしているのかな。
WM_NAMEのUTF-8対応は実はFAQだった
何度確認しても、WM_NAMEの中はEUCのようなので、ググってみると妙なFAQを見つけました。*1
UTF-8 and Unicode FAQ for Unix/Linux
http://www.cl.cam.ac.uk/~mgk25/unicode.html
Application window properties: In order to assist the window manager in correctly labeling windows, the ICCCM 2.0 specification requires applications to assign properties such as WM_NAME, WM_ICON_NAME and WM_CLIENT_MACHINE to each window. The old ICCCM 2.0 (1993) defines these to be of the polymorphic type TEXT, which means that they can have their text encoding indicated using one of the property types STRING (ISO 8859-1), COMPOUND_TEXT (a ISO 2022 subset), or C_STRING (unknown character set). Simply adding UTF8_STRING as a new option for TEXT would break backwards compatibility with old window managers that do not know about this type. Therefore, the freedesktop.org draft standard developped in the Window Manager Specification Project adds new additional window properties _NET_WM_NAME, _NET_WM_ICON_NAME, etc. that have type UTF8_STRING.
「_NET_WM_NAME, _NET_WM_ICON_NAME」?
xpropで眺めると、xtermはそんなプロパティを持っていないようですが、gnome-terminalは持ってました。
syasuda@syasuda-ubuntu:~/画像$ xprop|grep NAME
WM_LOCALE_NAME(STRING) = "ja_JP.UTF-8"
WM_ICON_NAME(COMPOUND_TEXT) = "syasuda@syasuda-ubuntu: ~/画像"
_NET_WM_ICON_NAME(UTF8_STRING) = 0x73, 0x79, 0x61, 0x73, 0x75, 0x64, 0x61, 0x40, 0x73, 0x79, 0x61, 0x73, 0x75, 0x64, 0x61, 0x2d, 0x75, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x3a, 0x20, 0x7e, 0x2f, 0xe7, 0x94, 0xbb, 0xe5, 0x83, 0x8f
WM_NAME(COMPOUND_TEXT) = "syasuda@syasuda-ubuntu: ~/画像"
_NET_WM_NAME(UTF8_STRING) = 0x73, 0x79, 0x61, 0x73, 0x75, 0x64, 0x61, 0x40, 0x73, 0x79, 0x61, 0x73, 0x75, 0x64, 0x61, 0x2d, 0x75, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x3a, 0x20, 0x7e, 0x2f, 0xe7, 0x94, 0xbb, 0xe5, 0x83, 0x8f
え゛!?
じゃぁ、_NET_WM_NAMEが取れる場合はそれを取るようにしたらおわりとちゃう?ていうか、XGetWMName()@libX11.aで対応してる話のような気も。
残念ながらXming_69031のソースには、_NET_WM_NAMEは定義されていないので、簡単には対処できまへんな。Xが古いんやね。
SetWindowTextWを呼び出すように仮修正もしたのになぁ。EUCを変換しますかねぇ。
とにかく_NET_WM_NAMEがない状態ではウィンドウマネージャがよきにはからってくれていただけのことで、タイトルバーの文字化けは10年位前でもググるとひっかかる息の長い話題ですな。
astec-xのできの良さを思い知る感じ?
参考にしたリンク:
MultiByteToWideChar
http://msdn.microsoft.com/ja-jp/library/cc448053.aspx
Xlib Programming Lectures
ウィンドウマネージャとのやりとり
http://homepage3.nifty.com/rio_i/lab/xlib/013wm.htm
共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)
http://docs.sun.com/app/docs/doc/816-4038/6ma9dsvep?l=ja&a=view
→CDEは関係なくない?
コメント