管理者権限の無いマシンで Common Lisp の GUI 開発をする場合,GUI ツールキットをローカル・ディレクトリにインストールせざるを得ない.管理者権限の無いマシンで ltk を使う必要に迫られたので,Lisp コードからどのように Tk を呼び出しているのか調べてみた.
もう少し細部を見てみよう.wish
の起動は start-wish
関数内(GitHub 参照)の
(do-execute *wish-pathname* *wish-args*)
(GitHub 参照)で行われる.*wish-pathname*
は以下のように設定されている(GitHub 参照).
(defvar *wish-pathname*
#+freebsd "wish8.5"
#-freebsd "wish")
したがって,*wish-pathname*
にローカルインストールの wish
へのパスを setf
で設定しなおしても良いだろう.
wish
の起動を担当する do-execute
関数は別のプロジェクトでも再利用可能な興味深い関数だ(GitHub 参照).この関数は,起動するプログラムと Lisp とを標準入出力を介してつなぐ stream
を返す.このストリームの読み書きは read-wish
と send-wish
関数が担っている.
余談だが, GTK+3 は CFFI を使って直接 C ライブラリを呼び出しているので,ソースコードから define-foreign-library
を検索して必要なライブラリのファイルを自分で指定し直すか,ライブラリのロードパスを適切に設定すれば良いと思われる(まだ試していないが…).