ウィンドウタイトルが文字化け

  • 投稿日:
  • by
  • カテゴリ:



こまりますねぇ。


このままではスクリーンショットが恥ずかしい。


ウィンドウタイトルの文字化けサンプル(2010/04/12追記):


f:id:syasuda:20100412130307p:image



ソースを見ると、それらしい場所がイカにもだめっぽい感じ。


@ winmultiwindowwm.c



/* Set the Windows window name */
GetWindowName (pWMInfo->pDisplay, iWindow, &pszName);
if (pszName)
{
/* Get the window attributes */
XGetWindowAttributes (pWMInfo->pDisplay,
iWindow,
&attr);
if (!attr.override_redirect)
{
SetWindowText (hWnd, pszName);
winUpdateIcon (iWindow);
}

SetWindowTextをW付きにして、中身をごにょっと変換すればよいだけのはず。


例えば、ググって知ったminttyではそのように実装されてます。


@ winmain.c



void
win_set_title(char *title)
{
int wlen = cs_mbstowcs(0, title, 0);
if (wlen >= 0) {
wchar wtitle[wlen + 1];
cs_mbstowcs(wtitle, title, wlen + 1);
SetWindowTextW(wnd, wtitle);
}
}

公開リポジトリでログを見たら、2009年に手が入ってました。



でまぁ、ソースがある69031版のビルドを試みるわけですが、情報は、http://www.freedesktop.org/wiki/Xming/Buildingしか見当たらず。


とりあえず手元のubuntuでやってみると、make World~~~でこんなエラーが。



fsconvert.c: In function ‘_fs_convert_props’:


fsconvert.c:110: error: ‘SIZE_MAX’ undeclared (first use in this function)


fsconvert.c:110: error: (Each undeclared identifier is reported only once


fsconvert.c:110: error: for each function it appears in.)


make[5]: *** [fsconvert.o] エラー 1



SIZE_MAXが未定義ということで、#include地獄行きですな。地獄めぐりをしなければなりません。ビルド通すだけなら、1000000とかで上書きしちゃえばいいんですけどね。


# 次は、それやって当りをつけてみよう

で、しばらくemacsでfind-grepしてたんですが、どうにもC-xがWindowsのGlobal IMEの亡霊*1を召喚してしまうらしく、「ESC C-x」に自動変換されるという現象に悩まされまして。*2


とりあえずWine1.2とサクラエディタでお茶を濁すことに。


f:id:syasuda:20100408001602p:image

wineは使ったことない*3のですが、今後はemacsなんかお勧めしないでいいですな。


# いまどきはEclipseがデフォルトのような気もする


で、Xmingの問題はWebRelease版ではとっくに直っている気もします。無駄のための無駄のような作業もリハビリにはちょうど良い感じです。




*1:消したはずなんだけどなぁ


*2:ESC連打で直るのがこれまた不思議


*3:Linux用picasaで知らないうちに使っていることはありましたが