FUEL: fuel-edit-word-at-point, fuel-eval-region, fuel-eval-extended-region.

db4
Jose A. Ortega Ruiz 2008-12-06 07:01:12 +01:00
parent 3673a3e7c7
commit eb43cddb33
4 changed files with 58 additions and 10 deletions

View File

@ -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 ;

View File

@ -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

View File

@ -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)

View File

@ -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)