]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: stack mode available in listener.
authorJose A. Ortega Ruiz <jao@gnu.org>
Sun, 21 Dec 2008 23:07:41 +0000 (00:07 +0100)
committerJose A. Ortega Ruiz <jao@gnu.org>
Sun, 21 Dec 2008 23:07:41 +0000 (00:07 +0100)
misc/fuel/README
misc/fuel/fuel-base.el
misc/fuel/fuel-listener.el
misc/fuel/fuel-stack.el

index b21a14b9f2918980dc4e9f7a1e32091df1fa69c3..72cba3b482b82a43b90719a2a74cc68f28b13925 100644 (file)
@@ -78,6 +78,7 @@ C-cC-eC-r is the same as C-cC-er)).
  - TAB : complete word at point
  - M-. : edit word at point in Emacs
  - C-ca : toggle autodoc mode
+ - C-cs : toggle stack mode
  - C-cv : edit vocabulary
  - C-ch : help for word at point
  - C-ck : run file
index 17633a22ce16d7dc04977da7a71c37832c243a7d..6c16237d6d2ccf1a43696cf3356d856a54fbdbe4 100644 (file)
                      len))
 
 (defsubst fuel--region-to-string (begin &optional end)
-  (mapconcat 'identity
-             (split-string (buffer-substring-no-properties begin
-                                                           (or end (point)))
-                           nil
-                           t)
-             " "))
+  (let ((end (or end (point))))
+    (if (< begin end)
+        (mapconcat 'identity
+                   (split-string (buffer-substring-no-properties begin end)
+                                 nil
+                                 t)
+                   " ")
+      "")))
 
 (defsubst empty-string-p (str) (equal str ""))
 
index a12fc817a3f822b0e9abf8ed8b64568c07a3bac1..d8db42911eda273cbb71d2387038f093c58f15c0 100644 (file)
@@ -13,8 +13,9 @@
 
 ;;; Code:
 
-(require 'fuel-eval)
+(require 'fuel-stack)
 (require 'fuel-completion)
+(require 'fuel-eval)
 (require 'fuel-connection)
 (require 'fuel-syntax)
 (require 'fuel-base)
@@ -102,16 +103,9 @@ buffer."
     (goto-char (point-max))
     (unless seen (error "No prompt found!"))))
 
-\f
-;;; Completion support
-
-(defsubst fuel-listener--current-vocab () nil)
-(defsubst fuel-listener--usings () nil)
-
-(defun fuel-listener--setup-completion ()
-  (setq fuel-syntax--current-vocab-function 'fuel-listener--current-vocab)
-  (setq fuel-syntax--usings-function 'fuel-listener--usings)
-  (set-syntax-table fuel-syntax--syntax-table))
+(defun fuel-listener-nuke ()
+  (interactive)
+  (fuel-con--setup-connection fuel-listener--buffer))
 
 \f
 ;;; Interface: starting fuel listener
@@ -128,6 +122,28 @@ buffer."
         (pop-to-buffer buf)
       (switch-to-buffer buf))))
 
+\f
+;;; Completion support
+
+(defsubst fuel-listener--current-vocab () nil)
+(defsubst fuel-listener--usings () nil)
+
+(defun fuel-listener--setup-completion ()
+  (setq fuel-syntax--current-vocab-function 'fuel-listener--current-vocab)
+  (setq fuel-syntax--usings-function 'fuel-listener--usings)
+  (set-syntax-table fuel-syntax--syntax-table))
+
+\f
+;;; Stack mode support
+
+(defun fuel-listener--stack-region ()
+  (fuel--region-to-string (if (zerop (fuel-syntax--brackets-depth))
+                              (comint-line-beginning-position)
+                            (1+ (fuel-syntax--brackets-start)))))
+
+(defun fuel-listener--setup-stack-mode ()
+  (setq fuel-stack--region-function 'fuel-listener--stack-region))
+
 \f
 ;;; Fuel listener mode:
 
@@ -138,12 +154,15 @@ buffer."
   (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))
+  (set-syntax-table fuel-syntax--syntax-table)
+  (fuel-listener--setup-completion)
+  (fuel-listener--setup-stack-mode))
 
 (define-key fuel-listener-mode-map "\C-cz" 'run-factor)
 (define-key fuel-listener-mode-map "\C-c\C-z" 'run-factor)
 (define-key fuel-listener-mode-map "\C-ca" 'fuel-autodoc-mode)
 (define-key fuel-listener-mode-map "\C-ch" 'fuel-help)
+(define-key fuel-listener-mode-map "\C-cs" 'fuel-stack-mode)
 (define-key fuel-listener-mode-map "\M-." 'fuel-edit-word-at-point)
 (define-key fuel-listener-mode-map "\C-cv" 'fuel-edit-vocabulary)
 (define-key fuel-listener-mode-map "\C-c\C-v" 'fuel-edit-vocabulary)
index ef8b2e2d4144fb1e435434aeaac582842d90b169..6797b36d4626f16894ab7a4f479918df761e4095 100644 (file)
@@ -96,13 +96,20 @@ With prefix argument, use current region instead"
  (defvar fuel-stack-mode-string " S"
    "Modeline indicator for fuel-stack-mode"))
 
+(make-variable-buffer-local
+ (defvar fuel-stack--region-function
+   '(lambda ()
+      (fuel--region-to-string (1+ (fuel-syntax--beginning-of-sexp-pos))))))
+
 (defun fuel-stack--eldoc ()
   (when (looking-at-p " \\|$")
-    (let* ((r (fuel--region-to-string (1+ (fuel-syntax--beginning-of-sexp-pos))))
-           (e (fuel-stack--infer-effect/prop r)))
+    (let* ((r (funcall fuel-stack--region-function))
+           (e (and r
+                   (not (string-match "^ *$" r))
+                   (fuel-stack--infer-effect/prop r))))
       (when e
         (if fuel-stack-mode-show-sexp-p
-            (concat (fuel--shorten-str r 30) ": " e)
+            (concat (fuel--shorten-str r 30) " -> " e)
           e)))))
 
 (define-minor-mode fuel-stack-mode