(require 'erc) (require 'erc-join) (require 'erc-match) (require 'erc-track) (require 'erc-pcomplete) (require 'erc-fill) (require 'erc-netsplit) (require 'erc-dcc) (require 'erc-log) (require 'erc-ring) ;; User information (setq erc-user-full-name "Arnaud Fontaine" erc-email-userid "arnaud@andesi.0rg") ;; Remap next/previous history lines entered (define-key erc-mode-map [(control p)] 'erc-previous-command) (define-key erc-mode-map [(control n)] 'erc-next-command) ;; Highlight when my nick is used (setq erc-keywords '("arnau" "arnal")) ;; Beep when highlighted (add-hook 'erc-text-matched-hook 'erc-beep-on-match) (setq erc-beep-match-types '(current-nick keyword)) ;; Make notice messages more obvious (setq erc-echo-notices-in-minibuffer-flag t) ;; Avoid annoying server messages (defun reset-erc-track-mode () (interactive) (setq erc-modified-channels-alist nil) (erc-modified-channels-update)) ;; Encoding used. The following document may be useful for a ;; per-channel character encoding: ;; http://www.emacswiki.org/emacs/ErcConfiguration#toc10 (setq erc-default-coding-system (quote (utf-8 . undecided)) erc-server-coding-system (quote (utf-8 . undecided))) ;; Don't care about the following notices (setq erc-hide-list '("MODE")) ;; Don't log the following messages (setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT")) ;; Go to working buffer when no more active IRC buffers (setq erc-track-switch-from-erc t) ;; Keep the prompt line at the bottom of the window (setq erc-input-line-position -2) ;; Here is a slightly more complex erc-after-connect hook: (add-hook 'erc-after-connect '(lambda (SERVER NICK) (cond ((string-match "freenode\\.net" SERVER) (erc-message "PRIVMSG" "NickServ identify foo")) ((string-match "irc\\.duckcorp\\.org" SERVER) (erc-message "USERSERV" "login arnau foo")) ((string-match "oftc\\.net" SERVER) (erc-message "PRIVMSG" "NickServ identify foo")) ((= 6668 erc-session-port) (erc-message "PRIVMSG" "&bitlbee identify foo"))))) ;; Autojoin the following channels (setq erc-autojoin-channels-alist '(("freenode.net" "#hurdfr" "#emacs" "#gnus" "#andesi" "#guilde" "#lavily" "#xcb") ("irc.duckcorp.org" "#milkypond" "#news" "#duckcorp") ("oftc.net" "#debian-python" "#debian-devel" "#debian-devel-fr" "#bitlbee" "#awesome" "#debian-uk"))) ;; Make the buffer read-only (add-hook 'erc-insert-post-hook 'erc-make-read-only 'erc-send-post-hook 'erc-make-read-only) ;; Auto-completion (add-hook 'erc-mode-hook '(lambda () (pcomplete-erc-setup) (erc-completion-mode 1))) ;; Set up timestamp on each line on the left (setq erc-timestamp-only-if-changed-flag nil erc-timestamp-format "[%R-%m/%d] " erc-insert-timestamp-function 'erc-insert-timestamp-left) ;; Split long lines (setq erc-fill-static-center 20 erc-fill-prefix " ") (add-hook 'window-configuration-change-hook '(lambda () (setq erc-fill-column (- (window-width) 2)))) ;; Disable flood protection (setq erc-flood-protect nil) ;; Disable auto-fill-mode for erc (add-hook 'erc-mode-hook (lambda () (auto-fill-mode 0))) ;; Disable text "buttonization" which may be slow and is useless in ;; text mode (erc-button-mode nil) ;; Logging (setq erc-log-insert-log-on-open nil erc-log-channels t erc-log-channels-directory "~/.erclogs/" erc-save-buffer-on-part t erc-hide-timestamps nil) ;; When exiting emacs, save all logs without confirmation (defun erc-save-buffers-in-logs () (interactive) (mapc (lambda(buf) (save-excursion (set-buffer buf) (erc-save-buffer-in-logs))) (erc-buffer-filter (lambda() t)))) (defadvice save-buffers-kill-emacs (before save-logs-before-save-buffers-kill-emacs (&rest args) activate) 'erc-save-buffers-in-logs) (defadvice save-some-buffers (before save-logs-before-save-some-buffers (&rest args) activate) 'erc-save-buffers-in-logs) ;; Truncate buffers so they don't hog core (defvar erc-insert-post-hook) (add-hook 'erc-insert-post-hook 'erc-truncate-buffer) (setq erc-truncate-buffer-on-save t) ;;; Finally, connect to the networks. (defun irc-maybe () (interactive) (when (y-or-n-p "IRC? ") (erc :server "irc.freenode.net" :port 6667 :nick "arnal" :full-name "Arnaud Fontaine") (erc :server "orfeo.duckcorp.org" :port 6667 :nick "arnau" :full-name "Arnaud Fontaine") (erc :server "irc.oftc.net" :port 6667 :nick "arnau" :full-name "Arnaud Fontaine") (erc :server "bitlbee.duckcorp.org" :port 6668 :nick "arnau" :full-name "Arnaud Fontaine"))) ;; Prompt (setq erc-prompt (lambda () (if (and (boundp 'erc-default-recipients) (erc-default-target)) (erc-propertize (concat (erc-default-target) ">") 'read-only t 'rear-nonsticky t 'front-nonsticky t) (erc-propertize (concat ">>") 'read-only t 'rear-nonsticky t 'front-nonsticky t)))) ;;; Make dcc quiet (setq erc-dcc-verbose nil) ;; No need to have the date since I'm away, stick to the minimum (setq erc-mode-line-away-status-format "(AWAY)") ;; Line number is useless (line-number-mode nil) ;; Automatically open queries (defun my-queries (server nick) (when (string-match "irc\\.duckcorp\\.org" server) (erc-cmd-QUERY "happypeng") (erc-cmd-QUERY "duck")) (when (string-match "bitlbee\\.duckcorp\\.org" server) (erc-cmd-QUERY "yam") (erc-cmd-QUERY "oxmoz")) (when (string-match "freenode\\.net" server) (erc-cmd-QUERY "ioguix") (erc-cmd-QUERY "manuel") (erc-cmd-QUERY "kilobug"))) (add-hook 'erc-after-connect 'my-queries)