Guest User

Untitled

a guest
Dec 12th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. (defclass buffer ()
  2. ((name :accessor name :initarg :name)
  3. (mode :accessor mode :initarg :mode)
  4. (view :accessor view :initarg :view)
  5. (modes :accessor modes :initarg :modes)))
  6.  
  7. (defmethod print-object ((self buffer) stream)
  8. (format stream "~s" (name self)))
  9.  
  10. (defmethod add-mode ((self buffer) mode &optional (overwrite nil))
  11. (let ((found-mode (find mode (modes self)
  12. :test #'(lambda (class mode) (typep mode class)))))
  13. (unless found-mode
  14. (push mode (modes self)))
  15. (when (and found-mode overwrite)
  16. (setf (modes self)
  17. (remove-if #'(lambda (item) (typep item 'mode)) (modes self)))
  18. (push mode (modes self)))))
  19.  
  20. (defmethod switch-mode ((self buffer) mode-class)
  21. (let ((found-mode
  22. (find mode-class (modes self)
  23. :test #'(lambda (class mode) (typep mode class)))))
  24. (if found-mode
  25. (setf (mode self) found-mode)
  26. nil)))
  27.  
  28. (defmethod add-or-switch-to-mode ((self buffer) mode)
  29. (add-mode self mode)
  30. (switch-mode self (class-of mode)))
Add Comment
Please, Sign In to add comment