一個McCLIM實例

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實例截圖以下(左側爲顯示區,右側爲交互區):

相關文章
相關標籤/搜索