Update of /project/beirc/cvsroot/beirc In directory common-lisp.net:/tmp/cvs-serv17689
Modified Files: application.lisp message-display.lisp receivers.lisp Log Message: add a /whois command, nick translator, display methods, and a channel->join translator.
Date: Mon Sep 26 11:46:25 2005 Author: afuchs
Index: beirc/application.lisp diff -u beirc/application.lisp:1.11 beirc/application.lisp:1.12 --- beirc/application.lisp:1.11 Mon Sep 26 10:28:10 2005 +++ beirc/application.lisp Mon Sep 26 11:46:25 2005 @@ -297,6 +297,9 @@ (remove who (current-focused-nicks) :test #'string=)) (redraw-receiver (current-receiver *application-frame*)))
+(define-beirc-command (com-whois :name t) ((who 'nickname :prompt "who")) + (irc:whois (current-connection *application-frame*) who)) + (define-beirc-command (com-eval :name t) ((command 'string :prompt "command") (args '(sequence string) :prompt "arguments")) (multiple-value-bind (symbol status) (find-symbol (string-upcase command) :irc) @@ -449,6 +452,24 @@ :menu t :documentation "Ban this user's hostmask" :pointer-documentation "Ban this user's hostmask") + (object) + (list object)) + +(define-presentation-to-command-translator nickname-to-whois-translator + (nickname com-whois beirc + :gesture :select + :menu t + :documentation "Perform WHOIS query on user" + :pointer-documentation "Perform WHOIS query on user") + (object) + (list object)) + +(define-presentation-to-command-translator channel-to-join-translator + (channel com-join beirc + :gesture :describe + :menu t + :documentation "Join this channel" + :pointer-documentation "Join this channel") (object) (list object))
Index: beirc/message-display.lisp diff -u beirc/message-display.lisp:1.18 beirc/message-display.lisp:1.19 --- beirc/message-display.lisp:1.18 Mon Sep 26 11:02:41 2005 +++ beirc/message-display.lisp Mon Sep 26 11:46:25 2005 @@ -112,6 +112,7 @@ (and (current-connection *application-frame*) (irc:find-user (current-connection *application-frame*) word%))) (present word% 'nickname)) + ((channelp word%) (present word% 'channel)) (t (write-string word%))) (write-string stripped-punctuation))) ;; TODO: more highlighting @@ -153,6 +154,15 @@ (format t " ") (format-message* matter :start-length (+ 2 (length source)))))))
+(defmethod print-message ((message irc:ctcp-version-message) receiver) + (let ((source (cl-irc:source message))) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (present source 'unhighlighted-nickname) + (format t " ") + (format-message* "asked for your IRC client version" :start-length (+ 2 (length source)))))))) + ;;; server messages
(defmethod print-message ((message irc:irc-rpl_motd-message) receiver) @@ -165,7 +175,7 @@ (formatting-message (t message receiver) ((format t "!!! ~A" (irc:source message))) ((with-drawing-options (*standard-output* :ink +red+ :text-size :small) - (format t "args: ~A :~A" (irc:arguments message) (irc:trailing-argument message)))))) + (format t "~A ~A :~A" (irc:command message) (irc:arguments message) (irc:trailing-argument message))))))
;;; user-related messages
@@ -187,6 +197,50 @@ (present (irc:source message) 'nickname) (format t " (~A@~A) is now known as " (irc:user message) (irc:host message)) (present (irc:trailing-argument message) 'nickname))))) + +(defmethod print-message ((message irc:irc-rpl_whoisuser-message) receiver) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (destructuring-bind (me nickname user host &rest args) (irc:arguments message) + (declare (ignore me args)) + (present nickname 'nickname) + (format t " is (~A@~A) (~A)" user host (irc:trailing-argument message))))))) + +(defmethod print-message ((message irc:irc-rpl_whoischannels-message) receiver) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (present (second (irc:arguments message)) 'nickname) + (format-message* (format nil " is in ~A" (irc:trailing-argument message)) + :start-length (length (second (irc:arguments message)))))))) + +(defmethod print-message ((message irc:irc-rpl_whoisserver-message) receiver) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (present (second (irc:arguments message)) 'nickname) + (format-message* (format nil " is on ~A: ~A" + (third (irc:arguments message)) + (irc:trailing-argument message)) + :start-length (length (second (irc:arguments message)))))))) + +(defmethod print-message ((message irc:irc-rpl_away-message) receiver) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (present (second (irc:arguments message)) 'nickname) + (format-message* (format nil "is away: ~A" (irc:trailing-argument message)) + :start-length (length (second (irc:arguments message)))))))) + +(defmethod print-message ((message irc:irc-rpl_whoisidentified-message) receiver) + (formatting-message (t message receiver) + ((format t " ")) + ((with-drawing-options (*standard-output* :ink +gray33+ :text-size :small) + (present (second (irc:arguments message)) 'nickname) + (write-char #\Space) + (format-message* (irc:trailing-argument message) + :start-length (length (second (irc:arguments message))))))))
;;; channel management messages
Index: beirc/receivers.lisp diff -u beirc/receivers.lisp:1.4 beirc/receivers.lisp:1.5 --- beirc/receivers.lisp:1.4 Sun Sep 25 20:53:53 2005 +++ beirc/receivers.lisp Mon Sep 26 11:46:25 2005 @@ -142,7 +142,7 @@ (intern-receiver target frame :channel target)))))))) (define-nth-arg-message-receiver-lookup (0 irc:irc-topic-message irc:irc-kick-message) - (1 irc:irc-rpl_topic-message irc:irc-err_chanoprivsneeded-message) + (1 irc:irc-rpl_topic-message irc:irc-rpl_topicwhotime-message irc:irc-err_chanoprivsneeded-message irc:irc-err_nosuchnick-message) (2 irc:irc-rpl_namreply-message) (nil irc:irc-join-message)))
@@ -160,6 +160,16 @@ (3 (destructuring-bind (channel modes args) (irc:arguments message) (declare (ignore modes args)) (intern-receiver channel frame :channel channel))))) + +(macrolet ((define-current-receiver-message-types (&rest mtypes) + `(progn + ,@(loop for mtype in mtypes + collect `(defmethod receiver-for-message ((message ,mtype) frame) + (current-receiver frame)))))) + (define-current-receiver-message-types + irc:irc-rpl_whoisuser-message + irc:irc-rpl_whoischannels-message + irc:irc-rpl_whoisserver-message))
(macrolet ((define-ignore-message-types (&rest mtypes) `(progn