Function: org-irc-visit-erc

org-irc-visit-erc is a byte-compiled function defined in ol-irc.el.gz.

Signature

(org-irc-visit-erc LINK)

Documentation

Visit an ERC buffer based on criteria found in LINK.

Source Code

;; Defined in /usr/src/emacs/lisp/org/ol-irc.el.gz
(defun org-irc-visit-erc (link)
  "Visit an ERC buffer based on criteria found in LINK."
  (require 'erc)
  (require 'erc-log)
  (let* ((server (car (car link)))
	 (port (let ((p (cadr (pop link))))
		 (if p (string-to-number p) erc-default-port)))
	 (server-buffer)
	 (buffer-list
	  (erc-buffer-filter
	   (lambda nil
	     (let ((tmp-server-buf (erc-server-buffer)))
	       (and tmp-server-buf
		    (with-current-buffer tmp-server-buf
		      (and
		       (eq (org-irc-get-current-erc-port) port)
		       (string= erc-session-server server)
		       (setq server-buffer tmp-server-buf)))))))))
    (if buffer-list
	(let ((chan-name (pop link)))
	  ;; if we got a channel name then switch to it or join it
	  (if chan-name
	      (let ((chan-buf (catch 'found
				(dolist (x buffer-list)
				  (if (string= (buffer-name x) chan-name)
				      (throw 'found x))))))
		(if chan-buf
		    (progn
		      (pop-to-buffer-same-window chan-buf)
		      ;; if we got a nick, and they're in the chan,
		      ;; then start a chat with them
		      (let ((nick (pop link)))
			(when nick
			  (if (member nick (erc-get-server-nickname-list))
			      (progn
				(goto-char (point-max))
				(insert (concat nick ": ")))
			    (error "%s not found in %s" nick chan-name)))))
		  (progn
		    (pop-to-buffer-same-window server-buffer)
		    (erc-cmd-JOIN chan-name))))
	    (pop-to-buffer-same-window server-buffer)))
      ;; no server match, make new connection
      (erc-select :server server :port port))))