blob: 5bcc34e93bf2ce58731cd701aea19b007d9bfad0 (
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
;;; wasp-maude-code --- description -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 'wasp-utils)
(defcustom w/maude-code-buffer "*wasp-maude-code*"
"Name of buffer used to interact with Maude."
:type '(string)
:group 'wasp)
(define-derived-mode w/maude-code-mode fundamental-mode "heartrate"
"Major mode for interacting with Maude."
:group 'w)
(defun w/maude-code-get-buffer ()
"Return the heartrate buffer."
(unless (get-buffer w/maude-code-buffer)
(with-current-buffer (get-buffer-create w/maude-code-buffer)
(w/maude-code-mode)))
(get-buffer w/maude-code-buffer))
(defun w/maude-code-write (msg &optional face)
"Insert MSG immediately above the last line of the Maude Code buffer.
Style it with FACE if specified."
(with-current-buffer (w/maude-code-get-buffer)
(save-excursion
(goto-char (point-max))
(beginning-of-line)
(w/write-line msg face))))
(defun w/maude-code-request (msg)
"Send MSG to Maude and print the response in the buffer."
(w/maude-code-write (format "> %s" msg))
(w/ai-mod msg
(lambda (d)
(with-current-buffer (w/maude-code-get-buffer)
(w/maude-code-write (format "%s" d))
(goto-char (point-max))))))
(defun w/maude-code-ret ()
"Press return in the Maude Code buffer."
(interactive)
(with-current-buffer (w/maude-code-get-buffer)
(save-excursion
(goto-char (point-max))
(end-of-line)
(let ((end (point)))
(beginning-of-line)
(let ((start (point)))
(w/maude-code-request (buffer-substring start end))
(goto-char (point-max))
(delete-line))))
(goto-char (point-max))))
(define-key w/maude-code-mode-map (kbd "<return>") #'w/maude-code-ret)
(defun w/maude-code-clear ()
"Clear the Maude Code chat buffer."
(interactive)
(with-current-buffer (w/maude-code-get-buffer)
(let ((inhibit-read-only t))
(erase-buffer))))
(define-key w/maude-code-mode-map (kbd "C-l") #'w/maude-code-clear)
(provide 'wasp-maude-code)
;;; wasp-maude-code.el ends here
|