2000-06-02 (Fri)
はい,5月度の月次決算終了。
清文社から本が3冊,アスクルからMOディスク10枚到着。なかなか早い。2000.05.31
はい,5月度の月次決算終了。
清文社から本が3冊,アスクルからMOディスク10枚到着。なかなか早い。2000.05.31
夏物のスーツを注文したり。
キーボード,マウス,ディスプレイの延長ケーブルを購入。PCを押し入れにしまう。
ミラーサイトを立ち上げてみたり。Netsphere Laboratories
会社の人間と飲みに行ったり。
昨日,今日と出張。昨日は岡山,広島,今日は福岡。かなり慌ただしい。
Cマガジンの6月号がなかなか笑える。ちゃんとC言語の規格など原典を見て書くように。一例を挙げると,errnoをグローバル変数と仮定してはならない。というか今時のシステムでグローバル変数な訳ないだろ。
朝から明石へ。昼食をご馳走になる。夕方芦屋でバンド練習。その後焼肉定食。
2000.05.28の関係で三宮でボーリングと飲み会,花火。ボーリングたぶん新記録,168。
xterm-utf8のXIMパッチを書く。が,xtermのオリジナルが文字,バイト,カラムの区別をしてないため,[Backspace]などがかなりおかしい。
ボーナス? でも寸志。
代休。笑っていいともを見たり。夕方から梅田へ。やや歪みが,あるいは僅かな退行か,で何が?
うっかりWeb日記の検索ができなくなってたのを修正。
パッチをまとめて公開するページを作成。<patches>
#include <stdio.h> #include <assert.h> #include <string.h> #include <X11/Xlib.h> static const char* FONT_NAME_UNI = "-misc-fixed-medium-r-normal-ja-18-*-*-*-*-*-iso10646-1"; GC gc_uni; XFontStruct* font_uni = NULL; void onExposed(const XExposeEvent& e) { static XChar2b text_uni[2]; memset(text_uni, 0, sizeof(text_uni)); text_uni[0].byte1 = 0x00; text_uni[0].byte2 = 0x41; text_uni[1].byte1 = 0x30; text_uni[1].byte2 = 0x42; // "Aあ" int x = 10; int y = 30; for (int i = 0; i < 2; i++) { XDrawString16(e.display, e.window, gc_uni, x, y, text_uni, 2); x += XTextWidth16(font_uni, text_uni, 2); } } int main() { Display* disp = XOpenDisplay(NULL); Window top = XCreateSimpleWindow(disp, RootWindow(disp, 0), 400, 200, 400, 100, 2, BlackPixel(disp, 0), WhitePixel(disp, 0)); XSelectInput(disp, top, ExposureMask); XMapWindow(disp, top); font_uni = XLoadQueryFont(disp, FONT_NAME_UNI); assert(font_uni); gc_uni = XCreateGC(disp, top, 0, NULL); XSetForeground(disp, gc_uni, BlackPixel(disp, 0)); XSetFont(disp, gc_uni, font_uni->fid); while (true) { XEvent e; XNextEvent(disp, &e); if (e.type == Expose) onExposed(e.xexpose); } return 0; }
Xのフォントにはアプリケーション・プログラムから見れば,1バイトフォントと2バイトフォントがある。Unicodeフォントは2バイトフォントになっている。
2バイトフォントでもフォントの取得,GCへの設定は同じだが,表示は違うAPIでする。
int XDrawString16(Display* display, Drawable d, GC gc, int x, int, y, const XChar2b* string, int length);
表示自体はXChar2b型への変換とXDrawString16()関数を用いるだけで,別に難しくない。しかしUnicodeフォントが固定幅フォントの場合,ラテン文字も漢字も全部同じ幅になってしまって,見た目に違和感がある。
UTR #11: East Asian Width によって,full-widthのものを専用のフォントで表示するのがいいだろう。
Unicodeライブラリには幾つかある。
unicode.org
に移転]
libunicode
. [2021-09] 廃れた. はるか昔の Pango-0.6 から v0.11 まで (2000年頃) に使われていたが、現在では Pango も依存していない。
(2005.4.29) この日の内容は、加筆のうえ、ICUを使うに移動しました。
follow-up(s): 2000.06.28
今さらながらXFree86でのjp106キーボードの設定。
次のようになっているのを,
XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "pc101" XkbLayout "us"
次のように変更する:
XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "jp(jp106)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "jp106" XkbLayout "jp"
なぜまだ続く,fj.comp.lang.c,fj.comp.lang.c++ の malloc & free話。
須磨水族園。ハーバーランド。芦屋の居酒屋。2x2。4人でワインを3本空ける。ふむ,ワイン1本ぐらいなら大したことない。
follow-up(s): 2000.06.18
爆睡して45分遅刻。大したことあるやん。2000.06.17
CGI検索サイト。次の二つぐらい:
Emacs 20にruby-modeを追加。
# cp ruby-mode.el /usr/local/share/emacs/site-lisp
;; ruby-mode (autoload 'ruby-mode "ruby-mode" "Major mode to edit ruby files." t) (setq auto-mode-alist (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
自動色付けなどをしてくれる。
会社の人間と回転寿司に行ったり。
定期券をなくす。昨日改札で取り忘れたらしい。仕方ないので切符を買って会社へ。帰り,駅で聞いてみる。お,届いてるやん。
午前中奈良,午後京都へ出張。
京都に予定より早く着いたので,ちょっとぶらぶら。京都大丸でなかなかのティーを楽しんだり。
会社の飲み会でしゃぶしゃぶ。うちの部署って飲み会多いよね。まぁ,経理・財務はストレス強いから。
二次会でホモ的なバーへ10人ぐらいで雪崩れ込む。男二人で愛を語り合う世界。うひょー。
昼からバンド練習。ロイホでカレーを食べる。1/144 Qubeleyを買う。
follow-up(s): 2000.07.22
トップページにInfoseekとYahoo! JAPANの検索機能を付けてみる。といっても大したことなく,HTTPリクエストを転送してるだけ。
(2005.4.3) この日の内容は、加筆の上、C++での例外処理について に移動しました。
(2005.5.15) この日の内容は、加筆・修正のうえ、ICUを使う へ移動しました。