-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathminibuffer.scm
51 lines (42 loc) · 1.61 KB
/
minibuffer.scm
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
42
43
44
45
46
47
48
49
50
51
(define minibuffer-error? #f)
(define minibuffer-text "")
(define minibuffer-command-text "")
(define (set-minibuffer-message message)
(set! minibuffer-error? #f)
(set! minibuffer-text message)
(set! minibuffer-command-text ""))
(define (set-minibuffer-error message)
(set! minibuffer-error? #t)
(set! minibuffer-text message)
(set! minibuffer-command-text ""))
(define (set-minibuffer-command command-text)
(set! minibuffer-error? #f)
(set! minibuffer-text "")
(set! minibuffer-command-text command-text))
(define command-mode-handler (make-parameter #f))
(define command-mode-previous-mode (make-parameter #f))
(define (command-mode-insert-char ch)
(lambda ()
(set! minibuffer-text (string-append-char minibuffer-text ch))))
(define (command-mode-delete-char)
(set! minibuffer-text (string-drop-right minibuffer-text 1)))
(define (command-mode-commit)
(let ([text minibuffer-text]
[handler (command-mode-handler)]
[previous-mode (command-mode-previous-mode)])
(set-minibuffer-message "")
(command-mode-handler #f)
(command-mode-previous-mode #f)
(if previous-mode (enter-mode previous-mode) (enter-mode 'normal))
(if handler (handler text))))
(define (edit-minibuffer input-text fn)
(set-minibuffer-command input-text)
(command-mode-previous-mode (current-mode-name))
(enter-mode 'command)
(command-mode-handler fn))
(define (exit-command-mode)
(let ([previous-mode (command-mode-previous-mode)])
(set-minibuffer-message "")
(command-mode-handler #f)
(command-mode-previous-mode #f)
(if previous-mode (enter-mode previous-mode) (enter-mode 'normal))))