emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/forth-mode 6ab334684b 010/153: Send a string to an interac


From: ELPA Syncer
Subject: [nongnu] elpa/forth-mode 6ab334684b 010/153: Send a string to an interactive Forth session.
Date: Sat, 29 Jan 2022 08:02:12 -0500 (EST)

branch: elpa/forth-mode
commit 6ab334684b0694a4dfdac668617580d1567886c0
Author: Lars Brinkhoff <lars.brinkhoff@delphi.com>
Commit: Lars Brinkhoff <lars.brinkhoff@delphi.com>

    Send a string to an interactive Forth session.
---
 forth-interaction-mode.el | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/forth-interaction-mode.el b/forth-interaction-mode.el
index ad298bf172..2d2f7784c8 100644
--- a/forth-interaction-mode.el
+++ b/forth-interaction-mode.el
@@ -1,5 +1,8 @@
 (require 'comint)
 
+(defvar forth-interaction-buffer nil)
+(defvar forth-interaction-callback nil)
+
 (defvar forth-interaction-mode-map
   (let ((map (copy-keymap forth-mode-map)))
     (set-keymap-parent map comint-mode-map)
@@ -12,9 +15,16 @@
   :syntax-table forth-mode-syntax-table
   (use-local-map forth-interaction-mode-map))
 
+(defun forth-interaction-preoutput-filter (text)
+  (if forth-interaction-callback
+      (prog1 (funcall forth-interaction-callback text)
+       (setq forth-interaction-callback nil))
+      text))
+
 (defun forth-interaction-kill (&optional buffer)
   (interactive)
-  (kill-buffer (or buffer (current-buffer))))
+  (kill-buffer (or buffer (current-buffer)))
+  (setq forth-interaction-buffer nil))
 
 (defun forth-interaction-sentinel (proc arg)
   (message "Forth: %s" arg)
@@ -30,5 +40,19 @@
       (make-comint-in-buffer "forth" buffer "forth")
       (set-process-sentinel (get-buffer-process buffer)
                            'forth-interaction-sentinel)
-      (forth-interaction-mode))))
+      (forth-interaction-mode)
+      (add-hook 'comint-preoutput-filter-functions
+               'forth-interaction-preoutput-filter nil t)
+      (setq forth-interaction-buffer buffer))))
       
+(defun ensure-forth ()
+  (unless forth-interaction-buffer
+    (forth))
+  (get-buffer-process forth-interaction-buffer))
+
+;;;### autoload
+(defun forth-interaction-send (string callback)
+  (let ((proc (ensure-forth)))
+    (setq forth-interaction-callback callback)
+    (comint-send-string proc string)
+    (comint-send-string proc "\n")))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]