]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'emacs' of http://git.hacks-galore.org/jao/factor
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 30 Jan 2009 21:17:04 +0000 (15:17 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 30 Jan 2009 21:17:04 +0000 (15:17 -0600)
extra/fuel/help/help.factor
extra/fuel/pprint/pprint.factor
misc/fuel/README
misc/fuel/fuel-markup.el
misc/fuel/fuel-mode.el
misc/fuel/fuel-refactor.el
misc/fuel/fuel-syntax.el

index e70327bd35b949ad9cd51409bb90a8d1d9e94475..55183734b37ce14132a385b568cb8e2f3f4c7dd2 100644 (file)
@@ -2,15 +2,15 @@
 ! See http://factorcode.org/license.txt for BSD license.
 
 USING: accessors arrays assocs combinators help help.crossref
-help.markup help.topics io io.streams.string kernel make memoize
-namespaces parser prettyprint sequences summary tools.vocabs
-tools.vocabs.browser vocabs vocabs.loader words ;
+help.markup help.topics io io.streams.string kernel make namespaces
+parser prettyprint sequences summary tools.vocabs tools.vocabs.browser
+vocabs vocabs.loader words ;
 
 IN: fuel.help
 
 <PRIVATE
 
-MEMO: fuel-find-word ( name -- word/f )
+: fuel-find-word ( name -- word/f )
     [ [ name>> ] dip = ] curry all-words swap filter
     dup empty? not [ first ] [ drop f ] if ;
 
@@ -102,11 +102,11 @@ PRIVATE>
 : (fuel-vocab-help) ( name -- str )
     dup empty? [ fuel-vocab-children-help ] [ (fuel-vocab-element) ] if ;
 
-MEMO: (fuel-get-vocabs/author) ( author -- element )
+: (fuel-get-vocabs/author) ( author -- element )
     [ "Vocabularies by " prepend \ $heading swap 2array ]
     [ authored fuel-vocab-list ] bi 2array ;
 
-MEMO: (fuel-get-vocabs/tag) ( tag -- element )
+: (fuel-get-vocabs/tag) ( tag -- element )
     [ "Vocabularies tagged " prepend \ $heading swap 2array ]
     [ tagged fuel-vocab-list ] bi 2array ;
 
index 25f3aec14dd00025137feb45b5652feaf52d1570..9dcbd763686fc6b7a3955cbcf7e8f6b5da9d603f 100644 (file)
@@ -12,7 +12,7 @@ GENERIC: fuel-pprint ( obj -- )
 <PRIVATE
 
 : fuel-maybe-scape ( ch -- seq )
-    dup "\\\"?#()[]'`" member? [ CHAR: \ swap 2array ] [ 1array ] if ;
+    dup "\\\"?#()[]'`;" member? [ CHAR: \ swap 2array ] [ 1array ] if ;
 
 SYMBOL: :restarts
 
index cf96e29f5251e798eb05ce0b8b3fcd05cb9db1d9..d712560b03b6384804e5101f25fb9a4a3a658a5d 100644 (file)
@@ -53,6 +53,14 @@ beast.
     factor image (overwriting the current one) with all the needed
     vocabs.
 
+    Alternatively, you can add the following line to your
+    .factor-boot-rc file:
+
+       "fuel" require
+
+    This will ensure that the image generated while bootstrapping
+    Factor contains fuel and the vocabularies it depends on.
+
 *** Connecting to a running Factor
 
     'run-factor' starts a new factor listener process managed by Emacs.
@@ -129,6 +137,7 @@ beast.
     |                 | (fuel-refactor-extract-vocab)                              |
     | C-cC-xi         | replace word by its definition (fuel-refactor-inline-word) |
     | C-cC-xw         | rename all uses of a word (fuel-refactor-rename-word)      |
+    | C-cC-xa         | extract region as a separate ARTICLE: form                 |
     |-----------------+------------------------------------------------------------|
 
 *** In the listener:
index 7a8fa0c234885eb08ff10576afaa758812cfaf71..0c2fe91551bded83838304e892b4406f99af263b 100644 (file)
 (defun fuel-markup--notes (e)
   (fuel-markup--elem-with-heading e "Notes"))
 
-(defun fuel-markup--see (e)
+(defun fuel-markup--word-info (e s)
   (let* ((word (nth 1 e))
-         (cmd (and word `(:fuel* (,(format "%s" word) fuel-word-see) "fuel" t)))
-         (res (and cmd
-                   (fuel-eval--retort-result (fuel-eval--send/wait cmd 100)))))
+         (cmd (and word `(:fuel* ((:quote ,(format "%s" word)) ,s) "fuel")))
+         (ret (and cmd (fuel-eval--send/wait cmd)))
+         (res (and (not (fuel-eval--retort-error ret))
+                   (fuel-eval--retort-output ret))))
     (if res
         (fuel-markup--code (list '$code res))
-      (fuel-markup--snippet (list '$snippet word)))))
+      (fuel-markup--snippet (list '$snippet " " word)))))
 
-(defun fuel-markup--null (e))
+(defun fuel-markup--see (e)
+  (fuel-markup--word-info e 'see))
 
 (defun fuel-markup--synopsis (e)
-  (insert (format " %S " e)))
+  (fuel-markup--word-info e 'synopsis))
+
+(defun fuel-markup--null (e))
 
 \f
 (provide 'fuel-markup)
index 88ad73864a31df751bb1bcfea97bafe5acee9216..504308fccd5998e3b1e4bec9bf34c08e461c0e47 100644 (file)
@@ -198,6 +198,7 @@ interacting with a factor listener is at your disposal.
 (fuel-mode--key ?e ?w 'fuel-edit-word)
 (fuel-mode--key ?e ?x 'fuel-eval-definition)
 
+(fuel-mode--key ?x ?a 'fuel-refactor-extract-article)
 (fuel-mode--key ?x ?i 'fuel-refactor-inline-word)
 (fuel-mode--key ?x ?r 'fuel-refactor-extract-region)
 (fuel-mode--key ?x ?s 'fuel-refactor-extract-sexp)
index 061adbb82c87bb3a1a59832e5a550c4cd3448b68..bd622277551b170cc0841833be19a0a0aac111f4 100644 (file)
         (when found (setq result (fuel-refactor--reuse-p (car found)))))
       (and result found))))
 
+(defsubst fuel-refactor--insertion-point ()
+  (max (save-excursion (fuel-syntax--beginning-of-defun) (point))
+       (save-excursion
+         (re-search-backward fuel-syntax--end-of-def-regex nil t)
+         (forward-line 1)
+         (skip-syntax-forward "-"))))
+
 (defun fuel-refactor--insert-word (word stack-effect code)
-  (let ((beg (save-excursion (fuel-syntax--beginning-of-defun) (point)))
-        (end (save-excursion
-               (re-search-backward fuel-syntax--end-of-def-regex nil t)
-               (forward-line 1)
-               (skip-syntax-forward "-"))))
-    (let ((start (goto-char (max beg end))))
-      (open-line 1)
-      (insert ": " word " " stack-effect "\n" code " ;\n")
-      (indent-region start (point))
-      (move-overlay fuel-stack--overlay start (point)))))
+  (let ((start (goto-char (fuel-refactor--insertion-point))))
+    (open-line 1)
+    (insert ": " word " " stack-effect "\n" code " ;\n")
+    (indent-region start (point))
+    (move-overlay fuel-stack--overlay start (point))))
 
 (defun fuel-refactor--extract-other (start end code)
   (unwind-protect
@@ -233,5 +235,30 @@ The region is extended to the closest definition boundaries."
                                                 (mark-defun)
                                                 (mark))))
 \f
+;;; Extract article:
+
+(defun fuel-refactor-extract-article (begin end)
+  "Extracts region as a new ARTICLE form."
+  (interactive "r")
+  (let ((topic (read-string "Article topic: "))
+        (title (read-string "Article title: ")))
+    (kill-region begin end)
+    (insert (format "{ $subsection %s }\n" topic))
+    (end-of-line 0)
+    (save-excursion
+      (goto-char (fuel-refactor--insertion-point))
+      (open-line 1)
+      (let ((start (point)))
+        (insert (format "ARTICLE: %S %S\n" topic title))
+        (yank)
+        (when (looking-at "^ *$") (end-of-line 0))
+        (insert " ;")
+        (unwind-protect
+            (progn
+              (move-overlay fuel-stack--overlay start (point))
+              (sit-for fuel-stack-highlight-period))
+          (delete-overlay fuel-stack--overlay))))))
+
+\f
 (provide 'fuel-refactor)
 ;;; fuel-refactor.el ends here
index ad5a025a88525e9c80382ac6aea611b335b7c325..80bfd0afcb0fb3f9c0d89b1721aed3254a4317ec 100644 (file)
                                            "PREDICATE" "PRIMITIVE"
                                            "UNION"))
 
-(defconst fuel-syntax--no-indent-def-starts '("SINGLETONS"
+(defconst fuel-syntax--no-indent-def-starts '("ARTICLE"
+                                              "HELP"
+                                              "SINGLETONS"
                                               "SYMBOLS"
                                               "TUPLE"
                                               "VARS"))
 
 (defconst fuel-syntax--single-liner-regex
   (regexp-opt '("ABOUT:"
-                "ARTICLE:"
                 "ALIAS:"
                 "CONSTANT:" "C:"
                 "DEFER:"
                 "FORGET:"
                 "GENERIC:" "GENERIC#"
-                "HELP:" "HEX:" "HOOK:"
+                "HEX:" "HOOK:"
                 "IN:" "INSTANCE:"
                 "LIBRARY:"
                 "MAIN:" "MATH:" "MIXIN:"