From f04ada478f4bfa5637744876f00ff56f85dcf552 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 21 Jul 2026 00:14:25 -0400 Subject: Update --- src/gizmo/wasp-maude-code.el | 66 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/gizmo/wasp-maude-code.el (limited to 'src/gizmo/wasp-maude-code.el') 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 "") #'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 -- cgit v1.3.1