1 ;;; Implement the major mode system
5 (defclass major-mode
()
6 ((name :type string
:initarg
:name
:accessor major-mode-name
)
7 (map :type keymap
:initarg
:map
:accessor major-mode-map
)
8 (init-fn :type function
:initarg
:init-fn
:accessor major-mode-init-fn
))
9 (:documentation
"A Major Mode class."))
11 (defmacro define-major-mode
(sym (&key name map
) doc
&body body
)
12 "Create a major mode."
14 (make-instance 'major-mode
16 :init-fn
(lambda () ,@body
))
19 (define-major-mode fundamental-mode
21 :map
(make-hash-table))
26 (defun set-major-mode (mm &optional
(buffer (current-buffer)))
27 (setf (buffer-major-mode buffer
) mm
)
28 (funcall (major-mode-init-fn mm
)))
30 (provide :lice-0.1
/major-mode
)