* riece-ruby.el: Moved add-on stuff to riece-eval-ruby.el.
[riece] / lisp / riece-eval-ruby.el
1 (require 'riece-ruby)
2 (require 'riece-message)
3
4 (defvar riece-eval-ruby-enabled nil)
5
6 (defconst riece-eval-ruby-description
7   "Evaluate an input string as Ruby program.")
8
9 (defun riece-eval-ruby-exit-handler (name)
10   (riece-ruby-inspect name)
11   (let* ((data (copy-sequence riece-ruby-data))
12          (length (length data))
13          (index 0))
14     (while (< index length)
15       (if (eq (aref data index) ?\n)
16           (aset data index ? ))
17       (setq index (1+ index)))
18     (riece-send-string
19      (format "NOTICE %s :%s\r\n"
20              (riece-identity-prefix
21               (riece-ruby-property name 'riece-eval-ruby-target))
22              data))
23     (riece-display-message
24      (riece-make-message (riece-current-nickname)
25                          (riece-ruby-property name 'riece-eval-ruby-target)
26                          data
27                          'notice))))
28
29 (defun riece-eval-ruby-display-message-function (message)
30   (if (and riece-eval-ruby-enabled
31            (riece-message-own-p message)
32            (string-match "^,ruby\\s-+" (riece-message-text message)))
33       (let ((name (riece-ruby-execute
34                    (substring (riece-message-text message)
35                               (match-end 0)))))
36         (riece-ruby-set-property name
37                                  'riece-eval-ruby-target
38                                  (riece-message-target message))
39         (riece-ruby-set-exit-handler name
40                                      #'riece-eval-ruby-exit-handler))))
41
42 (defun riece-eval-ruby-insinuate ()
43   (add-hook 'riece-after-display-message-functions
44             'riece-eval-ruby-display-message-function))
45
46 (defun riece-eval-ruby-enable ()
47   (setq riece-eval-ruby-enabled t))
48
49 (defun riece-eval-ruby-disable ()
50   (setq riece-eval-ruby-enabled nil))
51
52 (provide 'riece-eval-ruby)