ncursesを使う
Common Lispにはcl-ncursesというncursesライブラリあり。
まずはインストール。
(require 'asdf-install) (asdf-install:install 'cl-ncureses)
簡単なサンプルを作ってみる。
sample1.lisp
(asdf:oos 'asdf:load-op :cl-ncurses) (defun print-msg (y x msg) (cl-ncurses:move y x) (cl-ncurses:printw msg) (cl-ncurses:refresh)) (defun sample1() (format t "*ncurses sampel1~%") (cl-ncurses:initscr) (print-msg 5 15 "Hello, world!") (sleep 2) (cl-ncurses:endwin) (format t "*end~%")) (sample1)
実行してみる。
$ sbcl * (load "sample1.lisp")
動いた!
日本語は表示できるかな?
「Hello, world!」 → 「こんにちは、世界!」
に変更して、UTF-8で保存。
実行すると、文字化けする。
こりゃいかん。
Google先生に聞いてみると、ncursesで日本語を使用するには libncurseswを使えば良いようだ。
cl-ncursesのどこかでlibncursesを参照しているんだろうな。
これをlibncurseswにすれば日本語を表示できるかも。
cl-ncursesをlibncursesでgrepしてみると、
package.lispでヒット。
(defparameter *ncurses-path* #-win32 (find-foreign-library "libncurses" ; ←ここをlibncurseswに変更する。 *ncurses-search-paths* :drive-letters '("C" "D" "E") :types '("so" "dylib" "a" "dll")) #+win32 (find-foreign-library "pdcurses" *ncurses-search-paths* :drive-letters '("C" "D" "E") :types '("dll")) )
上記のlibncursesをlibncurseswに変更する。
早速実行だ。
うまく表示できた。
cl-ncursesのREADMEを読むと、uffiという仕組みを使って
ライブラリを実装しているということだ。
なかなか面白いので、いろいろ試してみよう。