-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathelis.lisp
41 lines (36 loc) · 1.38 KB
/
elis.lisp
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
(defpackage :lem/elis
(:use :cl
:lem))
(in-package :lem/elis)
(define-major-mode elis-mode ()
(:name "ELIS"
:keymap *elis-mode-keymap*
;; TODO: syntax-table
)
(lem/listener-mode:start-listener-mode (merge-pathnames "history/elis" (lem-home)))
(setf (variable-value 'lem/listener-mode:listener-set-prompt-function
:buffer (current-buffer))
'set-prompt
(variable-value 'lem/listener-mode:listener-check-input-function
:buffer (current-buffer))
'input-complete-p
(variable-value 'lem/listener-mode:listener-execute-function
:buffer (current-buffer))
'elis-execute))
(defun set-prompt (point)
(insert-string point "$ "))
(defun input-complete-p (point)
(declare (ignore point))
t)
(defun elis-execute (point string)
(elis/executor:execute
string
:write-callback (lambda (string)
(send-event (lambda ()
(let ((*inhibit-read-only* t))
(with-buffer-read-only (point-buffer point) nil
(insert-string point string))))))
:exit-process-callback (lambda ()
(lem/listener-mode:refresh-prompt (point-buffer point) t))))
(define-command elis () ()
(lem/listener-mode:listener-start "*elis*" 'elis-mode))