| | (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:
(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)
(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
(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