summaryrefslogtreecommitdiff
path: root/src/gizmo/wasp-maude-code.el
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-07-21 00:14:25 -0400
committerLLLL Colonq <llll@colonq>2026-07-21 00:14:25 -0400
commitf04ada478f4bfa5637744876f00ff56f85dcf552 (patch)
tree50cde49222fdddf4274b3e123568fe2c75c5e155 /src/gizmo/wasp-maude-code.el
parent75e005e81b73d8471f16dc5fad7bbdc312bdbfe7 (diff)
Update
Diffstat (limited to 'src/gizmo/wasp-maude-code.el')
-rw-r--r--src/gizmo/wasp-maude-code.el66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/gizmo/wasp-maude-code.el b/src/gizmo/wasp-maude-code.el
new file mode 100644
index 00000000..5bcc34e9
--- /dev/null
+++ b/src/gizmo/wasp-maude-code.el
@@ -0,0 +1,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