X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-ruby.el;h=a58b4f71f6533390039111361e505031b3dc262a;hp=e11ec90f31deae595d337a4192db31eef5180a6c;hb=91839c2c2836c9e81e73ade8184d07fb1ee97fc2;hpb=7cb6a3ea729d579d80da818d3090757c59501e9b diff --git a/lisp/riece-ruby.el b/lisp/riece-ruby.el index e11ec90..a58b4f7 100644 --- a/lisp/riece-ruby.el +++ b/lisp/riece-ruby.el @@ -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)