X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-eval.el;h=ce62e71fdbabb33dff564e1825e3bca5d1a29eb4;hp=de08a192a84c0e65de37ea5b9810ccdced61236a;hb=27420f2d7c555195469e3be82769eaf1a3920864;hpb=21be6a84a682cd3b8e6c8b8f11583b6c1293cffe 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))