2021-03-19 03:14:33 +00:00
|
|
|
;;; erc-join.el --- autojoin channels on connect and reconnects -*- lexical-binding: t; -*-
|
2006-01-29 13:08:58 +00:00
|
|
|
|
2023-01-01 10:31:12 +00:00
|
|
|
;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
|
2006-01-29 13:08:58 +00:00
|
|
|
|
|
|
|
;; Author: Alex Schroeder <alex@gnu.org>
|
2022-01-24 15:59:05 +00:00
|
|
|
;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
|
2021-02-10 19:58:16 +00:00
|
|
|
;; Keywords: comm, irc
|
Update ERC module URLs
* lisp/erc/erc-autoaway.el, lisp/erc/erc-button.el,
lisp/erc/erc-compat.el, lisp/erc/erc-fill.el, lisp/erc/erc-imenu.el,
lisp/erc/erc-join.el, lisp/erc/erc-lang.el, lisp/erc/erc-match.el,
lisp/erc/erc-pcomplete.el, lisp/erc/erc-ring.el,
lisp/erc/erc-spelling.el, lisp/erc/erc-stamp.el,
lisp/erc/erc-track.el: Update URL to friendlier form, over https.
* lisp/erc/erc-ibuffer.el: Remove URL to nonexistent page.
* lisp/erc/erc-list.el, lisp/erc/erc-log.el, lisp/erc/erc-notify.el,
lisp/erc/erc-replace.el, lisp/erc/erc-services.el,
lisp/erc/erc-sound.el, lisp/erc/erc-speedbar.el,
lisp/erc/erc-truncate.el: Add URL to corresponding EmacsWiki page.
2020-01-24 06:09:43 +00:00
|
|
|
;; URL: https://www.emacswiki.org/emacs/ErcAutoJoin
|
2006-01-29 13:08:58 +00:00
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
2008-05-06 03:36:21 +00:00
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2006-01-29 13:08:58 +00:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 03:36:21 +00:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
2006-01-29 13:08:58 +00:00
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2017-09-13 22:52:52 +00:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2006-01-29 13:08:58 +00:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;; This allows us to customize an `erc-autojoin-channels-alist'. As
|
|
|
|
;; we /JOIN and /PART channels, this alist is updated to reflect our
|
|
|
|
;; current setup, so that when we reconnect, we rejoin the same
|
|
|
|
;; channels. The alist can be customized, so that the customized
|
|
|
|
;; value will be used when we reconnect in our next Emacs session.
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'erc)
|
|
|
|
|
|
|
|
(defgroup erc-autojoin nil
|
|
|
|
"Enable autojoining."
|
|
|
|
:group 'erc)
|
|
|
|
|
Put most erc autoloads in a dedicated file erc-loaddefs.el
These are features that are only useful after erc.el is loaded.
* lisp/erc/erc.el (top-level): Load erc-loaddefs.
* lisp/erc/erc-autoaway.el, lisp/erc/erc-button.el:
* lisp/erc/erc-capab.el, lisp/erc/erc-compat.el:
* lisp/erc/erc-dcc.el, lisp/erc/erc-desktop-notifications.el:
* lisp/erc/erc-ezbounce.el, lisp/erc/erc-fill.el:
* lisp/erc/erc-identd.el, lisp/erc/erc-imenu.el:
* lisp/erc/erc-join.el, lisp/erc/erc-list.el, lisp/erc/erc-log.el:
* lisp/erc/erc-match.el, lisp/erc/erc-menu.el:
* lisp/erc/erc-netsplit.el, lisp/erc/erc-notify.el:
* lisp/erc/erc-page.el, lisp/erc/erc-pcomplete.el:
* lisp/erc/erc-replace.el, lisp/erc/erc-ring.el:
* lisp/erc/erc-services.el, lisp/erc/erc-sound.el:
* lisp/erc/erc-speedbar.el, lisp/erc/erc-spelling.el:
* lisp/erc/erc-stamp.el, lisp/erc/erc-track.el:
* lisp/erc/erc-truncate.el, lisp/erc/erc-xdcc.el:
Set generated-autoload-file to "erc-loaddefs.el".
2017-11-29 02:16:02 +00:00
|
|
|
;;;###autoload(autoload 'erc-autojoin-mode "erc-join" nil t)
|
2006-01-29 13:08:58 +00:00
|
|
|
(define-erc-module autojoin nil
|
|
|
|
"Makes ERC autojoin on connects and reconnects."
|
2021-03-19 03:14:33 +00:00
|
|
|
((add-hook 'erc-after-connect #'erc-autojoin-channels)
|
|
|
|
(add-hook 'erc-nickserv-identified-hook #'erc-autojoin-after-ident)
|
|
|
|
(add-hook 'erc-server-JOIN-functions #'erc-autojoin-add)
|
|
|
|
(add-hook 'erc-server-PART-functions #'erc-autojoin-remove))
|
|
|
|
((remove-hook 'erc-after-connect #'erc-autojoin-channels)
|
|
|
|
(remove-hook 'erc-nickserv-identified-hook #'erc-autojoin-after-ident)
|
|
|
|
(remove-hook 'erc-server-JOIN-functions #'erc-autojoin-add)
|
|
|
|
(remove-hook 'erc-server-PART-functions #'erc-autojoin-remove)))
|
2006-01-29 13:08:58 +00:00
|
|
|
|
|
|
|
(defcustom erc-autojoin-channels-alist nil
|
|
|
|
"Alist of channels to autojoin on IRC networks.
|
|
|
|
Every element in the alist has the form (SERVER . CHANNELS).
|
2021-09-16 13:48:28 +00:00
|
|
|
SERVER is a regexp matching the server, and channels is the list
|
|
|
|
of channels to join. SERVER can also be a symbol, in which case
|
2021-05-30 07:50:50 +00:00
|
|
|
it's matched against a non-nil `:id' passed to `erc' or `erc-tls'
|
|
|
|
when connecting or the value of the current `erc-network' instead of
|
2021-09-16 13:48:28 +00:00
|
|
|
`erc-server-announced-name' or `erc-session-server' (this can be
|
|
|
|
useful when connecting to an IRC proxy that relays several
|
|
|
|
networks under the same server).
|
2006-01-29 13:08:58 +00:00
|
|
|
|
2021-05-30 07:50:50 +00:00
|
|
|
Note that for historical reasons, this option is mutated at runtime,
|
|
|
|
which is regrettable but here to stay. Please double check the value
|
|
|
|
before saving it to a `custom-file'.
|
|
|
|
|
2012-04-10 04:43:35 +00:00
|
|
|
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
|
|
|
|
|
2006-01-29 13:08:58 +00:00
|
|
|
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
|
|
|
|
again when you get disconnected. When you restart Emacs, however,
|
|
|
|
those changes are lost, and the customization you saved the last
|
|
|
|
time is used again."
|
|
|
|
:type '(repeat (cons :tag "Server"
|
|
|
|
(regexp :tag "Name")
|
|
|
|
(repeat :tag "Channels"
|
|
|
|
(string :tag "Name")))))
|
|
|
|
|
2010-08-14 22:58:10 +00:00
|
|
|
(defcustom erc-autojoin-timing 'connect
|
|
|
|
"When ERC should attempt to autojoin a channel.
|
|
|
|
If the value is `connect', autojoin immediately on connecting.
|
|
|
|
If the value is `ident', autojoin after successful NickServ
|
|
|
|
identification, or after `erc-autojoin-delay' seconds.
|
|
|
|
Any other value means the same as `connect'."
|
2014-11-10 10:38:11 +00:00
|
|
|
:version "24.1"
|
2012-08-22 03:45:51 +00:00
|
|
|
:type '(choice (const :tag "On Connection" connect)
|
|
|
|
(const :tag "When Identified" ident)))
|
2010-08-14 22:58:10 +00:00
|
|
|
|
|
|
|
(defcustom erc-autojoin-delay 30
|
|
|
|
"Number of seconds to wait before attempting to autojoin channels.
|
|
|
|
This only takes effect if `erc-autojoin-timing' is `ident'.
|
|
|
|
If NickServ identification occurs before this delay expires, ERC
|
|
|
|
autojoins immediately at that time."
|
2014-11-10 10:38:11 +00:00
|
|
|
:version "24.1"
|
2010-08-14 22:58:10 +00:00
|
|
|
:type 'integer)
|
|
|
|
|
2006-01-29 13:08:58 +00:00
|
|
|
(defcustom erc-autojoin-domain-only t
|
|
|
|
"Truncate host name to the domain name when joining a server.
|
|
|
|
If non-nil, and a channel on the server a.b.c is joined, then
|
|
|
|
only b.c is used as the server for `erc-autojoin-channels-alist'.
|
|
|
|
This is important for networks that redirect you to other
|
|
|
|
servers, presumably in the same domain."
|
|
|
|
:type 'boolean)
|
|
|
|
|
Prefer defvar-local in erc
* lisp/erc/erc-backend.el (erc-server-current-nick)
(erc-server-process, erc-session-server, erc-session-connector)
(erc-session-port, erc-server-announced-name)
(erc-server-version, erc-server-parameters)
(erc-server-connected, erc-server-reconnect-count)
(erc-server-quitting, erc-server-reconnecting)
(erc-server-timed-out, erc-server-banned)
(erc-server-error-occurred, erc-server-lines-sent)
(erc-server-last-peers, erc-server-last-sent-time)
(erc-server-last-ping-time, erc-server-last-received-time)
(erc-server-lag, erc-server-filter-data, erc-server-duplicates)
(erc-server-processing-p, erc-server-flood-last-message)
(erc-server-flood-queue, erc-server-flood-timer)
(erc-server-ping-handler):
* lisp/erc/erc-capab.el (erc-capab-identify-activated)
(erc-capab-identify-sent):
* lisp/erc/erc-dcc.el (erc-dcc-byte-count, erc-dcc-entry-data)
(erc-dcc-file-name):
* lisp/erc/erc-ezbounce.el (erc-ezb-session-list):
* lisp/erc/erc-join.el (erc--autojoin-timer):
* lisp/erc/erc-netsplit.el (erc-netsplit-list):
* lisp/erc/erc-networks.el (erc-network):
* lisp/erc/erc-notify.el (erc-last-ison, erc-last-ison-time):
* lisp/erc/erc-ring.el (erc-input-ring, erc-input-ring-index):
* lisp/erc/erc-stamp.el (erc-timestamp-last-inserted)
(erc-timestamp-last-inserted-left)
(erc-timestamp-last-inserted-right):
* lisp/erc/erc.el (erc-session-password, erc-channel-users)
(erc-server-users, erc-channel-topic, erc-channel-modes)
(erc-insert-marker, erc-input-marker, erc-last-saved-position)
(erc-dbuf, erc-active-buffer, erc-default-recipients)
(erc-session-user-full-name, erc-channel-user-limit)
(erc-channel-key, erc-invitation, erc-channel-list)
(erc-bad-nick, erc-logged-in, erc-default-nicks)
(erc-nick-change-attempt-count, erc-send-input-line-function)
(erc-channel-new-member-names, erc-channel-banlist)
(erc-current-message-catalog): Prefer defvar-local.
2021-01-31 02:19:41 +00:00
|
|
|
(defvar-local erc--autojoin-timer nil)
|
2010-08-14 22:58:10 +00:00
|
|
|
|
|
|
|
(defun erc-autojoin-channels-delayed (server nick buffer)
|
|
|
|
"Attempt to autojoin channels.
|
|
|
|
This is called from a timer set up by `erc-autojoin-channels'."
|
|
|
|
(if erc--autojoin-timer
|
|
|
|
(setq erc--autojoin-timer
|
2020-08-02 05:55:02 +00:00
|
|
|
(cancel-timer erc--autojoin-timer)))
|
2010-08-14 22:58:10 +00:00
|
|
|
(with-current-buffer buffer
|
|
|
|
;; Don't kick of another delayed autojoin or try to wait for
|
|
|
|
;; another ident response:
|
|
|
|
(let ((erc-autojoin-delay -1)
|
|
|
|
(erc-autojoin-timing 'connect))
|
|
|
|
(erc-log "Delayed autojoin started (no ident success detected yet)")
|
|
|
|
(erc-autojoin-channels server nick))))
|
|
|
|
|
2021-09-16 13:48:28 +00:00
|
|
|
(defun erc-autojoin-server-match (candidate)
|
2021-05-30 07:50:50 +00:00
|
|
|
"Match the current network ID or server against CANDIDATE.
|
|
|
|
CANDIDATE is a key from `erc-autojoin-channels-alist'. Return the
|
|
|
|
matching entity, either a string or a non-nil symbol (in the case of a
|
|
|
|
network or a network ID). Return nil on failure."
|
|
|
|
(if (symbolp candidate)
|
|
|
|
(eq (or (erc-networks--id-given erc-networks--id) (erc-network))
|
|
|
|
candidate)
|
|
|
|
(when (stringp candidate)
|
|
|
|
(string-match-p candidate (or erc-server-announced-name
|
|
|
|
erc-session-server)))))
|
|
|
|
|
|
|
|
(defun erc-autojoin--join ()
|
|
|
|
;; This is called in the server buffer
|
|
|
|
(pcase-dolist (`(,name . ,channels) erc-autojoin-channels-alist)
|
|
|
|
(when-let ((match (erc-autojoin-server-match name)))
|
|
|
|
(dolist (chan channels)
|
|
|
|
(let ((buf (erc-get-buffer chan erc-server-process)))
|
|
|
|
(unless (and buf (with-current-buffer buf
|
|
|
|
(erc--current-buffer-joined-p)))
|
Standardize auth-source queries in ERC
* lisp/erc/erc.el (erc-password): Deprecate variable only used by
`erc-select-read-args'. Server passwords are primarily used as
surrogates for other forms of authentication. Such use is common but
nonstandard and often discouraged in favor of the de facto standard,
SASL. Folks in the habit of invoking `erc(-tls)' interactively should
be encouraged to use auth-source instead.
(erc-select-read-args): Before this change, `erc-select-read-args'
offered to use the value of a non-nil `erc-password' as the :password
argument for `erc' and `erc-tls', referring to it as the "default"
password. And when `erc-prompt-for-password' was nil and
`erc-password' wasn't, the latter was passed along unconditionally.
This only further complicated an already confusing situation for new
users, who in most cases shouldn't be worried about sending a PASS
command at all. Until SASL arrives, they should provide server
passwords manually or learn to use auth-source.
(erc-auth-source-server-function, erc-auth-source-join-function): New
user options for retrieving a password externally, ostensibly by
calling `auth-source-search'.
(erc--auth-source-determine-params-defaults): New helper for
`erc--auth-source-search' with potential for exporting publicly in the
future. Favors :host and :port fields above others. Prioritizes
network IDs over announced servers and dialed endpoints.
(erc--auth-source-determine-params-merge): Add new function for
merging contextual and default parameters. This is another contender
for possible exporting.
(erc--auth-source-search): New function for consulting auth-source and
sorting the result as filtered and prioritized by the previously
mentioned helpers.
(erc-auth-source-search): New function to serve as default
value for auth-source query-function options.
(erc-server-join-channel): Use user option for consulting auth-source
facility. Also accept nil for first argument (instead of server).
(erc-cmd-JOIN): Use above-mentioned facilities when joining new
channel. Omit server when calling `erc-server-join-channel'. Don't
filter target buffers twice. Don't call `switch-to-buffer', which
would create phantom buffers with names like target/server that were
never used. IOW, only switch to existing target buffers.
(erc--compute-server-password): Add new helper function for
determining password.
(erc-open, erc-determine-parameters): Move password figuring from the
first to the latter.
* lisp/erc/erc-services.el
(erc-auth-source-services-function): Add new option for consulting
auth-source in a NickServ context.
(erc-nickserv-get-password): Pass network-context ID, when looking up
password in `erc-nickserv-passwords' and when formatting prompt for
user input.
(erc-nickserv-passwords): Add comment to custom option definition type
tag.
* test/lisp/erc/erc-services-tests.el: Add new test file for above
changes. For now, stash auth-source-related tests here until a
suitable home can be found.
* lisp/erc/erc-join.el (erc-autojoin--join): Don't pass session-like
entity from `erc-autojoin-channels-alist' match to
`erc-server-join-channel'. Allow that function to decide for itself
which host to look up if necessary.
* test/lisp/erc/resources/base/auth-source/foonet.eld: New file.
* test/lisp/erc/resources/base/auth-source/nopass.eld: New file.
* test/lisp/erc/resources/erc-scenarios-common.el: New file.
* test/lisp/erc/resources/services/auth-source/libera.eld: New file.
* test/lisp/erc/erc-scenarios-auth-source.el: New file.
* test/lisp/erc/erc-scenarios-base-reuse-buffers.el: New file.
* test/lisp/erc/erc-scenarios-join-auth-source.el: New file.
* test/lisp/erc/resources/base/reuse-buffers/channel/barnet.eld: New file.
* test/lisp/erc/resources/base/reuse-buffers/channel/foonet.eld: New file.
* test/lisp/erc/resources/join/auth-source/foonet.eld: New file.
(Bug#48598)
2021-08-16 11:38:18 +00:00
|
|
|
(erc-server-join-channel nil chan)))))))
|
2021-09-16 13:48:28 +00:00
|
|
|
|
2021-03-19 03:14:33 +00:00
|
|
|
(defun erc-autojoin-after-ident (_network _nick)
|
2010-08-14 22:58:10 +00:00
|
|
|
"Autojoin channels in `erc-autojoin-channels-alist'.
|
|
|
|
This function is run from `erc-nickserv-identified-hook'."
|
|
|
|
(when (eq erc-autojoin-timing 'ident)
|
2021-05-30 07:50:50 +00:00
|
|
|
(erc-autojoin--join)))
|
2010-08-14 22:58:10 +00:00
|
|
|
|
2006-01-29 13:08:58 +00:00
|
|
|
(defun erc-autojoin-channels (server nick)
|
|
|
|
"Autojoin channels in `erc-autojoin-channels-alist'."
|
2010-08-14 22:58:10 +00:00
|
|
|
(if (eq erc-autojoin-timing 'ident)
|
|
|
|
;; Prepare the delayed autojoin timer, in case ident doesn't
|
|
|
|
;; happen within the allotted time limit:
|
|
|
|
(when (> erc-autojoin-delay 0)
|
|
|
|
(setq erc--autojoin-timer
|
|
|
|
(run-with-timer erc-autojoin-delay nil
|
2021-03-19 03:14:33 +00:00
|
|
|
#'erc-autojoin-channels-delayed
|
2010-08-14 22:58:10 +00:00
|
|
|
server nick (current-buffer))))
|
|
|
|
;; `erc-autojoin-timing' is `connect':
|
2021-05-30 07:50:50 +00:00
|
|
|
(erc-autojoin--join)))
|
2006-01-29 13:08:58 +00:00
|
|
|
|
2021-09-16 13:48:28 +00:00
|
|
|
(defun erc-autojoin-current-server ()
|
|
|
|
"Compute the current server for lookup in `erc-autojoin-channels-alist'.
|
|
|
|
Respects `erc-autojoin-domain-only'."
|
|
|
|
(let ((server (or erc-server-announced-name erc-session-server)))
|
|
|
|
(if (and erc-autojoin-domain-only
|
|
|
|
(string-match "[^.\n]+\\.\\([^.\n]+\\.[^.\n]+\\)$" server))
|
|
|
|
(match-string 1 server)
|
|
|
|
server)))
|
|
|
|
|
2021-05-30 07:50:50 +00:00
|
|
|
(defun erc-autojoin--mutate (proc parsed remove)
|
|
|
|
(when-let* ((nick (car (erc-parse-user (erc-response.sender parsed))))
|
|
|
|
((erc-current-nick-p nick))
|
|
|
|
(chnl (car (erc-response.command-args parsed)))
|
|
|
|
(elem (or (and (erc--valid-local-channel-p chnl)
|
|
|
|
(regexp-quote erc-server-announced-name))
|
|
|
|
(erc-networks--id-given erc-networks--id)
|
|
|
|
(erc-network)
|
|
|
|
(with-current-buffer (process-buffer proc)
|
|
|
|
(erc-autojoin-current-server))))
|
|
|
|
(test (if (symbolp elem) #'eq #'equal)))
|
|
|
|
(if remove
|
|
|
|
(let ((cs (delete chnl (assoc-default elem erc-autojoin-channels-alist
|
|
|
|
test))))
|
|
|
|
(setf (alist-get elem erc-autojoin-channels-alist nil (null cs) test)
|
|
|
|
cs))
|
|
|
|
(cl-pushnew chnl
|
|
|
|
(alist-get elem erc-autojoin-channels-alist nil nil test)
|
|
|
|
:test #'equal))))
|
|
|
|
|
2006-01-29 13:08:58 +00:00
|
|
|
(defun erc-autojoin-add (proc parsed)
|
|
|
|
"Add the channel being joined to `erc-autojoin-channels-alist'."
|
2021-05-30 07:50:50 +00:00
|
|
|
(erc-autojoin--mutate proc parsed nil)
|
2006-01-29 13:08:58 +00:00
|
|
|
;; We must return nil to tell ERC to continue running the other
|
|
|
|
;; functions.
|
|
|
|
nil)
|
|
|
|
|
|
|
|
;; (erc-parse-user "kensanata!~user@dclient217-162-233-228.hispeed.ch")
|
|
|
|
|
|
|
|
(defun erc-autojoin-remove (proc parsed)
|
|
|
|
"Remove the channel being left from `erc-autojoin-channels-alist'."
|
2021-05-30 07:50:50 +00:00
|
|
|
(erc-autojoin--mutate proc parsed 'remove)
|
2006-01-29 13:08:58 +00:00
|
|
|
;; We must return nil to tell ERC to continue running the other
|
|
|
|
;; functions.
|
|
|
|
nil)
|
|
|
|
|
2006-02-08 02:41:23 +00:00
|
|
|
(provide 'erc-join)
|
2006-01-29 13:08:58 +00:00
|
|
|
|
2006-02-08 02:41:23 +00:00
|
|
|
;;; erc-join.el ends here
|
2006-01-29 13:08:58 +00:00
|
|
|
;;
|
|
|
|
;; Local Variables:
|
Put most erc autoloads in a dedicated file erc-loaddefs.el
These are features that are only useful after erc.el is loaded.
* lisp/erc/erc.el (top-level): Load erc-loaddefs.
* lisp/erc/erc-autoaway.el, lisp/erc/erc-button.el:
* lisp/erc/erc-capab.el, lisp/erc/erc-compat.el:
* lisp/erc/erc-dcc.el, lisp/erc/erc-desktop-notifications.el:
* lisp/erc/erc-ezbounce.el, lisp/erc/erc-fill.el:
* lisp/erc/erc-identd.el, lisp/erc/erc-imenu.el:
* lisp/erc/erc-join.el, lisp/erc/erc-list.el, lisp/erc/erc-log.el:
* lisp/erc/erc-match.el, lisp/erc/erc-menu.el:
* lisp/erc/erc-netsplit.el, lisp/erc/erc-notify.el:
* lisp/erc/erc-page.el, lisp/erc/erc-pcomplete.el:
* lisp/erc/erc-replace.el, lisp/erc/erc-ring.el:
* lisp/erc/erc-services.el, lisp/erc/erc-sound.el:
* lisp/erc/erc-speedbar.el, lisp/erc/erc-spelling.el:
* lisp/erc/erc-stamp.el, lisp/erc/erc-track.el:
* lisp/erc/erc-truncate.el, lisp/erc/erc-xdcc.el:
Set generated-autoload-file to "erc-loaddefs.el".
2017-11-29 02:16:02 +00:00
|
|
|
;; generated-autoload-file: "erc-loaddefs.el"
|
2006-01-29 13:08:58 +00:00
|
|
|
;; End:
|