[beirc-cvs] CVS beirc
afuchs
afuchs at common-lisp.net
Fri Mar 17 17:44:22 UTC 2006
Update of /project/beirc/cvsroot/beirc
In directory clnet:/tmp/cvs-serv14301
Modified Files:
application.lisp
Log Message:
Add an /Everywhere command, that allows performing another command on every server connection.
--- /project/beirc/cvsroot/beirc/application.lisp 2006/03/16 21:01:21 1.64
+++ /project/beirc/cvsroot/beirc/application.lisp 2006/03/17 17:44:22 1.65
@@ -122,8 +122,17 @@
(defun receiver-from-tab-pane (tab-pane &optional (frame *application-frame*))
(gethash tab-pane (tab-panes-to-receivers frame)))
+(defvar *current-receiver-override*)
+
+(defmacro with-current-receiver ((var receiver) &body body)
+ `(let* ((*current-receiver-override* ,receiver)
+ (,var *current-receiver-override*))
+ , at body))
+
(defmethod current-receiver ((frame beirc))
- (let ((receiver (receiver-from-tab-pane (enabled-pane (find-pane-named frame 'query)) frame)))
+ (let ((receiver (if (boundp '*current-receiver-override*)
+ *current-receiver-override*
+ (receiver-from-tab-pane (enabled-pane (find-pane-named frame 'query)) frame))))
(if (typep receiver 'receiver)
receiver
nil)))
@@ -515,6 +524,12 @@
(make-pathname :type nil :defaults pathname)
pathname))))
+(define-beirc-command (com-everywhere :name t) ((command 'command :prompt "command"))
+ (mapc (lambda (server-receiver)
+ (with-current-receiver (receiver (cdr server-receiver))
+ (execute-frame-command *application-frame* command)))
+ (server-receivers *application-frame*)))
+
(defun make-fake-irc-message (message-type &key command arguments
(source (current-nickname))
trailing-argument)
More information about the Beirc-cvs
mailing list