Function: rcirc

rcirc is an autoloaded, interactive and byte-compiled function defined in rcirc.el.gz.

Signature

(rcirc ARG)

Documentation

Connect to all servers in rcirc-server-alist.

Do not connect to a server if it is already connected.

If ARG is non-nil, instead prompt for connection parameters.

Key Bindings

Aliases

irc

Source Code

;; Defined in /usr/src/emacs/lisp/net/rcirc.el.gz
;;;###autoload
(defun rcirc (arg)
  "Connect to all servers in `rcirc-server-alist'.

Do not connect to a server if it is already connected.

If ARG is non-nil, instead prompt for connection parameters."
  (interactive "P")
  (if arg
      (let* ((server (completing-read "IRC Server: "
                                      rcirc-server-alist
                                      nil nil
                                      (caar rcirc-server-alist)
                                      'rcirc-server-name-history))
             (server-plist (cdr (assoc-string server rcirc-server-alist)))
             (port (read-string "IRC Port: "
                                (number-to-string
                                 (or (plist-get server-plist :port)
                                     rcirc-default-port))
                                'rcirc-server-port-history))
             (nick (read-string "IRC Nick: "
                                (or (plist-get server-plist :nick)
                                    rcirc-default-nick)
                                'rcirc-nick-name-history))
             (user-name (read-string "IRC Username: "
                                     (or (plist-get server-plist :user-name)
                                         rcirc-default-user-name)
                                     'rcirc-user-name-history))
             (password (read-passwd "IRC Password: " nil
                                    (plist-get server-plist :password)))
             (channels (split-string
                        (read-string "IRC Channels: "
                                     (mapconcat 'identity
                                                (plist-get server-plist
                                                           :channels)
                                                " "))
                        "[, ]+" t))
             (encryption (rcirc-prompt-for-encryption server-plist))
             (process (rcirc-connect server port nick user-name
                                     rcirc-default-full-name
                                     channels password encryption)))
        (when rcirc-display-server-buffer
          (pop-to-buffer-same-window (process-buffer process))))
    ;; connect to servers in `rcirc-server-alist'
    (let (connected-servers)
      (dolist (c rcirc-server-alist)
        (let ((server (car c))
              (nick (or (plist-get (cdr c) :nick) rcirc-default-nick))
              (port (or (plist-get (cdr c) :port) rcirc-default-port))
              (user-name (or (plist-get (cdr c) :user-name)
                             rcirc-default-user-name))
              (full-name (or (plist-get (cdr c) :full-name)
                             rcirc-default-full-name))
              (channels (plist-get (cdr c) :channels))
              (password (plist-get (cdr c) :password))
              (encryption (plist-get (cdr c) :encryption))
              (server-alias (plist-get (cdr c) :server-alias))
              (client-cert (when (eq (rcirc-get-server-method (car c))
                                     'certfp)
                             (rcirc-get-server-cert (car c))))
              contact)
          (when-let (((not password))
                     (auth (auth-source-search :host server
                                               :user user-name
                                               :port port))
                     (pwd (auth-info-password (car auth))))
            (setq password pwd))
          (when server
            (let (connected)
              (dolist (p (rcirc-process-list))
                (when (string= (or server-alias server) (process-name p))
                  (setq connected p)))
              (if (not connected)
                  (condition-case nil
                      (let ((process (rcirc-connect server port nick user-name
                                                    full-name channels password encryption
                                                    server-alias client-cert)))
                        (when rcirc-display-server-buffer
                          (pop-to-buffer-same-window (process-buffer process))))
                    (quit (message "Quit connecting to %s"
                                   (or server-alias server))))
                (with-current-buffer (process-buffer connected)
                  (setq contact (process-contact
                                 (get-buffer-process (current-buffer)) :name))
                  (setq connected-servers
                        (cons (if (stringp contact)
                                  contact (or server-alias server))
                              connected-servers))))))))
      (when connected-servers
        (message "Already connected to %s"
                 (if (cdr connected-servers)
                     (concat (mapconcat 'identity (butlast connected-servers) ", ")
                             ", and "
                             (car (last connected-servers)))
                   (car connected-servers)))))))