aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/erc/erc-backend.el
diff options
context:
space:
mode:
authorKenichi Handa2012-11-23 23:36:24 +0900
committerKenichi Handa2012-11-23 23:36:24 +0900
commit2aaec2d9be5cec44ea3b59cba476fd3e091f2fc9 (patch)
tree3711b97807201b7eeaa066003b1c3a4ce929e5bb /lisp/erc/erc-backend.el
parente1d276cbf9e18f13101328f56bed1a1c0a66e63a (diff)
parente7d0e5ee247a155a268ffbf80bedbe25e15b5032 (diff)
downloademacs-2aaec2d9be5cec44ea3b59cba476fd3e091f2fc9.tar.gz
emacs-2aaec2d9be5cec44ea3b59cba476fd3e091f2fc9.zip
Diffstat (limited to 'lisp/erc/erc-backend.el')
-rw-r--r--lisp/erc/erc-backend.el156
1 files changed, 78 insertions, 78 deletions
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 90b96d7c763..a3d0ebe121f 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -98,7 +98,7 @@
98;;; Code: 98;;; Code:
99 99
100(require 'erc-compat) 100(require 'erc-compat)
101(eval-when-compile (require 'cl)) 101(eval-when-compile (require 'cl-lib))
102;; There's a fairly strong mutual dependency between erc.el and erc-backend.el. 102;; There's a fairly strong mutual dependency between erc.el and erc-backend.el.
103;; Luckily, erc.el does not need erc-backend.el for macroexpansion whereas the 103;; Luckily, erc.el does not need erc-backend.el for macroexpansion whereas the
104;; reverse is true: 104;; reverse is true:
@@ -109,7 +109,7 @@
109(defvar erc-server-responses (make-hash-table :test #'equal) 109(defvar erc-server-responses (make-hash-table :test #'equal)
110 "Hashtable mapping server responses to their handler hooks.") 110 "Hashtable mapping server responses to their handler hooks.")
111 111
112(defstruct (erc-response (:conc-name erc-response.)) 112(cl-defstruct (erc-response (:conc-name erc-response.))
113 (unparsed "" :type string) 113 (unparsed "" :type string)
114 (sender "" :type string) 114 (sender "" :type string)
115 (command "" :type string) 115 (command "" :type string)
@@ -950,7 +950,7 @@ PROCs `process-buffer' is `current-buffer' when this function is called."
950 (push str (erc-response.command-args msg)))) 950 (push str (erc-response.command-args msg))))
951 951
952 (setf (erc-response.contents msg) 952 (setf (erc-response.contents msg)
953 (first (erc-response.command-args msg))) 953 (car (erc-response.command-args msg)))
954 954
955 (setf (erc-response.command-args msg) 955 (setf (erc-response.command-args msg)
956 (nreverse (erc-response.command-args msg))) 956 (nreverse (erc-response.command-args msg)))
@@ -1045,7 +1045,7 @@ Finds hooks by looking in the `erc-server-responses' hashtable."
1045 (name &rest name) 1045 (name &rest name)
1046 &optional sexp sexp def-body)) 1046 &optional sexp sexp def-body))
1047 1047
1048(defmacro* define-erc-response-handler ((name &rest aliases) 1048(cl-defmacro define-erc-response-handler ((name &rest aliases)
1049 &optional extra-fn-doc extra-var-doc 1049 &optional extra-fn-doc extra-var-doc
1050 &rest fn-body) 1050 &rest fn-body)
1051 "Define an ERC handler hook/function pair. 1051 "Define an ERC handler hook/function pair.
@@ -1154,11 +1154,11 @@ add things to `%s' instead."
1154 "") 1154 "")
1155 name hook-name)) 1155 name hook-name))
1156 (fn-alternates 1156 (fn-alternates
1157 (loop for alias in aliases 1157 (cl-loop for alias in aliases
1158 collect (intern (format "erc-server-%s" alias)))) 1158 collect (intern (format "erc-server-%s" alias))))
1159 (var-alternates 1159 (var-alternates
1160 (loop for alias in aliases 1160 (cl-loop for alias in aliases
1161 collect (intern (format "erc-server-%s-functions" alias))))) 1161 collect (intern (format "erc-server-%s-functions" alias)))))
1162 `(prog2 1162 `(prog2
1163 ;; Normal hook variable. 1163 ;; Normal hook variable.
1164 (defvar ,hook-name ',fn-name ,(format hook-doc name)) 1164 (defvar ,hook-name ',fn-name ,(format hook-doc name))
@@ -1172,19 +1172,19 @@ add things to `%s' instead."
1172 (put ',hook-name 'definition-name ',name) 1172 (put ',hook-name 'definition-name ',name)
1173 1173
1174 ;; Hashtable map of responses to hook variables 1174 ;; Hashtable map of responses to hook variables
1175 ,@(loop for response in (cons name aliases) 1175 ,@(cl-loop for response in (cons name aliases)
1176 for var in (cons hook-name var-alternates) 1176 for var in (cons hook-name var-alternates)
1177 collect `(puthash ,(format "%s" response) ',var 1177 collect `(puthash ,(format "%s" response) ',var
1178 erc-server-responses)) 1178 erc-server-responses))
1179 ;; Alternates. 1179 ;; Alternates.
1180 ;; Functions are defaliased, hook variables are defvared so we 1180 ;; Functions are defaliased, hook variables are defvared so we
1181 ;; can add hooks to one alias, but not another. 1181 ;; can add hooks to one alias, but not another.
1182 ,@(loop for fn in fn-alternates 1182 ,@(cl-loop for fn in fn-alternates
1183 for var in var-alternates 1183 for var in var-alternates
1184 for a in aliases 1184 for a in aliases
1185 nconc (list `(defalias ',fn ',fn-name) 1185 nconc (list `(defalias ',fn ',fn-name)
1186 `(defvar ,var ',fn-name ,(format hook-doc a)) 1186 `(defvar ,var ',fn-name ,(format hook-doc a))
1187 `(put ',var 'definition-name ',hook-name)))))) 1187 `(put ',var 'definition-name ',hook-name))))))
1188 1188
1189(define-erc-response-handler (ERROR) 1189(define-erc-response-handler (ERROR)
1190 "Handle an ERROR command from the server." nil 1190 "Handle an ERROR command from the server." nil
@@ -1196,10 +1196,10 @@ add things to `%s' instead."
1196(define-erc-response-handler (INVITE) 1196(define-erc-response-handler (INVITE)
1197 "Handle invitation messages." 1197 "Handle invitation messages."
1198 nil 1198 nil
1199 (let ((target (first (erc-response.command-args parsed))) 1199 (let ((target (car (erc-response.command-args parsed)))
1200 (chnl (erc-response.contents parsed))) 1200 (chnl (erc-response.contents parsed)))
1201 (multiple-value-bind (nick login host) 1201 (pcase-let ((`(,nick ,login ,host)
1202 (values-list (erc-parse-user (erc-response.sender parsed))) 1202 (erc-parse-user (erc-response.sender parsed))))
1203 (setq erc-invitation chnl) 1203 (setq erc-invitation chnl)
1204 (when (string= target (erc-current-nick)) 1204 (when (string= target (erc-current-nick))
1205 (erc-display-message 1205 (erc-display-message
@@ -1212,8 +1212,8 @@ add things to `%s' instead."
1212 nil 1212 nil
1213 (let ((chnl (erc-response.contents parsed)) 1213 (let ((chnl (erc-response.contents parsed))
1214 (buffer nil)) 1214 (buffer nil))
1215 (multiple-value-bind (nick login host) 1215 (pcase-let ((`(,nick ,login ,host)
1216 (values-list (erc-parse-user (erc-response.sender parsed))) 1216 (erc-parse-user (erc-response.sender parsed))))
1217 ;; strip the stupid combined JOIN facility (IRC 2.9) 1217 ;; strip the stupid combined JOIN facility (IRC 2.9)
1218 (if (string-match "^\\(.*\\)?\^g.*$" chnl) 1218 (if (string-match "^\\(.*\\)?\^g.*$" chnl)
1219 (setq chnl (match-string 1 chnl))) 1219 (setq chnl (match-string 1 chnl)))
@@ -1249,12 +1249,12 @@ add things to `%s' instead."
1249 1249
1250(define-erc-response-handler (KICK) 1250(define-erc-response-handler (KICK)
1251 "Handle kick messages received from the server." nil 1251 "Handle kick messages received from the server." nil
1252 (let* ((ch (first (erc-response.command-args parsed))) 1252 (let* ((ch (nth 0 (erc-response.command-args parsed)))
1253 (tgt (second (erc-response.command-args parsed))) 1253 (tgt (nth 1 (erc-response.command-args parsed)))
1254 (reason (erc-trim-string (erc-response.contents parsed))) 1254 (reason (erc-trim-string (erc-response.contents parsed)))
1255 (buffer (erc-get-buffer ch proc))) 1255 (buffer (erc-get-buffer ch proc)))
1256 (multiple-value-bind (nick login host) 1256 (pcase-let ((`(,nick ,login ,host)
1257 (values-list (erc-parse-user (erc-response.sender parsed))) 1257 (erc-parse-user (erc-response.sender parsed))))
1258 (erc-remove-channel-member buffer tgt) 1258 (erc-remove-channel-member buffer tgt)
1259 (cond 1259 (cond
1260 ((string= tgt (erc-current-nick)) 1260 ((string= tgt (erc-current-nick))
@@ -1277,11 +1277,11 @@ add things to `%s' instead."
1277 1277
1278(define-erc-response-handler (MODE) 1278(define-erc-response-handler (MODE)
1279 "Handle server mode changes." nil 1279 "Handle server mode changes." nil
1280 (let ((tgt (first (erc-response.command-args parsed))) 1280 (let ((tgt (car (erc-response.command-args parsed)))
1281 (mode (mapconcat 'identity (cdr (erc-response.command-args parsed)) 1281 (mode (mapconcat 'identity (cdr (erc-response.command-args parsed))
1282 " "))) 1282 " ")))
1283 (multiple-value-bind (nick login host) 1283 (pcase-let ((`(,nick ,login ,host)
1284 (values-list (erc-parse-user (erc-response.sender parsed))) 1284 (erc-parse-user (erc-response.sender parsed))))
1285 (erc-log (format "MODE: %s -> %s: %s" nick tgt mode)) 1285 (erc-log (format "MODE: %s -> %s: %s" nick tgt mode))
1286 ;; dirty hack 1286 ;; dirty hack
1287 (let ((buf (cond ((erc-channel-p tgt) 1287 (let ((buf (cond ((erc-channel-p tgt)
@@ -1305,8 +1305,8 @@ add things to `%s' instead."
1305 "Handle nick change messages." nil 1305 "Handle nick change messages." nil
1306 (let ((nn (erc-response.contents parsed)) 1306 (let ((nn (erc-response.contents parsed))
1307 bufs) 1307 bufs)
1308 (multiple-value-bind (nick login host) 1308 (pcase-let ((`(,nick ,login ,host)
1309 (values-list (erc-parse-user (erc-response.sender parsed))) 1309 (erc-parse-user (erc-response.sender parsed))))
1310 (setq bufs (erc-buffer-list-with-nick nick proc)) 1310 (setq bufs (erc-buffer-list-with-nick nick proc))
1311 (erc-log (format "NICK: %s -> %s" nick nn)) 1311 (erc-log (format "NICK: %s -> %s" nick nn))
1312 ;; if we had a query with this user, make sure future messages will be 1312 ;; if we had a query with this user, make sure future messages will be
@@ -1340,11 +1340,11 @@ add things to `%s' instead."
1340 1340
1341(define-erc-response-handler (PART) 1341(define-erc-response-handler (PART)
1342 "Handle part messages." nil 1342 "Handle part messages." nil
1343 (let* ((chnl (first (erc-response.command-args parsed))) 1343 (let* ((chnl (car (erc-response.command-args parsed)))
1344 (reason (erc-trim-string (erc-response.contents parsed))) 1344 (reason (erc-trim-string (erc-response.contents parsed)))
1345 (buffer (erc-get-buffer chnl proc))) 1345 (buffer (erc-get-buffer chnl proc)))
1346 (multiple-value-bind (nick login host) 1346 (pcase-let ((`(,nick ,login ,host)
1347 (values-list (erc-parse-user (erc-response.sender parsed))) 1347 (erc-parse-user (erc-response.sender parsed))))
1348 (erc-remove-channel-member buffer nick) 1348 (erc-remove-channel-member buffer nick)
1349 (erc-display-message parsed 'notice buffer 1349 (erc-display-message parsed 'notice buffer
1350 'PART ?n nick ?u login 1350 'PART ?n nick ?u login
@@ -1361,7 +1361,7 @@ add things to `%s' instead."
1361 1361
1362(define-erc-response-handler (PING) 1362(define-erc-response-handler (PING)
1363 "Handle ping messages." nil 1363 "Handle ping messages." nil
1364 (let ((pinger (first (erc-response.command-args parsed)))) 1364 (let ((pinger (car (erc-response.command-args parsed))))
1365 (erc-log (format "PING: %s" pinger)) 1365 (erc-log (format "PING: %s" pinger))
1366 ;; ping response to the server MUST be forced, or you can lose big 1366 ;; ping response to the server MUST be forced, or you can lose big
1367 (erc-server-send (format "PONG :%s" pinger) t) 1367 (erc-server-send (format "PONG :%s" pinger) t)
@@ -1379,7 +1379,7 @@ add things to `%s' instead."
1379 (when erc-verbose-server-ping 1379 (when erc-verbose-server-ping
1380 (erc-display-message 1380 (erc-display-message
1381 parsed 'notice proc 'PONG 1381 parsed 'notice proc 'PONG
1382 ?h (first (erc-response.command-args parsed)) ?i erc-server-lag 1382 ?h (car (erc-response.command-args parsed)) ?i erc-server-lag
1383 ?s (if (/= erc-server-lag 1) "s" ""))) 1383 ?s (if (/= erc-server-lag 1) "s" "")))
1384 (erc-update-mode-line)))) 1384 (erc-update-mode-line))))
1385 1385
@@ -1451,8 +1451,8 @@ add things to `%s' instead."
1451 "Another user has quit IRC." nil 1451 "Another user has quit IRC." nil
1452 (let ((reason (erc-response.contents parsed)) 1452 (let ((reason (erc-response.contents parsed))
1453 bufs) 1453 bufs)
1454 (multiple-value-bind (nick login host) 1454 (pcase-let ((`(,nick ,login ,host)
1455 (values-list (erc-parse-user (erc-response.sender parsed))) 1455 (erc-parse-user (erc-response.sender parsed))))
1456 (setq bufs (erc-buffer-list-with-nick nick proc)) 1456 (setq bufs (erc-buffer-list-with-nick nick proc))
1457 (erc-remove-user nick) 1457 (erc-remove-user nick)
1458 (setq reason (erc-wash-quit-reason reason nick login host)) 1458 (setq reason (erc-wash-quit-reason reason nick login host))
@@ -1462,12 +1462,12 @@ add things to `%s' instead."
1462 1462
1463(define-erc-response-handler (TOPIC) 1463(define-erc-response-handler (TOPIC)
1464 "The channel topic has changed." nil 1464 "The channel topic has changed." nil
1465 (let* ((ch (first (erc-response.command-args parsed))) 1465 (let* ((ch (car (erc-response.command-args parsed)))
1466 (topic (erc-trim-string (erc-response.contents parsed))) 1466 (topic (erc-trim-string (erc-response.contents parsed)))
1467 (time (format-time-string erc-server-timestamp-format 1467 (time (format-time-string erc-server-timestamp-format
1468 (current-time)))) 1468 (current-time))))
1469 (multiple-value-bind (nick login host) 1469 (pcase-let ((`(,nick ,login ,host)
1470 (values-list (erc-parse-user (erc-response.sender parsed))) 1470 (erc-parse-user (erc-response.sender parsed))))
1471 (erc-update-channel-member ch nick nick nil nil nil host login) 1471 (erc-update-channel-member ch nick nick nil nil nil host login)
1472 (erc-update-channel-topic ch (format "%s\C-o (%s, %s)" topic nick time)) 1472 (erc-update-channel-topic ch (format "%s\C-o (%s, %s)" topic nick time))
1473 (erc-display-message parsed 'notice (erc-get-buffer ch proc) 1473 (erc-display-message parsed 'notice (erc-get-buffer ch proc)
@@ -1477,8 +1477,8 @@ add things to `%s' instead."
1477(define-erc-response-handler (WALLOPS) 1477(define-erc-response-handler (WALLOPS)
1478 "Display a WALLOPS message." nil 1478 "Display a WALLOPS message." nil
1479 (let ((message (erc-response.contents parsed))) 1479 (let ((message (erc-response.contents parsed)))
1480 (multiple-value-bind (nick login host) 1480 (pcase-let ((`(,nick ,login ,host)
1481 (values-list (erc-parse-user (erc-response.sender parsed))) 1481 (erc-parse-user (erc-response.sender parsed))))
1482 (erc-display-message 1482 (erc-display-message
1483 parsed 'notice nil 1483 parsed 'notice nil
1484 'WALLOPS ?n nick ?m message)))) 1484 'WALLOPS ?n nick ?m message))))
@@ -1486,7 +1486,7 @@ add things to `%s' instead."
1486(define-erc-response-handler (001) 1486(define-erc-response-handler (001)
1487 "Set `erc-server-current-nick' to reflect server settings and display the welcome message." 1487 "Set `erc-server-current-nick' to reflect server settings and display the welcome message."
1488 nil 1488 nil
1489 (erc-set-current-nick (first (erc-response.command-args parsed))) 1489 (erc-set-current-nick (car (erc-response.command-args parsed)))
1490 (erc-update-mode-line) ; needed here? 1490 (erc-update-mode-line) ; needed here?
1491 (setq erc-nick-change-attempt-count 0) 1491 (setq erc-nick-change-attempt-count 0)
1492 (setq erc-default-nicks (if (consp erc-nick) erc-nick (list erc-nick))) 1492 (setq erc-default-nicks (if (consp erc-nick) erc-nick (list erc-nick)))
@@ -1507,16 +1507,16 @@ add things to `%s' instead."
1507 1507
1508(define-erc-response-handler (004) 1508(define-erc-response-handler (004)
1509 "Display the server's identification." nil 1509 "Display the server's identification." nil
1510 (multiple-value-bind (server-name server-version) 1510 (pcase-let ((`(,server-name ,server-version)
1511 (values-list (cdr (erc-response.command-args parsed))) 1511 (cdr (erc-response.command-args parsed))))
1512 (setq erc-server-version server-version) 1512 (setq erc-server-version server-version)
1513 (setq erc-server-announced-name server-name) 1513 (setq erc-server-announced-name server-name)
1514 (erc-update-mode-line-buffer (process-buffer proc)) 1514 (erc-update-mode-line-buffer (process-buffer proc))
1515 (erc-display-message 1515 (erc-display-message
1516 parsed 'notice proc 1516 parsed 'notice proc
1517 's004 ?s server-name ?v server-version 1517 's004 ?s server-name ?v server-version
1518 ?U (fourth (erc-response.command-args parsed)) 1518 ?U (nth 3 (erc-response.command-args parsed))
1519 ?C (fifth (erc-response.command-args parsed))))) 1519 ?C (nth 4 (erc-response.command-args parsed)))))
1520 1520
1521(define-erc-response-handler (005) 1521(define-erc-response-handler (005)
1522 "Set the variable `erc-server-parameters' and display the received message. 1522 "Set the variable `erc-server-parameters' and display the received message.
@@ -1547,7 +1547,7 @@ A server may send more than one 005 message."
1547 1547
1548(define-erc-response-handler (221) 1548(define-erc-response-handler (221)
1549 "Display the current user modes." nil 1549 "Display the current user modes." nil
1550 (let* ((nick (first (erc-response.command-args parsed))) 1550 (let* ((nick (car (erc-response.command-args parsed)))
1551 (modes (mapconcat 'identity 1551 (modes (mapconcat 'identity
1552 (cdr (erc-response.command-args parsed)) " "))) 1552 (cdr (erc-response.command-args parsed)) " ")))
1553 (erc-set-modes nick modes) 1553 (erc-set-modes nick modes)
@@ -1576,8 +1576,8 @@ See `erc-display-server-message'." nil
1576 1576
1577(define-erc-response-handler (275) 1577(define-erc-response-handler (275)
1578 "Display secure connection message." nil 1578 "Display secure connection message." nil
1579 (multiple-value-bind (nick user message) 1579 (pcase-let ((`(,nick ,user ,message)
1580 (values-list (cdr (erc-response.command-args parsed))) 1580 (cdr (erc-response.command-args parsed))))
1581 (erc-display-message 1581 (erc-display-message
1582 parsed 'notice 'active 's275 1582 parsed 'notice 'active 's275
1583 ?n nick 1583 ?n nick
@@ -1612,8 +1612,8 @@ See `erc-display-server-message'." nil
1612 1612
1613(define-erc-response-handler (307) 1613(define-erc-response-handler (307)
1614 "Display nick-identified message." nil 1614 "Display nick-identified message." nil
1615 (multiple-value-bind (nick user message) 1615 (pcase-let ((`(,nick ,user ,message)
1616 (values-list (cdr (erc-response.command-args parsed))) 1616 (cdr (erc-response.command-args parsed))))
1617 (erc-display-message 1617 (erc-display-message
1618 parsed 'notice 'active 's307 1618 parsed 'notice 'active 's307
1619 ?n nick 1619 ?n nick
@@ -1624,8 +1624,8 @@ See `erc-display-server-message'." nil
1624 "WHOIS/WHOWAS notices." nil 1624 "WHOIS/WHOWAS notices." nil
1625 (let ((fname (erc-response.contents parsed)) 1625 (let ((fname (erc-response.contents parsed))
1626 (catalog-entry (intern (format "s%s" (erc-response.command parsed))))) 1626 (catalog-entry (intern (format "s%s" (erc-response.command parsed)))))
1627 (multiple-value-bind (nick user host) 1627 (pcase-let ((`(,nick ,user ,host)
1628 (values-list (cdr (erc-response.command-args parsed))) 1628 (cdr (erc-response.command-args parsed))))
1629 (erc-update-user-nick nick nick host nil fname user) 1629 (erc-update-user-nick nick nick host nil fname user)
1630 (erc-display-message 1630 (erc-display-message
1631 parsed 'notice 'active catalog-entry 1631 parsed 'notice 'active catalog-entry
@@ -1633,8 +1633,8 @@ See `erc-display-server-message'." nil
1633 1633
1634(define-erc-response-handler (312) 1634(define-erc-response-handler (312)
1635 "Server name response in WHOIS." nil 1635 "Server name response in WHOIS." nil
1636 (multiple-value-bind (nick server-host) 1636 (pcase-let ((`(,nick ,server-host))
1637 (values-list (cdr (erc-response.command-args parsed))) 1637 (cdr (erc-response.command-args parsed)))
1638 (erc-display-message 1638 (erc-display-message
1639 parsed 'notice 'active 's312 1639 parsed 'notice 'active 's312
1640 ?n nick ?s server-host ?c (erc-response.contents parsed)))) 1640 ?n nick ?s server-host ?c (erc-response.contents parsed))))
@@ -1655,8 +1655,8 @@ See `erc-display-server-message'." nil
1655 1655
1656(define-erc-response-handler (317) 1656(define-erc-response-handler (317)
1657 "IDLE notice." nil 1657 "IDLE notice." nil
1658 (multiple-value-bind (nick seconds-idle on-since time) 1658 (pcase-let ((`(,nick ,seconds-idle ,on-since ,time)
1659 (values-list (cdr (erc-response.command-args parsed))) 1659 (cdr (erc-response.command-args parsed))))
1660 (setq time (when on-since 1660 (setq time (when on-since
1661 (format-time-string erc-server-timestamp-format 1661 (format-time-string erc-server-timestamp-format
1662 (erc-string-to-emacs-time on-since)))) 1662 (erc-string-to-emacs-time on-since))))
@@ -1696,16 +1696,16 @@ See `erc-display-server-message'." nil
1696(define-erc-response-handler (322) 1696(define-erc-response-handler (322)
1697 "LIST notice." nil 1697 "LIST notice." nil
1698 (let ((topic (erc-response.contents parsed))) 1698 (let ((topic (erc-response.contents parsed)))
1699 (multiple-value-bind (channel num-users) 1699 (pcase-let ((`(,channel ,num-users)
1700 (values-list (cdr (erc-response.command-args parsed))) 1700 (cdr (erc-response.command-args parsed))))
1701 (add-to-list 'erc-channel-list (list channel)) 1701 (add-to-list 'erc-channel-list (list channel))
1702 (erc-update-channel-topic channel topic)))) 1702 (erc-update-channel-topic channel topic))))
1703 1703
1704(defun erc-server-322-message (proc parsed) 1704(defun erc-server-322-message (proc parsed)
1705 "Display a message for the 322 event." 1705 "Display a message for the 322 event."
1706 (let ((topic (erc-response.contents parsed))) 1706 (let ((topic (erc-response.contents parsed)))
1707 (multiple-value-bind (channel num-users) 1707 (pcase-let ((`(,channel ,num-users)
1708 (values-list (cdr (erc-response.command-args parsed))) 1708 (cdr (erc-response.command-args parsed))))
1709 (erc-display-message 1709 (erc-display-message
1710 parsed 'notice proc 's322 1710 parsed 'notice proc 's322
1711 ?c channel ?u num-users ?t (or topic ""))))) 1711 ?c channel ?u num-users ?t (or topic "")))))
@@ -1732,7 +1732,7 @@ See `erc-display-server-message'." nil
1732 "Channel creation date." nil 1732 "Channel creation date." nil
1733 (let ((channel (second (erc-response.command-args parsed))) 1733 (let ((channel (second (erc-response.command-args parsed)))
1734 (time (erc-string-to-emacs-time 1734 (time (erc-string-to-emacs-time
1735 (third (erc-response.command-args parsed))))) 1735 (nth 2 (erc-response.command-args parsed)))))
1736 (erc-display-message 1736 (erc-display-message
1737 parsed 'notice (erc-get-buffer channel proc) 1737 parsed 'notice (erc-get-buffer channel proc)
1738 's329 ?c channel ?t (format-time-string erc-server-timestamp-format 1738 's329 ?c channel ?t (format-time-string erc-server-timestamp-format
@@ -1749,7 +1749,7 @@ See `erc-display-server-message'." nil
1749 ;; authmsg == (aref parsed 5) 1749 ;; authmsg == (aref parsed 5)
1750 ;; The guesses below are, well, just that. -- Lawrence 2004/05/10 1750 ;; The guesses below are, well, just that. -- Lawrence 2004/05/10
1751 (let ((nick (second (erc-response.command-args parsed))) 1751 (let ((nick (second (erc-response.command-args parsed)))
1752 (authaccount (third (erc-response.command-args parsed))) 1752 (authaccount (nth 2 (erc-response.command-args parsed)))
1753 (authmsg (erc-response.contents parsed))) 1753 (authmsg (erc-response.contents parsed)))
1754 (erc-display-message parsed 'notice 'active 's330 1754 (erc-display-message parsed 'notice 'active 's330
1755 ?n nick ?a authmsg ?i authaccount))) 1755 ?n nick ?a authmsg ?i authaccount)))
@@ -1771,8 +1771,8 @@ See `erc-display-server-message'." nil
1771 1771
1772(define-erc-response-handler (333) 1772(define-erc-response-handler (333)
1773 "Who set the topic, and when." nil 1773 "Who set the topic, and when." nil
1774 (multiple-value-bind (channel nick time) 1774 (pcase-let ((`(,channel ,nick ,time)
1775 (values-list (cdr (erc-response.command-args parsed))) 1775 (cdr (erc-response.command-args parsed))))
1776 (setq time (format-time-string erc-server-timestamp-format 1776 (setq time (format-time-string erc-server-timestamp-format
1777 (erc-string-to-emacs-time time))) 1777 (erc-string-to-emacs-time time)))
1778 (erc-update-channel-topic channel 1778 (erc-update-channel-topic channel
@@ -1784,15 +1784,15 @@ See `erc-display-server-message'." nil
1784(define-erc-response-handler (341) 1784(define-erc-response-handler (341)
1785 "Let user know when an INVITE attempt has been sent successfully." 1785 "Let user know when an INVITE attempt has been sent successfully."
1786 nil 1786 nil
1787 (multiple-value-bind (nick channel) 1787 (pcase-let ((`(,nick ,channel)
1788 (values-list (cdr (erc-response.command-args parsed))) 1788 (cdr (erc-response.command-args parsed))))
1789 (erc-display-message parsed 'notice (erc-get-buffer channel proc) 1789 (erc-display-message parsed 'notice (erc-get-buffer channel proc)
1790 's341 ?n nick ?c channel))) 1790 's341 ?n nick ?c channel)))
1791 1791
1792(define-erc-response-handler (352) 1792(define-erc-response-handler (352)
1793 "WHO notice." nil 1793 "WHO notice." nil
1794 (multiple-value-bind (channel user host server nick away-flag) 1794 (pcase-let ((`(,channel ,user ,host ,server ,nick ,away-flag)
1795 (values-list (cdr (erc-response.command-args parsed))) 1795 (cdr (erc-response.command-args parsed))))
1796 (let ((full-name (erc-response.contents parsed)) 1796 (let ((full-name (erc-response.contents parsed))
1797 hopcount) 1797 hopcount)
1798 (when (string-match "\\(^[0-9]+ \\)\\(.*\\)$" full-name) 1798 (when (string-match "\\(^[0-9]+ \\)\\(.*\\)$" full-name)
@@ -1806,7 +1806,7 @@ See `erc-display-server-message'." nil
1806 1806
1807(define-erc-response-handler (353) 1807(define-erc-response-handler (353)
1808 "NAMES notice." nil 1808 "NAMES notice." nil
1809 (let ((channel (third (erc-response.command-args parsed))) 1809 (let ((channel (nth 2 (erc-response.command-args parsed)))
1810 (users (erc-response.contents parsed))) 1810 (users (erc-response.contents parsed)))
1811 (erc-display-message parsed 'notice (or (erc-get-buffer channel proc) 1811 (erc-display-message parsed 'notice (or (erc-get-buffer channel proc)
1812 'active) 1812 'active)
@@ -1821,8 +1821,8 @@ See `erc-display-server-message'." nil
1821 1821
1822(define-erc-response-handler (367) 1822(define-erc-response-handler (367)
1823 "Channel ban list entries." nil 1823 "Channel ban list entries." nil
1824 (multiple-value-bind (channel banmask setter time) 1824 (pcase-let ((`(,channel ,banmask ,setter ,time)
1825 (values-list (cdr (erc-response.command-args parsed))) 1825 (cdr (erc-response.command-args parsed))))
1826 ;; setter and time are not standard 1826 ;; setter and time are not standard
1827 (if setter 1827 (if setter
1828 (erc-display-message parsed 'notice 'active 's367-set-by 1828 (erc-display-message parsed 'notice 'active 's367-set-by
@@ -1845,8 +1845,8 @@ See `erc-display-server-message'." nil
1845 ;; FIXME: Yet more magic numbers in original code, I'm guessing this 1845 ;; FIXME: Yet more magic numbers in original code, I'm guessing this
1846 ;; command takes two arguments, and doesn't have any "contents". -- 1846 ;; command takes two arguments, and doesn't have any "contents". --
1847 ;; Lawrence 2004/05/10 1847 ;; Lawrence 2004/05/10
1848 (multiple-value-bind (from to) 1848 (pcase-let ((`(,from ,to)
1849 (values-list (cdr (erc-response.command-args parsed))) 1849 (cdr (erc-response.command-args parsed))))
1850 (erc-display-message parsed 'notice 'active 1850 (erc-display-message parsed 'notice 'active
1851 's379 ?c from ?f to))) 1851 's379 ?c from ?f to)))
1852 1852
@@ -1855,7 +1855,7 @@ See `erc-display-server-message'." nil
1855 (erc-display-message 1855 (erc-display-message
1856 parsed 'notice 'active 1856 parsed 'notice 'active
1857 's391 ?s (second (erc-response.command-args parsed)) 1857 's391 ?s (second (erc-response.command-args parsed))
1858 ?t (third (erc-response.command-args parsed)))) 1858 ?t (nth 2 (erc-response.command-args parsed))))
1859 1859
1860(define-erc-response-handler (401) 1860(define-erc-response-handler (401)
1861 "No such nick/channel." nil 1861 "No such nick/channel." nil