blob: 2717bd36d0c2fd138938f61551cd8117ac30cf22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
;;;; minibuffer.lisp --- major mode for input
(in-package :next)
(defvar minibuffer-mode-map (make-hash-table :test 'equalp))
(defclass minibuffer-mode (mode)
((minibuffer-completion-function :accessor minibuffer-completion-function)
(minibuffer-callback-function :accessor minibuffer-callback-function)
(minibuffer-callback-buffer :accessor minibuffer-callback-buffer)))
(defmethod input ((self minibuffer-mode) callback-function &optional completion-function)
(with-slots (minibuffer-callback-function minibuffer-completion-function minibuffer-callback-buffer) self
(setf minibuffer-callback-function callback-function)
(setf minibuffer-completion-function completion-function)
(setf minibuffer-callback-buffer *active-buffer*)
(interface:minibuffer-set-completion-function completion-function))
(set-active-buffer *minibuffer*)
(interface:minibuffer-show))
(defmethod return-input ((self minibuffer-mode))
(set-active-buffer (minibuffer-callback-buffer self))
(with-slots (minibuffer-completion-function minibuffer-callback-function) self
(if minibuffer-completion-function
(funcall minibuffer-callback-function
(nth 0 (funcall minibuffer-completion-function
(interface:minibuffer-get-input))))
(funcall minibuffer-callback-function
(interface:minibuffer-get-input))))
(interface:minibuffer-hide))
(defmethod cancel-input ((self minibuffer-mode))
(set-active-buffer (minibuffer-callback-buffer self))
(interface:minibuffer-hide))
(defun minibuffer-mode ()
"Base mode for input"
(make-instance 'minibuffer-mode
:name "minibuffer"
:keymap minibuffer-mode-map
:view (interface:make-minibuffer)))
|