FUEL: fuel-edit-word-at-point, fuel-eval-region, fuel-eval-extended-region.
parent
3673a3e7c7
commit
eb43cddb33
|
@ -112,6 +112,8 @@ M: continuation fuel-pprint drop "~continuation~" write ;
|
||||||
: fuel-end-eval ( -- )
|
: fuel-end-eval ( -- )
|
||||||
[ ] (fuel-end-eval) ;
|
[ ] (fuel-end-eval) ;
|
||||||
|
|
||||||
|
: fuel-get-edit-location ( defspec -- )
|
||||||
|
where [ first2 [ (normalize-path) ] dip 2array fuel-eval-set-result ] when* ;
|
||||||
|
|
||||||
: fuel-startup ( -- )
|
: fuel-startup ( -- )
|
||||||
"listener" run ;
|
"listener" run ;
|
||||||
|
|
|
@ -50,7 +50,11 @@ Quick key reference
|
||||||
- C-cz : switch to listener
|
- C-cz : switch to listener
|
||||||
- C-co : cycle between code, tests and docs factor files
|
- C-co : cycle between code, tests and docs factor files
|
||||||
|
|
||||||
- C-M-x, C-cC-ed : eval definition around point
|
- M-. : edit word at point in Emacs
|
||||||
|
|
||||||
|
- C-C-r, C-cC-er : eval region
|
||||||
|
- C-M-r, C-cC-ee : eval region, extending it to definition boundaries
|
||||||
|
- C-M-x, C-cC-ex : eval definition around point
|
||||||
|
|
||||||
- C-cC-da : toggle autodoc mode
|
- C-cC-da : toggle autodoc mode
|
||||||
- C-cC-dd : help for word at point
|
- C-cC-dd : help for word at point
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
(when (and (> fuel-eval-log-max-length 0)
|
(when (and (> fuel-eval-log-max-length 0)
|
||||||
(> (point) fuel-eval-log-max-length))
|
(> (point) fuel-eval-log-max-length))
|
||||||
(erase-buffer))
|
(erase-buffer))
|
||||||
(when fuel-eval--log (insert "\n>> " (fuel--shorten-str str 75) "\n"))
|
(when fuel-eval--log (insert "\n>> " (fuel--shorten-str str 256) "\n"))
|
||||||
(let ((beg (point)))
|
(let ((beg (point)))
|
||||||
(comint-redirect-send-command-to-process str (current-buffer) proc nil t)
|
(comint-redirect-send-command-to-process str (current-buffer) proc nil t)
|
||||||
(with-current-buffer (process-buffer proc)
|
(with-current-buffer (process-buffer proc)
|
||||||
|
|
|
@ -37,21 +37,56 @@
|
||||||
|
|
||||||
;;; User commands
|
;;; User commands
|
||||||
|
|
||||||
|
(defun fuel-eval-region (begin end &optional arg)
|
||||||
|
"Sends region to Fuel's listener for evaluation.
|
||||||
|
With prefix, switchs to the listener's buffer afterwards."
|
||||||
|
(interactive "r\nP")
|
||||||
|
(let* ((ret (fuel-eval--eval-region/context begin end))
|
||||||
|
(err (fuel-eval--retort-error ret)))
|
||||||
|
(message "%s" (or err (fuel--shorten-region begin end 70))))
|
||||||
|
(when arg (pop-to-buffer fuel-listener-buffer)))
|
||||||
|
|
||||||
|
(defun fuel-eval-extended-region (begin end &optional arg)
|
||||||
|
"Sends region extended outwards to nearest definitions,
|
||||||
|
to Fuel's listener for evaluation. With prefix, switchs to the
|
||||||
|
listener's buffer afterwards."
|
||||||
|
(interactive "r\nP")
|
||||||
|
(fuel-eval-region (save-excursion (goto-char begin) (mark-defun) (point))
|
||||||
|
(save-excursion (goto-char end) (mark-defun) (mark))))
|
||||||
|
|
||||||
(defun fuel-eval-definition (&optional arg)
|
(defun fuel-eval-definition (&optional arg)
|
||||||
"Sends definition around point to Fuel's listener for evaluation.
|
"Sends definition around point to Fuel's listener for evaluation.
|
||||||
With prefix, switchs the the listener's buffer."
|
With prefix, switchs to the listener's buffer afterwards."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(mark-defun)
|
(mark-defun)
|
||||||
(let* ((begin (point))
|
(let* ((begin (point))
|
||||||
(end (mark)))
|
(end (mark)))
|
||||||
(unless (< begin end) (error "No evaluable definition around point"))
|
(unless (< begin end) (error "No evaluable definition around point"))
|
||||||
(let* ((msg (match-string 0))
|
(fuel-eval-region begin end))))
|
||||||
(ret (fuel-eval--eval-region/context begin end))
|
|
||||||
(err (fuel-eval--retort-error ret)))
|
(defun fuel-edit-word-at-point (&optional arg)
|
||||||
(when err (error "%s" err))
|
"Opens a new window visiting the definition of the word at point.
|
||||||
(message "%s" (fuel--shorten-region begin end 70)))))
|
With prefix, asks for the word to edit."
|
||||||
(when arg (pop-to-buffer fuel-listener-buffer)))
|
(interactive "P")
|
||||||
|
(let* ((word (fuel-syntax-symbol-at-point))
|
||||||
|
(ask (or arg (not word)))
|
||||||
|
(word (if ask
|
||||||
|
(read-string nil
|
||||||
|
(format "Edit word%s: "
|
||||||
|
(if word (format " (%s)" word) ""))
|
||||||
|
word)
|
||||||
|
word)))
|
||||||
|
(let* ((ret (fuel-eval--eval-string/context
|
||||||
|
(format "\\ %s fuel-get-edit-location" word)))
|
||||||
|
(err (fuel-eval--retort-error ret))
|
||||||
|
(loc (fuel-eval--retort-result ret)))
|
||||||
|
(when (or err (not loc) (not (listp loc)) (not (stringp (car loc))))
|
||||||
|
(error "Couldn't find edit location for '%s'" word))
|
||||||
|
(unless (file-readable-p (car loc))
|
||||||
|
(error "Couldn't open '%s' for read" (car loc)))
|
||||||
|
(find-file-other-window (car loc))
|
||||||
|
(goto-line (if (numberp (cadr loc)) (cadr loc) 1)))))
|
||||||
|
|
||||||
|
|
||||||
;;; Minor mode definition:
|
;;; Minor mode definition:
|
||||||
|
@ -94,8 +129,15 @@ interacting with a factor listener is at your disposal.
|
||||||
(fuel-mode--key-1 ?z 'run-factor)
|
(fuel-mode--key-1 ?z 'run-factor)
|
||||||
|
|
||||||
(define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
|
(define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
|
||||||
|
(fuel-mode--key ?e ?x 'fuel-eval-definition)
|
||||||
|
|
||||||
(fuel-mode--key ?e ?d 'fuel-eval-definition)
|
(fuel-mode--key-1 ?r 'fuel-eval-region)
|
||||||
|
(fuel-mode--key ?e ?r 'fuel-eval-region)
|
||||||
|
|
||||||
|
(define-key fuel-mode-map "\C-\M-r" 'fuel-eval-extended-region)
|
||||||
|
(fuel-mode--key ?e ?e 'fuel-eval-extended-region)
|
||||||
|
|
||||||
|
(define-key fuel-mode-map "\M-." 'fuel-edit-word-at-point)
|
||||||
|
|
||||||
(fuel-mode--key ?d ?a 'fuel-autodoc-mode)
|
(fuel-mode--key ?d ?a 'fuel-autodoc-mode)
|
||||||
(fuel-mode--key ?d ?d 'fuel-help)
|
(fuel-mode--key ?d ?d 'fuel-help)
|
||||||
|
|
Loading…
Reference in New Issue