erc-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Erc-commit] [commit][emacs22] Handle near-simultaneous IRC server conne


From: mwolson
Subject: [Erc-commit] [commit][emacs22] Handle near-simultaneous IRC server connections better.
Date: Sun, 14 Oct 2007 00:48:27 -0400

commit 620e3f3dd9262bb06a46cc420fb7512bff85f0c5
Author: Michael Olson <address@hidden>
Date:   Sun Aug 20 06:52:21 2006 +0000

    Handle near-simultaneous IRC server connections better.
    
    * erc-identd.el (erc-identd): New customization group.
      (erc-identd-port): New option that specifies the port to use if
      none is given as an argument to erc-identd-start.
      (identd): Place erc-identd-quickstart in erc-connect-pre-hook
      instead of erc-identd-start so that we deal with the different
      meaning of the first argument.
      (erc-identd-start): Use erc-identd-port.
      (erc-identd-quickstart): New function that ignores any arguments
      and calls erc-identd-start.
    
    * erc.el (erc): Set up the prompt before connecting rather than after.
      Run erc-connect-pre-hook with the buffer as an argument, instead of no
      arguments.
      (erc-initialize-log-marker): Accept a `buffer' argument.
      (erc-connect-pre-hook): Docfix.
      (erc-connection-established): Make sure this runs in the correct
      buffer.
      (erc-set-initial-user-mode): Accept a `buffer' argument.
    
    * erc-spelling.el (erc-spelling-init): Use erc-with-server-buffer.
      Accept `buffer' argument.
      (spelling): Call erc-spelling-init with the `buffer' argument.
    
    * erc-log.el (log): Pass `buffer' argument to erc-log-setup-logging
      instead of setting the current buffer.  Ditto for
      erc-log-disable-logging.
      (erc-log-setup-logging, erc-log-disable-loggin): Accept a `buffer'
      argument.
    
    * erc-backend.el (erc-server-connect)
      (erc-server-setup-periodical-ping): Accept `buffer' argument.
    
    * erc-autoaway.el (erc-autoaway-last-sent-time)
      (erc-autoaway-caused-away): Move higher in file to fix byte-compile
      warning.
    git-archimport-id: address@hidden/erc--main--0--patch-46

diff --git a/ChangeLog b/ChangeLog
index 8647850..1b876a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2006-08-20  Michael Olson  <address@hidden>
 
+       * erc-identd.el (erc-identd): New customization group.
+       (erc-identd-port): New option that specifies the port to use if
+       none is given as an argument to erc-identd-start.
+       (identd): Place erc-identd-quickstart in erc-connect-pre-hook
+       instead of erc-identd-start so that we deal with the different
+       meaning of the first argument.
+       (erc-identd-start): Use erc-identd-port.
+       (erc-identd-quickstart): New function that ignores any arguments
+       and calls erc-identd-start.
+
        * erc.el (erc-with-server-buffer): New macro that switches to the
        current ERC server buffer and runs some code.  If no server buffer
        is available, return nil.  This is a useful way to access
@@ -21,7 +31,9 @@
        though it isn't really needed here.
        (erc-away): Mention erc-away-time.
        (erc): Don't propagate the erc-away setting, since it makes more
-       sense to access it from the server buffer.
+       sense to access it from the server buffer.  Set up the prompt
+       before connecting rather than after.  Run erc-connect-pre-hook
+       with the buffer as an argument, instead of no arguments.
        (erc-cmd-GAWAY): Use erc-open-server-buffer-p instead of
        erc-server-buffer-p so that only open connections are set away.
        (erc-cmd-GQUIT): Use erc-open-server-buffer-p.
@@ -32,10 +44,17 @@
        (erc-away-time): Rename from erc-away-p, since this is no longer a
        boolean-style predicate.
        (erc-format-away-status): Use it.
+       (erc-initialize-log-marker): Accept a `buffer' argument.
+       (erc-connect-pre-hook): Docfix.
+       (erc-connection-established): Make sure this runs in the correct
+       buffer.
+       (erc-set-initial-user-mode): Accept a `buffer' argument.
 
        * erc-stamp.el (erc-add-timestamp): Use erc-away-time.
 
-       * erc-spelling.el (erc-spelling-init): Use erc-with-server-buffer.
+       * erc-spelling.el (erc-spelling-init): Use
+       erc-with-server-buffer.  Accept `buffer' argument.
+       (spelling): Call erc-spelling-init with the `buffer' argument.
 
        * erc-speedbar.el (erc-speedbar-buttons): Use erc-server-buffer-p.
 
@@ -54,6 +73,10 @@
        erc-away-time.
 
        * erc-log.el (log): Use erc-away-time.  Remove unnecessary check.
+       Pass `buffer' argument to erc-log-setup-logging instead of setting
+       the current buffer.  Ditto for erc-log-disable-logging.
+       (erc-log-setup-logging, erc-log-disable-loggin): Accept a `buffer'
+       argument.
 
        * erc-list.el (erc-chanlist): Use erc-with-server-buffer.
 
@@ -78,6 +101,8 @@
        not given.
        (erc-server-send): Simplify slightly.
        (erc-call-hooks): Use erc-with-server-buffer.
+       (erc-server-connect, erc-server-setup-periodical-ping): Accept
+       `buffer' argument.
 
        * erc-autoaway.el (erc-autoaway-reestablish-idletimer): Move
        higher to avoid an automatic load snafu.
@@ -103,6 +128,8 @@
        (erc-autoaway-possibly-set-away, erc-autoaway-set-away): Use it.
        (erc-autoaway-set-away): Accept a `notest' argument which is used
        to avoid testing the same thing twice.
+       (erc-autoaway-last-sent-time, erc-autoaway-caused-away): Move
+       higher in file to fix byte-compile warning.
 
 2006-08-20  Diane Murray  <address@hidden>
 
diff --git a/erc-autoaway.el b/erc-autoaway.el
index af6f84b..fe8a667 100644
--- a/erc-autoaway.el
+++ b/erc-autoaway.el
@@ -40,6 +40,13 @@ yourself back when you type something."
   "The Emacs idletimer.
 This is only used when `erc-autoaway-use-emacs-idle' is non-nil.")
 
+(defvar erc-autoaway-last-sent-time (erc-current-time)
+  "The last time the user sent something.")
+
+(defvar erc-autoaway-caused-away nil
+  "Indicates whether this module was responsible for setting the
+user's away status.")
+
 (eval-when-compile (defvar erc-autoaway-idle-seconds))
 
 (defun erc-autoaway-reestablish-idletimer ()
@@ -195,13 +202,6 @@ in seconds."
   :group 'erc-autoaway
   :type 'string)
 
-(defvar erc-autoaway-last-sent-time (erc-current-time)
-  "The last time the user sent something.")
-
-(defvar erc-autoaway-caused-away nil
-  "Indicates whether this module was responsible for setting the
-user's away status.")
-
 (defun erc-autoaway-reset-idle-user (&rest stuff)
   "Reset the stored user idle time.
 This is one global variable since a user talking on one net can
diff --git a/erc-backend.el b/erc-backend.el
index bedddea..e9e0596 100644
--- a/erc-backend.el
+++ b/erc-backend.el
@@ -437,17 +437,19 @@ Additionally, detect whether the IRC process has hung."
         (erc-cancel-timer (cdr timer))
         (setcdr timer nil)))))
 
-(defun erc-server-setup-periodical-ping (&rest ignore)
-  "Set up a timer to periodically ping the current server."
-  (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler))
-  (when erc-server-send-ping-interval
-    (setq erc-server-ping-handler (run-with-timer
-                                   4 erc-server-send-ping-interval
-                                   #'erc-server-send-ping
-                                   (current-buffer)))
-    (setq erc-server-ping-timer-alist (cons (cons (current-buffer)
-                                                  erc-server-ping-handler)
-                                            erc-server-ping-timer-alist))))
+(defun erc-server-setup-periodical-ping (buffer)
+  "Set up a timer to periodically ping the current server.
+The current buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler))
+    (when erc-server-send-ping-interval
+      (setq erc-server-ping-handler (run-with-timer
+                                     4 erc-server-send-ping-interval
+                                     #'erc-server-send-ping
+                                     buffer))
+      (setq erc-server-ping-timer-alist (cons (cons buffer
+                                                    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."
@@ -457,43 +459,45 @@ Additionally, detect whether the IRC process has hung."
 
 ;;;; Connecting to a server
 
-(defun erc-server-connect (server port)
-  "Perform the connection and login.
-We will store server variables in the current buffer."
+(defun erc-server-connect (server port buffer)
+  "Perform the connection and login using the specified SERVER and PORT.
+We will store server variables in the buffer given by BUFFER."
   (let ((msg (erc-format-message 'connect ?S server ?p port)))
     (message "%s" msg)
-    (setq erc-server-process
-          (funcall erc-server-connect-function
-                   (format "erc-%s-%s" server port)
-                   (current-buffer) server port))
-    (message "%s...done" msg))
-  ;; Misc server variables
-  (setq erc-server-quitting nil)
-  (setq erc-server-timed-out nil)
-  (setq erc-server-banned nil)
-  (let ((time (erc-current-time)))
-    (setq erc-server-last-sent-time time)
-    (setq erc-server-last-ping-time time)
-    (setq erc-server-last-received-time time))
-  (setq erc-server-lines-sent 0)
-  ;; last peers (sender and receiver)
-  (setq erc-server-last-peers '(nil . nil))
-  ;; process handlers
-  (set-process-sentinel erc-server-process 'erc-process-sentinel)
-  (set-process-filter erc-server-process 'erc-server-filter-function)
-  ;; we do our own encoding and decoding
-  (when (fboundp 'set-process-coding-system)
-    (set-process-coding-system erc-server-process 'raw-text))
-  (set-marker (process-mark erc-server-process) (point))
+    (let ((process (funcall erc-server-connect-function
+                            (format "erc-%s-%s" server port)
+                            nil server port)))
+      (message "%s...done" msg)
+      ;; Misc server variables
+      (with-current-buffer buffer
+        (setq erc-server-process process)
+        (setq erc-server-quitting nil)
+        (setq erc-server-timed-out nil)
+        (setq erc-server-banned nil)
+        (let ((time (erc-current-time)))
+          (setq erc-server-last-sent-time time)
+          (setq erc-server-last-ping-time time)
+          (setq erc-server-last-received-time time))
+        (setq erc-server-lines-sent 0)
+        ;; last peers (sender and receiver)
+        (setq erc-server-last-peers '(nil . nil)))
+      ;; we do our own encoding and decoding
+      (when (fboundp 'set-process-coding-system)
+        (set-process-coding-system process 'raw-text))
+      ;; process handlers
+      (set-process-sentinel process 'erc-process-sentinel)
+      (set-process-filter process 'erc-server-filter-function)
+      (set-process-buffer process buffer)))
   (erc-log "\n\n\n********************************************\n")
-  (message (erc-format-message 'login ?n (erc-current-nick)))
+  (message (erc-format-message
+            'login ?n
+            (with-current-buffer buffer (erc-current-nick))))
   ;; wait with script loading until we receive a confirmation (first
   ;; MOTD line)
   (if (eq erc-server-connect-function 'open-network-stream-nowait)
       ;; it's a bit unclear otherwise that it's attempting to establish a
       ;; connection
-      (erc-display-message nil nil (current-buffer)
-                           "Opening connection..\n")
+      (erc-display-message nil nil buffer "Opening connection..\n")
     (erc-login)))
 
 (defun erc-server-filter-function (process string)
diff --git a/erc-identd.el b/erc-identd.el
index 32bfa33..3bac6fa 100644
--- a/erc-identd.el
+++ b/erc-identd.el
@@ -42,12 +42,26 @@
 
 (defvar erc-identd-process nil)
 
+(defgroup erc-identd nil
+  "Run a local identd server."
+  :group 'erc)
+
+(defcustom erc-identd-port 8113
+  "Port to run the identd server on if not specified in the argument for
+`erc-identd-start'.
+
+This can be either a string or a number."
+  :group 'erc-identd
+  :type '(choice (const :tag "None" nil)
+                (integer :tag "Port number")
+                (string :tag "Port string")))
+
 ;;;###autoload (autoload 'erc-identd-mode "erc-identd")
 (define-erc-module identd nil
   "This mode launches an identd server on port 8113."
-  ((add-hook 'erc-connect-pre-hook 'erc-identd-start)
+  ((add-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
    (add-hook 'erc-disconnected-hook 'erc-identd-stop))
-  ((remove-hook 'erc-connect-pre-hook 'erc-identd-start)
+  ((remove-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
    (remove-hook 'erc-disconnected-hook 'erc-identd-stop)))
 
 (defun erc-identd-filter (proc string)
@@ -71,12 +85,11 @@ run from inetd.  The idea is to provide a simple identd 
server
 when you need one, without having to install one globally on your
 system."
   (interactive (list (read-string "Serve identd requests on port: " "8113")))
-  (if (null port)
-      (setq port 8113)
-    (if (stringp port)
-       (setq port (string-to-number port))))
-  (if erc-identd-process
-      (delete-process erc-identd-process))
+  (unless port (setq port erc-identd-port))
+  (when (stringp port)
+    (setq port (string-to-number port)))
+  (when erc-identd-process
+    (delete-process erc-identd-process))
   (setq erc-identd-process
        (if (fboundp 'make-network-process)
            (make-network-process :name "identd"
@@ -89,6 +102,11 @@ system."
                "identd" (generate-new-buffer " *erc-identd*")
                port nil 'erc-identd-filter)))))
 
+(defun erc-identd-quickstart (&rest ignored)
+  "Start the identd server with the default port.
+The default port is specified by `erc-identd-port'."
+  (erc-identd-start))
+
 ;;;###autoload
 (defun erc-identd-stop (&rest ignore)
   (interactive)
diff --git a/erc-log.el b/erc-log.el
index e1b47c8..0124219 100644
--- a/erc-log.el
+++ b/erc-log.el
@@ -218,7 +218,7 @@ also be a predicate function. To only log when you are not 
set away, use:
    ;; append, so that 'erc-initialize-log-marker runs first
    (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)
    (dolist (buffer (erc-buffer-list))
-     (with-current-buffer buffer (erc-log-setup-logging))))
+     (erc-log-setup-logging buffer)))
   ;; disable
   ((remove-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs)
    (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs)
@@ -228,35 +228,38 @@ also be a predicate function. To only log when you are 
not set away, use:
    (remove-hook 'erc-part-hook 'erc-conditional-save-buffer)
    (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging)
    (dolist (buffer (erc-buffer-list))
-     (with-current-buffer buffer (erc-log-disable-logging)))))
+     (erc-log-disable-logging buffer))))
 
 (define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs)
 
 ;;; functionality referenced from erc.el
-(defun erc-log-setup-logging ()
+(defun erc-log-setup-logging (buffer)
   "Setup the buffer-local logging variables in the current buffer.
-This function is destined to be run from `erc-connect-pre-hook'."
-  (when (erc-logging-enabled)
-    (auto-save-mode -1)
-    (setq buffer-file-name nil)
-    (cond ((boundp 'write-file-functions)
-          (set (make-local-variable 'write-file-functions)
-               '(erc-save-buffer-in-logs)))
-         ((boundp 'local-write-file-hooks)
-          (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
-         (t
-          (set (make-local-variable 'write-file-hooks)
-               '(erc-save-buffer-in-logs))))
-    (when erc-log-insert-log-on-open
-      (ignore-errors (insert-file-contents (erc-current-logfile))
-                    (move-marker erc-last-saved-position
-                                 (1- (point-max)))))))
-
-(defun erc-log-disable-logging ()
-  "Disable logging in the current buffer."
-  (when (erc-logging-enabled)
-    (setq buffer-offer-save nil
-         erc-enable-logging nil)))
+This function is destined to be run from `erc-connect-pre-hook'.
+The current buffer is given by BUFFER."
+  (when (erc-logging-enabled buffer)
+    (with-current-buffer buffer
+      (auto-save-mode -1)
+      (setq buffer-file-name nil)
+      (cond ((boundp 'write-file-functions)
+            (set (make-local-variable 'write-file-functions)
+                 '(erc-save-buffer-in-logs)))
+           ((boundp 'local-write-file-hooks)
+            (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
+           (t
+            (set (make-local-variable 'write-file-hooks)
+                 '(erc-save-buffer-in-logs))))
+      (when erc-log-insert-log-on-open
+       (ignore-errors (insert-file-contents (erc-current-logfile))
+                      (move-marker erc-last-saved-position
+                                   (1- (point-max))))))))
+
+(defun erc-log-disable-logging (buffer)
+  "Disable logging in BUFFER."
+  (when (erc-logging-enabled buffer)
+    (with-current-buffer buffer
+      (setq buffer-offer-save nil
+           erc-enable-logging nil))))
 
 (defun erc-log-all-but-server-buffers (buffer)
   "Returns t if logging should be enabled in BUFFER.
diff --git a/erc-spelling.el b/erc-spelling.el
index d2e61e8..a7a8535 100644
--- a/erc-spelling.el
+++ b/erc-spelling.el
@@ -41,12 +41,10 @@
   ;; called AFTER the server buffer is initialized.
   ((add-hook 'erc-connect-pre-hook 'erc-spelling-init)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (erc-spelling-init)))))
+     (erc-spelling-init buffer)))
   ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (flyspell-mode 0))))))
+     (with-current-buffer buffer (flyspell-mode 0)))))
 
 (defcustom erc-spelling-dictionaries nil
   "An alist mapping buffer names to dictionaries.
@@ -60,20 +58,22 @@ name here."
                                (string :tag "Dictionary"))))
   :group 'erc-spelling)
 
-(defun erc-spelling-init ()
-  "Enable flyspell mode in an ERC buffer."
-  (let ((name (downcase (buffer-name)))
-        (dicts erc-spelling-dictionaries))
-    (when dicts
-      (while (and dicts
-                  (not (string= name (downcase (caar dicts)))))
-        (setq dicts (cdr dicts)))
-      (setq ispell-local-dictionary
-            (if dicts
-                (cadr (car dicts))
-              (erc-with-server-buffer ispell-local-dictionary)))))
-  (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
-  (flyspell-mode 1))
+(defun erc-spelling-init (buffer)
+  "Enable flyspell mode in an ERC buffer.
+The current buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (let ((name (downcase (buffer-name)))
+          (dicts erc-spelling-dictionaries))
+      (when dicts
+        (while (and dicts
+                    (not (string= name (downcase (caar dicts)))))
+          (setq dicts (cdr dicts)))
+        (setq ispell-local-dictionary
+              (if dicts
+                  (cadr (car dicts))
+                (erc-with-server-buffer ispell-local-dictionary)))))
+    (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
+    (flyspell-mode 1)))
 
 (defun erc-spelling-unhighlight-word (word)
   "Unhighlight the given WORD.
diff --git a/erc.el b/erc.el
index a7952f4..d1fe2d3 100644
--- a/erc.el
+++ b/erc.el
@@ -326,7 +326,7 @@ Each function should accept two arguments, NEW-NICK and 
OLD-NICK."
 
 (defcustom erc-connect-pre-hook '(erc-initialize-log-marker)
   "Hook called just before `erc' calls `erc-connect'.
-Functions are run in the buffer-to-be."
+Functions are passed a buffer as the first argument."
   :group 'erc-hooks
   :type 'hook)
 
@@ -1968,25 +1968,25 @@ Returns the buffer for the given server or channel."
     (setq erc-dbuf
          (when erc-log-p
            (get-buffer-create (concat "*ERC-DEBUG: " server "*"))))
-    (erc-determine-parameters server port nick full-name)
-
-    ;; Saving log file on exit
-    (run-hooks 'erc-connect-pre-hook)
-
-    (when connect
-      (erc-server-connect erc-session-server erc-session-port))
-    (erc-update-mode-line)
-    (set-marker erc-insert-marker (point))
+    ;; set up prompt
     (unless continued-session
       (goto-char (point-max))
       (insert "\n"))
-    (set-marker (process-mark erc-server-process) (point))
     (if continued-session
        (goto-char (point-max))
       (set-marker erc-insert-marker (point))
       (erc-display-prompt)
       (goto-char (point-max)))
 
+    (erc-determine-parameters server port nick full-name)
+
+    ;; Saving log file on exit
+    (run-hook-with-args 'erc-connect-pre-hook buffer)
+
+    (when connect
+      (erc-server-connect erc-session-server erc-session-port buffer))
+    (erc-update-mode-line)
+
     ;; Now display the buffer in a window as per user wishes.
     (unless (eq buffer old-buffer)
       (when erc-log-p
@@ -1997,11 +1997,13 @@ Returns the buffer for the given server or channel."
 
     buffer))
 
-(defun erc-initialize-log-marker ()
-  "Initialize the `erc-last-saved-position' marker to a sensible position."
+(defun erc-initialize-log-marker (buffer)
+  "Initialize the `erc-last-saved-position' marker to a sensible position.
+BUFFER is the current buffer."
+  (with-current-buffer buffer
     (setq erc-last-saved-position (make-marker))
     (move-marker erc-last-saved-position
-                (1- (marker-position erc-insert-marker))))
+                (1- (marker-position erc-insert-marker)))))
 
 ;; interactive startup
 
@@ -4074,24 +4076,29 @@ See also: `erc-echo-notice-in-user-buffers',
   "Run just after connection.
 
 Set user modes and run `erc-after-connect hook'."
-  (unless erc-server-connected ; only once per session
-    (let ((server (or erc-server-announced-name (erc-response.sender parsed)))
-         (nick (car (erc-response.command-args parsed ))))
-      (setq erc-server-connected t)
-      (erc-update-mode-line)
-      (erc-set-initial-user-mode nick)
-      (erc-server-setup-periodical-ping)
-      (run-hook-with-args 'erc-after-connect server nick))))
-
-(defun erc-set-initial-user-mode (nick)
-  "If `erc-user-mode' is non-nil for NICK, set the user modes."
-  (when erc-user-mode
-    (let ((mode (if (functionp erc-user-mode)
-                   (funcall erc-user-mode)
-                 erc-user-mode)))
-      (when (stringp mode)
-       (erc-log (format "changing mode for %s to %s" nick mode))
-       (erc-server-send (format "MODE %s %s" nick mode))))))
+  (with-current-buffer (process-buffer proc)
+    (unless erc-server-connected ; only once per session
+      (let ((server (or erc-server-announced-name
+                       (erc-response.sender parsed)))
+           (nick (car (erc-response.command-args parsed)))
+           (buffer (process-buffer proc)))
+       (setq erc-server-connected t)
+       (erc-update-mode-line)
+       (erc-set-initial-user-mode nick buffer)
+       (erc-server-setup-periodical-ping buffer)
+       (run-hook-with-args 'erc-after-connect server nick)))))
+
+(defun erc-set-initial-user-mode (nick buffer)
+  "If `erc-user-mode' is non-nil for NICK, set the user modes.
+The server buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (when erc-user-mode
+      (let ((mode (if (functionp erc-user-mode)
+                     (funcall erc-user-mode)
+                   erc-user-mode)))
+       (when (stringp mode)
+         (erc-log (format "changing mode for %s to %s" nick mode))
+         (erc-server-send (format "MODE %s %s" nick mode)))))))
 
 (defun erc-display-error-notice (parsed string)
   "Display STRING as an error notice.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]