]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: New refactoring: extract region as ARTICLE: (C-cC-xa).
authorJose A. Ortega Ruiz <jao@gnu.org>
Wed, 28 Jan 2009 20:23:21 +0000 (21:23 +0100)
committerJose A. Ortega Ruiz <jao@gnu.org>
Wed, 28 Jan 2009 20:23:21 +0000 (21:23 +0100)
misc/fuel/README
misc/fuel/fuel-mode.el
misc/fuel/fuel-refactor.el
misc/fuel/fuel-syntax.el

index cf96e29f5251e798eb05ce0b8b3fcd05cb9db1d9..198c9bb275eec9fd02c68919f489a46847a25e50 100644 (file)
@@ -129,6 +129,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 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:"