]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: fuel-edit-word-at-point, fuel-eval-region, fuel-eval-extended-region.
authorJose A. Ortega Ruiz <jao@gnu.org>
Sat, 6 Dec 2008 06:01:12 +0000 (07:01 +0100)
committerJose A. Ortega Ruiz <jao@gnu.org>
Sat, 6 Dec 2008 06:01:12 +0000 (07:01 +0100)
extra/fuel/fuel.factor
misc/fuel/README
misc/fuel/fuel-eval.el
misc/fuel/fuel-mode.el

index 9203f0fcddd46f55a446814ad741fd4061890603..357e7508f4c4ff2fc10759bba0294921b3206335 100644 (file)
@@ -112,6 +112,8 @@ M: continuation fuel-pprint drop "~continuation~" write ;
 : fuel-end-eval ( -- )
     [ ] (fuel-end-eval) ;
 
+: fuel-get-edit-location ( defspec -- )
+    where [ first2 [ (normalize-path) ] dip 2array fuel-eval-set-result ] when* ;
 
 : fuel-startup ( -- )
     "listener" run ;
index b98a23e92a35fc685d45eb703b008aafb5b4426e..817695f626cbe0bd11bfd324fe4390341f67af25 100644 (file)
@@ -50,7 +50,11 @@ Quick key reference
  - C-cz : switch to listener
  - 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-dd : help for word at point
index c92d8a8831a606154e6ac25dd7c64bfa309be4cb..bef7171f6fb308a477dce1bd96f2c97406e36bff 100644 (file)
@@ -38,7 +38,7 @@
         (when (and (> fuel-eval-log-max-length 0)
                    (> (point) fuel-eval-log-max-length))
           (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)))
           (comint-redirect-send-command-to-process str (current-buffer) proc nil t)
           (with-current-buffer (process-buffer proc)
index 5a3206698e85f0703026e3786e97911c84f3dfee..bd9b127c7dd2a44a0d61dcf24ef6bbee7a3511c4 100644 (file)
 \f
 ;;; 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)
   "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")
   (save-excursion
     (mark-defun)
     (let* ((begin (point))
            (end (mark)))
       (unless (< begin end) (error "No evaluable definition around point"))
-      (let* ((msg (match-string 0))
-             (ret (fuel-eval--eval-region/context begin end))
-             (err (fuel-eval--retort-error ret)))
-        (when err (error "%s" err))
-        (message "%s" (fuel--shorten-region begin end 70)))))
-  (when arg (pop-to-buffer fuel-listener-buffer)))
+      (fuel-eval-region begin end))))
+
+(defun fuel-edit-word-at-point (&optional arg)
+  "Opens a new window visiting the definition of the word at point.
+With prefix, asks for the word to edit."
+  (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)))))
 
 \f
 ;;; Minor mode definition:
@@ -94,8 +129,15 @@ interacting with a factor listener is at your disposal.
 (fuel-mode--key-1 ?z 'run-factor)
 
 (define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
+(fuel-mode--key ?e ?x '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)
 
-(fuel-mode--key ?e ?d 'fuel-eval-definition)
+(define-key fuel-mode-map "\M-." 'fuel-edit-word-at-point)
 
 (fuel-mode--key ?d ?a 'fuel-autodoc-mode)
 (fuel-mode--key ?d ?d 'fuel-help)