tokuhirom's Blog

node-ncurses で日本語をつかおう!

こんにちは、金曜日の担当、素敵なレディーこと tokuhirom です。

node-ncurses で日本語をつかう方法のマトメです。node-ncurses は通常、日本語がつかえません。それはちょっとこまるので、いくつかの hack をおこない、なんとかしました。

やったこと

setlocale(3)の発行(node-setlocale)

ncurses で日本語をつかう場合には setlocale(3) を発行する必要があるからです。setlocale(3) を発行できそうな node.js のモジュールはみあたらないので、つくりました。

それが node-setlocale です。↓
http://blog.64p.org/entry/2012/07/26/180115

visualwidth.js(文字幅の計算)

http://blog.64p.org/entry/20111209/1323406456
日本語をあつかう場合は文字幅の計算をおこなわないとどうしようもないので、文字幅の計算を visualwidth.js でやります。

getch(3) のかわりに get_wch(3) をつかうようにする

https://github.com/mscdex/node-ncurses/pull/18
このパッチで、get_wch をつかうように変更することによって、unicode の文字がとれます。

まとめ

node-ncurses にいくつかのエッセンスをたすことでいわゆるマルチバイト文字を快適にあつかえるようになりました。YATTA!

【追記】

なんで w 系の API を全面的につかわないの?
→ node-ncurses は ncurses の c++ binding つかってる
→ ncurses の c++ binding に w 系の API がない
→ c++ biding に w 系の API たそうとするとマクロにまみれてて修正が困難
→ C++ binding つかわないようにするのは、全面的な書換えが発生して面倒