McCLIM是Common Lisp的UI組件,詳細信息見:https://www.oschina.net/p/mcclim 或 javascript
該博客源碼來自視頻:https://www.youtube.com/watch?v=-NA2Payslysjava
環境信息:ubuntu
OS: ubuntu 18.04app
REPL: emacs + slime + sbcl框架
package system: quicklispui
project system: clproject.net
1. 創建mchello工程框架code
安裝quicklisp,參考 https://www.quicklisp.org/beta/component
安裝quickprojectorm
CL-USER> (ql:quickload "quickproject") To load "quickproject": Load 1 ASDF system: quickproject ; Loading "quickproject" ("quickproject")
建立工程:
CL-USER> (quickproject:make-project #p"~/quicklisp/local-projects/mchello" :depends-on '(clim clim-lisp))
工程文件截圖
mchello.asd文件內容不須要修改
;;;; mchello.asd (asdf:defsystem #:mchello :description "Describe mchello here" :author "Your Name <your.name@example.com>" :license "Specify license here" :depends-on (#:clim #:clim-lisp) :serial t :components ((:file "package") (:file "mchello")))
package.lisp內容
;;;; package.lisp (defpackage #:mchello (:use #:cl #:clim #:clim-lisp) (:export "app-main"))
mchello.lisp內容
;;;; mchello.lisp (in-package #:mchello) ;;; "mchello" goes here. Hacks and glory await! (define-application-frame mchelloapp () () (:pointer-documentation t) (:panes (app :application :display-time nil :height 400 :width 500) (int :interactor :height 200 :width 500)) (:layouts ;(default (vertically () app int)))) (default (horizontally () app int)))) (defun app-main () (run-frame-top-level (make-application-frame 'mchelloapp))) (define-mchelloapp-command (com-quit :name t) () (frame-exit *application-frame*)) (define-mchelloapp-command (com-parity :name t) ((number 'integer)) (format t "~a is ~a~%" number (if (oddp number) "odd" "even"))) (define-mchelloapp-command (com-say :name t) ((what-to-say 'string)) (format t "~a~%" what-to-say))
UI實例截圖以下(左側爲顯示區,右側爲交互區):