]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: Fix bug whereby true display-stacks? could hang the listener.
authorJose A. Ortega Ruiz <jao@gnu.org>
Thu, 18 Dec 2008 23:20:56 +0000 (00:20 +0100)
committerJose A. Ortega Ruiz <jao@gnu.org>
Thu, 18 Dec 2008 23:20:56 +0000 (00:20 +0100)
extra/fuel/fuel.factor
misc/fuel/fu.el
misc/fuel/fuel-connection.el
misc/fuel/fuel-listener.el
misc/fuel/fuel-mode.el

index 017b20b54b6ff369caebb126ca1f92d7e4a1a652..8e7122fee397ec41237b4e8eb02da0bdec1ff710 100644 (file)
@@ -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
index 508d7ef3a47bb4c5054d43c8b63b46f1b2a0f834..ffd88bf144c74dc4cc1fe517b7c844a6db134f3a 100644 (file)
@@ -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)
index 3cac40bd1630d2ef6869322b692ddaf9d76141f0..162a1edd02d237b21942ac05667227c56c68c16d 100644 (file)
       (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)
+
 \f
 ;;; Requests handling:
 
index c1e8d670cf8705920c26cc8aba9fc067bfd65209..a12fc817a3f822b0e9abf8ed8b64568c07a3bac1 100644 (file)
@@ -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."
 \f
 ;;; 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))
 
index 265cfde0a22b2580d060840471889db8a7aa08c1..714b9f01042c944a4700cd2a9262b3aedfb16940 100644 (file)
 
 ;;; 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)
 
 \f
 ;;; Customization: