clg

Common Lisp(CMUCL) で GUI をしよう。

準備

clgは SourceForgeからダウロードできます。
tar zxf clg-0.51.tar.gz
export CMUCLLIB=/usr/share/common-lisp/source/cmucl/lisp
./configure
cd cmucl
make
make test
以上で、サンプルが動きます。
さらに、(require 'gtk) で動くようにします。
gtk.system
;;;;;-*- lisp -*-

(in-package :common-lisp-user)

(setf (logical-pathname-translations "cl-gtk")
      (quote (("obj;*.*.*" "/home/ancient/letter/lisp/clg-0.51/cmucl/*.*.*")
              ("**;*.*.*" "/home/ancient/letter/lisp/clg-0.51/**/*.*.*"))))

(make:defsystem
 gtk
 :depends-on (aserve ancient)
 :source-pathname (translate-logical-pathname "cl-gtk:obj;")
 :components ((:file "cl-gtk")
	      (:file "site"
		     :depends-on ("cl-gtk"))))
site.lisp
(in-package :gtk)

;;Localeを設定
(gforeign:define-foreign set-locale () gforeign:none)
(set-locale)

;;日本語を表示できるように
(rc-parse-string "
style \"default\"
{
    fontset = \"-misc-fixed-medium-r-normal--14-*-*-*\"
}

widget_class \"*\" style \"default\"
")
上記の二つのファイルを clg-0.51/cmucl に作成し、 make:*central-registry* のディレクトリうちの一つに、 gtk.system のシンボリックリンクをはります。

Hello World

しきたりに従い、Hello World です。
hello.lisp
(require 'gtk)

(setf window (gtk:window-new :toplevel))
(setf label (gtk:label-new "Hello World(こんにちは)"))
(gtk:container-add window label)
(gtk:widget-show-all window)
もう一つの Hello World
(require 'gtk)

(setf window (gtk:make-window :type :toplevel :title "Hello World"
			      :auto-shrink t :visible t))
(gtk:make-label :label "Hello World(こんにちは)" :parent window :visible t)

戻る
ancient@s6.xrea.com