ErcShow

This provides single command (/show) for the EmacsIRCClient that allows you to send the result of evaluating a lisp expression to the current channel.

Usage is simple, just type /show followed by a lisp expression, for example:

    >>> /show (let ((x 'a) (y 'b)) (list x y))
    (let ((x 'a) (y 'b)) (list x y)) => (a b)

You can get erc-show.el from http://purl.org/NET/wence/erc-show.el

This now also deals with errors, instead of entering the debugger, it shows the error in question: e.g.:

     >>> /show (system-type)
     (system-type) => Error: (void-function system-type)

Here’s a version of erc-cmd-SHOW which ensures that the expression is evaluated within the correct (channel) buffer (for buffer-local values of things):

 (defun erc-cmd-SHOW (&rest form)
   "Eval FORM and send the result and the original form as:
 FORM => (eval FORM)."
   (let* ((form-string (mapconcat 'identity form " "))
          (result
           (condition-case err
               (eval (read-from-whole-string form-string))
             (error
              (format "Error: %s" error)))))
     (erc-send-message (format "%s => %S" form-string result))))

I didn’t find the quoting to be satisfactory. Take this example.

    >>> /show (cons "foo" "bar")
    (cons "foo" "bar") => (foo . bar)

It would be better to use prin1 by using “%S” in the call to format, rather than the princ version and “%s”.

    >>> /show (cons "foo" "bar")
    (cons "foo" "bar") => ("foo" . "bar")

The following trivial patch fixes this.

--- erc-show.el	2005-09-20 09:52:36.000000000 -0400
+++ erc-show.el	2009-09-17 12:52:59.000000000 -0400
@@ -55,7 +55,7 @@
                           (eval form)
                         (error
                          (format "Error: %s" err)))))
-             (insert (format " => %s" res)))
+             (insert (format " => %S" res)))
            (buffer-substring-no-properties
             (point-min) (1- (point-max))))))
     (erc-send-message string)))

ERC