branch: elpa/forth-mode
commit 6ab334684b0694a4dfdac668617580d1567886c0
Author: Lars Brinkhoff <[email protected]>
Commit: Lars Brinkhoff <[email protected]>
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")))