]> git.eshelyaron.com Git - emacs.git/commitdiff
Make erc use auth-source to look up channel keys
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 10 Apr 2012 04:43:35 +0000 (06:43 +0200)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 10 Apr 2012 04:43:35 +0000 (06:43 +0200)
* lisp/erc/erc-join.el (erc-server-join-channel): New function to look up
the channel password via auth-source.
(erc-autojoin-channels): Use it.
(erc-autojoin-after-ident): Ditto.
(erc-autojoin-channels-alist): Mention auth-source.

etc/NEWS
lisp/erc/ChangeLog
lisp/erc/erc-join.el

index a1ef62c0bd63a6c1a2d8fbf66bc72360fb4b7f10..2331666ee71110b5fffb59ff2f670c110de3149a 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -39,6 +39,10 @@ been adding them there, put them somewhere else, eg site-lisp.
 * Editing Changes in Emacs 24.2
 \f
 * Changes in Specialized Modes and Packages in Emacs 24.2
+
+** erc will look up server/channel names via auth-source and use the
+   channel keys found, if any.
+
 \f
 * New Modes and Packages in Emacs 24.2
 \f
index 9f858ba96e5123fe59e6ce73febdb2db1b1a1316..649ab7f3fc2a0df951e619b3f43c197550cc9d39 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * erc-join.el (erc-server-join-channel): New function to look up
+       the channel password via auth-source.
+       (erc-autojoin-channels): Use it.
+       (erc-autojoin-after-ident): Ditto.
+       (erc-autojoin-channels-alist): Mention auth-source.
+
 2012-04-10  Deniz Dogan  <deniz@dogan.se>  (tiny change)
 
        * erc.el (erc-display-prompt): Adds the field text property to the
index da894ba5977ea9e61bf348cabeddd41823d8e76b..85d1edf6427806c49c14ed028b8bfdf34b159829 100644 (file)
@@ -32,6 +32,7 @@
 ;;; Code:
 
 (require 'erc)
+(require 'auth-source)
 (eval-when-compile (require 'cl))
 
 (defgroup erc-autojoin nil
@@ -56,6 +57,13 @@ Every element in the alist has the form (SERVER . CHANNELS).
 SERVER is a regexp matching the server, and channels is the
 list of channels to join.
 
+If the channel(s) require channel keys for joining, the passwords
+are found via auth-source.  For instance, if you use ~/.authinfo
+as your auth-source backend, then put something like the
+following in that file:
+
+machine irc.example.net login \"#fsf\" password sEcReT
+
 Customize this variable to set the value for your first connect.
 Once you are connected and join and part channels, this alist
 keeps track of what channels you are on, and will join them
@@ -131,7 +139,7 @@ This function is run from `erc-nickserv-identified-hook'."
        (when (string-match (car l) server)
          (dolist (chan (cdr l))
            (unless (erc-member-ignore-case chan joined)
-             (erc-server-send (concat "join " chan))))))))
+             (erc-server-join-channel server chan)))))))
   nil)
 
 (defun erc-autojoin-channels (server nick)
@@ -148,10 +156,25 @@ This function is run from `erc-nickserv-identified-hook'."
     (dolist (l erc-autojoin-channels-alist)
       (when (string-match (car l) server)
        (dolist (chan (cdr l))
-         (erc-server-send (concat "join " chan))))))
+         (erc-server-join-channel server chan)))))
   ;; Return nil to avoid stomping on any other hook funcs.
   nil)
 
+(defun erc-server-join-channel (server channel)
+  (let* ((secret (plist-get (nth 0 (auth-source-search
+                                   :max 1
+                                   :host server
+                                   :port "irc"
+                                   :user channel))
+                           :secret))
+        (password (if (functionp secret)
+                      (funcall secret)
+                    secret)))
+    (erc-server-send (concat "join " channel
+                            (if password
+                                (concat " " password)
+                              "")))))
+
 (defun erc-autojoin-add (proc parsed)
   "Add the channel being joined to `erc-autojoin-channels-alist'."
   (let* ((chnl (erc-response.contents parsed))