X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-eval.el;h=ce62e71fdbabb33dff564e1825e3bca5d1a29eb4;hb=cf558e1777e8132d734bbea48b1c7bcad38cbf68;hp=de08a192a84c0e65de37ea5b9810ccdced61236a;hpb=e824524bb6879ff23ccb9646e986af9236f7ae79;p=elisp%2Friece.git diff --git a/lisp/riece-eval.el b/lisp/riece-eval.el index de08a19..ce62e71 100644 --- a/lisp/riece-eval.el +++ b/lisp/riece-eval.el @@ -1,4 +1,4 @@ -;;; riece-eval.el --- eval add-on +;;; riece-eval.el --- evaluate input string as an elisp form ;; Copyright (C) 2005 OHASHI Akira ;; Author: OHASHI Akira @@ -23,11 +23,7 @@ ;;; Commentary: -;; This add-on evaluates an input string as lisp object and sends a result -;; as notice. Note the risky of this add-on. - -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-eval) +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -35,7 +31,7 @@ (require 'riece-message) (defgroup riece-eval nil - "Evaluate an input string as lisp object." + "Evaluate an input string as an elisp form." :prefix "riece-" :group 'riece) @@ -52,31 +48,14 @@ (defvar riece-eval-enabled nil) (defconst riece-eval-description - "Evaluate an input string as lisp object.") + "Evaluate an input string as an elisp form.") (defun riece-eval-display-message-function (message) (when (and riece-eval-enabled (riece-message-own-p message) (string-match riece-eval-regexp (riece-message-text message))) - (let ((form (match-string 1 (riece-message-text message))) - object string) - (condition-case err - (progn - (setq object (eval (read form))) - (setq string - (cond - ((stringp object) object) - ((and (listp object) - (not (eq object nil))) - (let ((string (pp-to-string object))) - (substring string 0 (1- (length string))))) - ((numberp object) - (number-to-string object)) - ((eq object nil) "") - (t (pp-to-string object))))) - (error - (unless riece-eval-ignore-error - (setq string (format "Error evaluating %s: %s" form err))))) + (let* ((form (match-string 1 (riece-message-text message))) + (string (riece-eval-form form))) (unless (equal string "") (riece-send-string (format "NOTICE %s :%s\r\n" @@ -87,10 +66,31 @@ (riece-message-target message) string 'notice)))))) +(defun riece-eval-form (form) + (condition-case err + (let ((object (eval (read form)))) + (cond + ((stringp object) object) + ((and (listp object) + (not (eq object nil))) + (let ((string (pp-to-string object))) + (substring string 0 (1- (length string))))) + ((numberp object) + (number-to-string object)) + ((eq object nil) "") + (t (pp-to-string object)))) + (error + (unless riece-eval-ignore-error + (format "Error evaluating %s: %s" form err))))) + (defun riece-eval-insinuate () (add-hook 'riece-after-display-message-functions 'riece-eval-display-message-function)) +(defun riece-eval-uninstall () + (remove-hook 'riece-after-display-message-functions + 'riece-eval-display-message-function)) + (defun riece-eval-enable () (setq riece-eval-enabled t))