diff --git a/extra/fuel/fuel.factor b/extra/fuel/fuel.factor index a399ab2776..46d6ba12c7 100644 --- a/extra/fuel/fuel.factor +++ b/extra/fuel/fuel.factor @@ -148,6 +148,8 @@ MEMO: fuel-get-article-title ( name -- ) : fuel-word-see ( name -- ) (fuel-word-see) fuel-eval-set-result ; +: fuel-word-def ( name -- ) (fuel-word-def) fuel-eval-set-result ; + : fuel-vocab-help ( name -- ) (fuel-vocab-help) fuel-eval-set-result ; : fuel-vocab-summary ( name -- ) @@ -170,4 +172,5 @@ MEMO: fuel-get-article-title ( name -- ) dup require dup scaffold-help vocab-docs-path (normalize-path) fuel-eval-set-result ; -: fuel-scaffold-get-root ( name -- ) find-vocab-root fuel-eval-set-result ; \ No newline at end of file +: fuel-scaffold-get-root ( name -- ) find-vocab-root fuel-eval-set-result ; + diff --git a/extra/fuel/help/help.factor b/extra/fuel/help/help.factor index 537e92ddd8..298124ffb4 100644 --- a/extra/fuel/help/help.factor +++ b/extra/fuel/help/help.factor @@ -87,13 +87,16 @@ SYMBOL: vocab-list PRIVATE> -: (fuel-word-help) ( object -- object ) +: (fuel-word-help) ( name -- elem ) fuel-find-word [ [ auto-use? on (fuel-word-element) ] with-scope ] [ f ] if* ; : (fuel-word-see) ( word -- elem ) [ name>> \ article swap ] [ [ see ] with-string-writer \ $code swap 2array ] bi 3array ; inline +: (fuel-word-def) ( name -- str ) + fuel-find-word [ [ def>> pprint ] with-string-writer ] when* ; inline + : (fuel-vocab-summary) ( name -- str ) >vocab-link summary ; inline : (fuel-vocab-help) ( name -- str ) diff --git a/misc/fuel/README b/misc/fuel/README index 5fed408bbf..eb280d796c 100644 --- a/misc/fuel/README +++ b/misc/fuel/README @@ -105,6 +105,7 @@ beast. - C-cC-xs : extract innermost sexp (up to point) as a separate word - C-cC-xr : extract region as a separate word + - C-cC-xi : replace word at point by its definition - C-cC-xv : extract region as a separate vocabulary *** In the listener: diff --git a/misc/fuel/fuel-mode.el b/misc/fuel/fuel-mode.el index 0b863507ff..9936d052fc 100644 --- a/misc/fuel/fuel-mode.el +++ b/misc/fuel/fuel-mode.el @@ -198,6 +198,7 @@ interacting with a factor listener is at your disposal. (fuel-mode--key ?x ?s 'fuel-refactor-extract-sexp) (fuel-mode--key ?x ?r 'fuel-refactor-extract-region) (fuel-mode--key ?x ?v 'fuel-refactor-extract-vocab) +(fuel-mode--key ?x ?i 'fuel-refactor-inline-word) (fuel-mode--key ?d ?> 'fuel-show-callees) (fuel-mode--key ?d ?< 'fuel-show-callers) diff --git a/misc/fuel/fuel-refactor.el b/misc/fuel/fuel-refactor.el index 380b00f763..788033cf88 100644 --- a/misc/fuel/fuel-refactor.el +++ b/misc/fuel/fuel-refactor.el @@ -141,6 +141,29 @@ word." (if (looking-at-p ";") (point) (fuel-syntax--end-of-symbol-pos)))) + +;;; Inline word: + +(defun fuel-refactor--word-def (word) + (let ((def (fuel-eval--retort-result + (fuel-eval--send/wait `(:fuel* (,word fuel-word-def) "fuel"))))) + (when def + (substring (substring def 2) 0 -2)))) + +(defun fuel-refactor-inline-word () + "Inserts definition of word at point." + (interactive) + (let ((word (fuel-syntax-symbol-at-point))) + (unless word (error "No word at point")) + (let ((code (fuel-refactor--word-def word))) + (unless code (error "Word's definition not found")) + (fuel-syntax--beginning-of-symbol) + (kill-word 1) + (let ((start (point))) + (insert code) + (save-excursion (font-lock-fontify-region start (point))) + (indent-region start (point)))))) + ;;; Extract vocab: