From 35039d01498824be1ad39bcd7cf704920bbd779e Mon Sep 17 00:00:00 2001 From: "Jose A. Ortega Ruiz" Date: Fri, 19 Dec 2008 00:20:56 +0100 Subject: [PATCH] FUEL: Fix bug whereby true display-stacks? could hang the listener. --- extra/fuel/fuel.factor | 12 +++++------- misc/fuel/fu.el | 3 +++ misc/fuel/fuel-connection.el | 14 ++++++++++---- misc/fuel/fuel-listener.el | 3 +++ misc/fuel/fuel-mode.el | 15 +++++++-------- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/extra/fuel/fuel.factor b/extra/fuel/fuel.factor index 017b20b54b..8e7122fee3 100644 --- a/extra/fuel/fuel.factor +++ b/extra/fuel/fuel.factor @@ -13,7 +13,7 @@ IN: fuel ! Evaluation status: -TUPLE: fuel-status in use ds? restarts ; +TUPLE: fuel-status in use restarts ; SYMBOL: fuel-status-stack V{ } clone fuel-status-stack set-global @@ -37,7 +37,7 @@ t clone fuel-eval-res-flag set-global f fuel-eval-res-flag set-global ; inline : push-fuel-status ( -- ) - in get use get clone display-stacks? get restarts get-global clone + in get use get clone restarts get-global clone fuel-status boa fuel-status-stack get push ; @@ -46,7 +46,6 @@ t clone fuel-eval-res-flag set-global fuel-status-stack get pop { [ in>> in set ] [ use>> clone use set ] - [ ds?>> display-stacks? swap [ on ] [ off ] if ] [ restarts>> fuel-eval-restartable? [ drop ] [ clone restarts set-global @@ -112,7 +111,7 @@ M: source-file fuel-pprint path>> fuel-pprint ; error get fuel-eval-result get-global fuel-eval-output get-global - 3array fuel-pprint flush nl "EOT:" write ; + 3array fuel-pprint flush nl "<~FUEL~>" write nl flush ; : fuel-forget-error ( -- ) f error set-global ; inline : fuel-forget-result ( -- ) f fuel-eval-result set-global ; inline @@ -120,14 +119,13 @@ M: source-file fuel-pprint path>> fuel-pprint ; : (fuel-begin-eval) ( -- ) push-fuel-status - display-stacks? off fuel-forget-error fuel-forget-result fuel-forget-output ; : (fuel-end-eval) ( quot -- ) - with-string-writer fuel-eval-output set-global - fuel-retort pop-fuel-status ; inline + with-string-writer fuel-eval-output set-global fuel-retort + pop-fuel-status ; inline : (fuel-eval) ( lines -- ) [ [ parse-lines ] with-compilation-unit call ] curry diff --git a/misc/fuel/fu.el b/misc/fuel/fu.el index 508d7ef3a4..ffd88bf144 100644 --- a/misc/fuel/fu.el +++ b/misc/fuel/fu.el @@ -17,6 +17,9 @@ (autoload 'run-factor "fuel-listener.el" "Start a Factor listener, or switch to a running one." t) +(autoload 'switch-to-factor "fuel-listener.el" + "Start a Factor listener, or switch to a running one." t) + (autoload 'fuel-autodoc-mode "fuel-help.el" "Minor mode showing in the minibuffer a synopsis of Factor word at point." t) diff --git a/misc/fuel/fuel-connection.el b/misc/fuel/fuel-connection.el index 3cac40bd16..162a1edd02 100644 --- a/misc/fuel/fuel-connection.el +++ b/misc/fuel/fuel-connection.el @@ -133,21 +133,27 @@ (fuel-con--connection-start-timer conn)))) (defconst fuel-con--prompt-regex "( .+ ) ") -(defconst fuel-con--eot-marker "EOT:") -(defconst fuel-con--init-stanza (format "USE: fuel %S write" fuel-con--eot-marker)) +(defconst fuel-con--eot-marker "<~FUEL~>") +(defconst fuel-con--init-stanza "USE: fuel f fuel-eval") (defconst fuel-con--comint-finished-regex - (format "^%s%s$" fuel-con--eot-marker fuel-con--prompt-regex)) + (format "^%s$" fuel-con--eot-marker)) (defun fuel-con--setup-comint () - (comint-redirect-cleanup) (set (make-local-variable 'comint-redirect-insert-matching-regexp) t) + (add-hook 'comint-redirect-filter-functions + 'fuel-con--comint-preoutput-filter nil t) (add-hook 'comint-redirect-hook 'fuel-con--comint-redirect-hook nil t)) (defadvice comint-redirect-setup (after fuel-con--advice activate) (setq comint-redirect-finished-regexp fuel-con--comint-finished-regex)) +(defun fuel-con--comint-preoutput-filter (str) + (when (string-match fuel-con--comint-finished-regex str) + (setq comint-redirect-finished-regexp fuel-con--prompt-regex)) + str) + ;;; Requests handling: diff --git a/misc/fuel/fuel-listener.el b/misc/fuel/fuel-listener.el index c1e8d670cf..a12fc817a3 100644 --- a/misc/fuel/fuel-listener.el +++ b/misc/fuel/fuel-listener.el @@ -76,6 +76,7 @@ buffer." (make-comint-in-buffer "fuel listener" (current-buffer) factor nil "-run=listener" (format "-i=%s" image)) (fuel-listener--wait-for-prompt 10000) + (fuel-con--setup-connection (current-buffer)) (fuel-con--send-string/wait (current-buffer) fuel-con--init-stanza '(lambda (s) (message "FUEL listener up and running!")) @@ -130,10 +131,12 @@ buffer." ;;; Fuel listener mode: +;;;###autoload (define-derived-mode fuel-listener-mode comint-mode "Fuel Listener" "Major mode for interacting with an inferior Factor listener process. \\{fuel-listener-mode-map}" (set (make-local-variable 'comint-prompt-regexp) fuel-con--prompt-regex) + (set (make-local-variable 'comint-use-prompt-regexp) t) (set (make-local-variable 'comint-prompt-read-only) t) (fuel-listener--setup-completion)) diff --git a/misc/fuel/fuel-mode.el b/misc/fuel/fuel-mode.el index 265cfde0a2..714b9f0104 100644 --- a/misc/fuel/fuel-mode.el +++ b/misc/fuel/fuel-mode.el @@ -14,15 +14,14 @@ ;;; Code: -(require 'factor-mode) -(require 'fuel-base) -(require 'fuel-syntax) -(require 'fuel-font-lock) -(require 'fuel-debug) -(require 'fuel-help) -(require 'fuel-eval) -(require 'fuel-completion) (require 'fuel-listener) +(require 'fuel-completion) +(require 'fuel-eval) +(require 'fuel-help) +(require 'fuel-debug) +(require 'fuel-font-lock) +(require 'fuel-syntax) +(require 'fuel-base) ;;; Customization: -- 2.34.1