[lice @ .darcsignore: put ignore file under control, and ignore fasl files.]
[lice.git] / major-mode.lisp
blob71be86f783bf36875bc66e0c50df348d98a271bc
1 ;;; Implement the major mode system
3 (in-package :lice)
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."
13 `(defparameter ,sym
14 (make-instance 'major-mode
15 :name ,name :map ,map
16 :init-fn (lambda () ,@body))
17 ,doc))
19 (define-major-mode fundamental-mode
20 (:name "Fundamental"
21 :map (make-hash-table))
22 "Fundamental Mode."
23 ;; empty body
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)