Function: rcirc-connect

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

Signature

(rcirc-connect SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION SERVER-ALIAS CERTFP)

Documentation

Connect to SERVER.

The arguments PORT, NICK, USER-NAME, FULL-NAME, PASSWORD, ENCRYPTION, CERTFP, SERVER-ALIAS are interpreted as in rcirc-server-alist. STARTUP-CHANNELS is a list of channels that are joined after authentication.

Source Code

;; Defined in /usr/src/emacs/lisp/net/rcirc.el.gz
;;;###autoload
(defun rcirc-connect (server &optional port nick user-name
                             full-name startup-channels password encryption
                             server-alias certfp)
  "Connect to SERVER.
The arguments PORT, NICK, USER-NAME, FULL-NAME, PASSWORD,
ENCRYPTION, CERTFP, SERVER-ALIAS are interpreted as in
`rcirc-server-alist'.  STARTUP-CHANNELS is a list of channels
that are joined after authentication."
  (save-excursion
    (message "Connecting to %s..." (or server-alias server))
    (let* ((inhibit-eol-conversion)
           (port-number (if port
                            (if (stringp port)
                                (string-to-number port)
                              port)
                          rcirc-default-port))
           (nick (or nick rcirc-default-nick))
           (user-name (or user-name rcirc-default-user-name))
           (full-name (or full-name rcirc-default-full-name))
           (startup-channels startup-channels)

           process)

      ;; Ensure any previous process is killed
      (when-let* ((old-process (get-process (or server-alias server))))
        (set-process-sentinel old-process #'ignore)
        (delete-process process))

      ;; Set up process
      (setq process (open-network-stream
                     (or server-alias server) nil server port-number
                     :type (or encryption 'plain)
                     :client-certificate certfp
                     :nowait t))
      (set-process-coding-system process 'raw-text 'raw-text)
      (with-current-buffer (get-buffer-create (rcirc-generate-new-buffer-name process nil))
        (set-process-buffer process (current-buffer))
        (unless (eq major-mode 'rcirc-mode)
          (rcirc-mode process nil))
        (set-process-sentinel process #'rcirc-sentinel)
        (set-process-filter process #'rcirc-filter)

        (setq rcirc-connection-info
              (list server port nick user-name full-name startup-channels
                    password encryption server-alias))
        (setq rcirc-process process)
        (setq rcirc-server server)
        (setq rcirc-server-name (or server-alias server)) ; Update when we get 001 response.
        (setq rcirc-nick-table (make-hash-table :test 'equal))
        (setq rcirc-nick nick)
        (setq rcirc-startup-channels startup-channels)
        (setq rcirc-last-connect-time (current-time))
        (setq rcirc-last-server-message-time rcirc-last-connect-time)

        ;; Check if the immediate process state
        (sit-for .1)
        (cond
         ((eq (process-status process) 'failed)
          (setq mode-line-process ":disconnected")
          (setq rcirc-connecting nil))
         ((eq (process-status process) 'connect)
          (setq mode-line-process ":connecting")
          (setq rcirc-connecting t)))

        (add-hook 'auto-save-hook #'rcirc-log-write)

        ;; return process object
        process))))