;;; erc-backend.el --- Backend network communication for ERC
-;; Copyright (C) 2004-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
;; Filename: erc-backend.el
;; Author: Lawrence Mitchell <wence@gmx.li>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
;; Created: 2004-05-7
;; Keywords: IRC chat client internet
erc-server-ping-handler)
erc-server-ping-timer-alist)))))
-(defun erc-server-process-alive ()
- "Return non-nil when `erc-server-process' is open or running."
- (and erc-server-process
- (processp erc-server-process)
- (memq (process-status erc-server-process) '(run open))))
+(defun erc-server-process-alive (&optional buffer)
+ "Return non-nil when BUFFER has an `erc-server-process' open or running."
+ (with-current-buffer (or buffer (current-buffer))
+ (and erc-server-process
+ (processp erc-server-process)
+ (memq (process-status erc-server-process) '(run open)))))
;;;; Connecting to a server
(run-at-time erc-server-reconnect-timeout nil
#'erc-process-sentinel-2
event buffer)
- (error (concat "`erc-server-reconnect-timeout`"
+ (error (concat "`erc-server-reconnect-timeout'"
" must be a number")))))))))))
(defun erc-process-sentinel-1 (event buffer)
(when (buffer-live-p buf)
(with-current-buffer buf
(erc-log (format
- "SENTINEL: proc: %S status: %S event: %S (quitting: %S)"
+ "SENTINEL: proc: %S status: %S event: %S (quitting: %S)"
cproc (process-status cproc) event erc-server-quitting))
(if (string-match "^open" event)
;; newly opened connection (no wait)
Would expand to:
(prog2
- (defvar erc-server-311-functions 'erc-server-311
+ (defvar erc-server-311-functions \\='erc-server-311
\"Some non-generic variable documentation.
Hook called upon receiving a 311 server response.
aliases))
(let* ((hook-name (intern (format "erc-server-%s-functions" name)))
(fn-name (intern (format "erc-server-%s" name)))
- (hook-doc (format "%sHook called upon receiving a %%s server response.
+ (hook-doc (format-message "\
+%sHook called upon receiving a %%s server response.
Each function is called with two arguments, the process associated
with the response and the parsed response. If the function returns
non-nil, stop processing the hook. Otherwise, continue.
(concat extra-var-doc "\n\n")
"")
fn-name))
- (fn-doc (format "%sHandler for a %s server response.
+ (fn-doc (format-message "\
+%sHandler for a %s server response.
PROC is the server process which returned the response.
PARSED is the actual response as an `erc-response' struct.
If you want to add responses don't modify this function, but rather
(cl-loop for alias in aliases
collect (intern (format "erc-server-%s-functions" alias)))))
`(prog2
- ;; Normal hook variable.
- (defvar ,hook-name ',fn-name ,(format hook-doc name))
+ ;; Normal hook variable. The variable may already have a
+ ;; value at this point, so I default to nil, and (add-hook)
+ ;; unconditionally
+ (defvar ,hook-name nil ,(format hook-doc name))
+ (add-to-list ',hook-name ',fn-name)
;; Handler function
(defun ,fn-name (proc parsed)
,fn-doc
parsed 'notice 'active
'INVITE ?n nick ?u login ?h host ?c chnl)))))
-
(define-erc-response-handler (JOIN)
"Handle join messages."
nil
(erc-format-message
'JOIN ?n nick ?u login ?h host ?c chnl))))))
(when buffer (set-buffer buffer))
- (erc-update-channel-member chnl nick nick t nil nil host login)
+ (erc-update-channel-member chnl nick nick t nil nil nil nil nil host login)
;; on join, we want to stay in the new channel buffer
;;(set-buffer ob)
(erc-display-message parsed nil buffer str))))))
;; message. We will accumulate private identities indefinitely
;; at this point.
(erc-update-channel-member (if privp nick tgt) nick nick
- privp nil nil host login nil nil t)
+ privp nil nil nil nil nil host login nil nil t)
(let ((cdata (erc-get-channel-user nick)))
(setq fnick (funcall erc-format-nick-function
(car cdata) (cdr cdata))))))
"The channel topic has changed." nil
(let* ((ch (car (erc-response.command-args parsed)))
(topic (erc-trim-string (erc-response.contents parsed)))
- (time (format-time-string erc-server-timestamp-format
- (current-time))))
+ (time (format-time-string erc-server-timestamp-format)))
(pcase-let ((`(,nick ,login ,host)
(erc-parse-user (erc-response.sender parsed))))
- (erc-update-channel-member ch nick nick nil nil nil host login)
+ (erc-update-channel-member ch nick nick nil nil nil nil nil nil host login)
(erc-update-channel-topic ch (format "%s\C-o (%s, %s)" topic nick time))
(erc-display-message parsed 'notice (erc-get-buffer ch proc)
'TOPIC ?n nick ?u login ?h host
(when (string-match "\\(^[0-9]+ \\)\\(.*\\)$" full-name)
(setq hopcount (match-string 1 full-name))
(setq full-name (match-string 2 full-name)))
- (erc-update-channel-member channel nick nick nil nil nil host
- user full-name)
+ (erc-update-channel-member channel nick nick nil nil nil nil nil nil host user full-name)
(erc-display-message parsed 'notice 'active 's352
?c channel ?n nick ?a away-flag
?u user ?h host ?f full-name))))