Fixed.
[riece] / lisp / riece-ruby.el
index e11ec90..a58b4f7 100644 (file)
@@ -52,6 +52,7 @@
 
 (defgroup riece-ruby nil
   "Interact with Ruby interpreter."
+  :prefix "riece-"
   :group 'riece)
 
 (defcustom riece-ruby-command "ruby"
@@ -215,7 +216,8 @@ Use `riece-ruby-set-property' to set this variable.")
                       (cdr (car riece-ruby-status-alist)))))
              (if (looking-at "# output \\([^ ]*\\) \\(.*\\)\r")
                  (riece-ruby-run-output-handler (match-string 1)
-                                                (match-string 2))
+                                                (match-string 2)
+                                                (current-time))
                (if (looking-at "# exit \\(.*\\)\r")
                    (riece-ruby-run-exit-handler (match-string 1))))))))
       (forward-line))
@@ -226,18 +228,24 @@ Use `riece-ruby-set-property' to set this variable.")
     (when entry
       (setq riece-ruby-exit-handler-alist
            (delq entry riece-ruby-exit-handler-alist))
-      (riece-funcall-ignore-errors name (cdr entry) (car entry))
+      (riece-funcall-ignore-errors (if (symbolp (cdr entry))
+                                      (symbol-name (cdr entry))
+                                    (format "%s-exit-handler" name))
+                                  (cdr entry) (car entry))
       (riece-ruby-clear name))))
 
-(defun riece-ruby-run-output-handler (name output)
+(defun riece-ruby-run-output-handler (name output time)
   (let ((handler-entry (assoc name riece-ruby-output-handler-alist))
        (entry (assoc name riece-ruby-output-queue-alist)))
     (if handler-entry
-       (riece-funcall-ignore-errors name (cdr handler-entry) name output)
+       (riece-funcall-ignore-errors (if (symbolp (cdr handler-entry))
+                                        (symbol-name (cdr handler-entry))
+                                      (format "%s-output-handler" name))
+                                    (cdr handler-entry) name output time)
       (if entry
-         (setcdr entry (cons output (cdr entry)))
+         (setcdr entry (cons (cons output time) (cdr entry)))
        (setq riece-ruby-output-queue-alist
-             (cons (list name output)
+             (cons (list name (cons output time))
                    riece-ruby-output-queue-alist))))))
 
 (defun riece-ruby-sentinel (process status)
@@ -254,13 +262,8 @@ Return a string name assigned by the server."
       (setq riece-ruby-process
            (apply #'start-process "riece-ruby" (generate-new-buffer " *Ruby*")
                   riece-ruby-command
-                  (if (file-name-absolute-p riece-ruby-server-program)
-                      riece-ruby-server-program
-                    (expand-file-name
-                     riece-ruby-server-program
-                     (file-name-directory
-                      (locate-library
-                       (symbol-file 'riece-ruby-execute)))))
+                  (expand-file-name riece-ruby-server-program
+                                    riece-data-directory)
                   riece-ruby-server-program-arguments))
       (process-kill-without-query riece-ruby-process)
       (set-process-filter riece-ruby-process #'riece-ruby-filter)
@@ -336,8 +339,9 @@ is specified.  Otherwise, it should be called explicitly."
   "Set an output-handler HANDLER for the program distinguished by NAME.
 An output-handler is called when the program sends any output by using
 `output' method in the Ruby program.
-An output-handler is called with two argument.  The first argument is
-the same as NAME.  The second argument is output string."
+An output-handler is called with three argument.  The first argument
+is the same as NAME.  The second argument is the output string.  The
+third argument is the timestamp of the output event."
   (let ((entry (assoc name riece-ruby-output-handler-alist))
        queue-entry pointer)
     (if handler
@@ -347,7 +351,11 @@ the same as NAME.  The second argument is output string."
                  riece-ruby-output-queue-alist
                  (delq queue-entry riece-ruby-output-queue-alist))
            (while pointer
-             (riece-funcall-ignore-errors name handler name (car pointer))
+             (riece-funcall-ignore-errors (if (symbolp handler)
+                                              (symbol-name handler)
+                                            (format "%s-output-handler" name))
+                                          handler name (car (car pointer))
+                                          (cdr (car pointer)))
              (setq pointer (cdr pointer))))
          (if entry
              (setcdr entry handler)