aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen <[email protected]>2012-04-10 06:43:35 +0200
committerLars Magne Ingebrigtsen <[email protected]>2012-04-10 06:43:35 +0200
commitb245988452013d8cf83f0d45eb10ff6265f21db7 (patch)
treeecf27132f34dd6e83c7cef2d73115395f9589f58
parentec3e5f739a282667021905a3f62effcc8b0d6d80 (diff)
Make erc use auth-source to look up channel keys
* 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.
-rw-r--r--etc/NEWS4
-rw-r--r--lisp/erc/ChangeLog8
-rw-r--r--lisp/erc/erc-join.el27
3 files changed, 37 insertions, 2 deletions
diff --git a/etc/NEWS b/etc/NEWS
index a1ef62c0bd..2331666ee7 100644
--- 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
* 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.
+
* New Modes and Packages in Emacs 24.2
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 9f858ba96e..649ab7f3fc 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,11 @@
+2012-04-10 Lars Magne Ingebrigtsen <[email protected]>
+
+ * 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 <[email protected]> (tiny change)
* erc.el (erc-display-prompt): Adds the field text property to the
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index da894ba597..85d1edf642 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -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))