(defgroup riece-ruby nil
"Interact with Ruby interpreter."
+ :prefix "riece-"
:group 'riece)
(defcustom riece-ruby-command "ruby"
(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))
(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)
(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)
"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
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)