;; -*- emacs-lisp -*- ;; erc baloney ;;(add-to-list 'load-path (concat (getenv "lispdir") "/erc")) (load-file (expand-file-name "erc/erc.el" lispdir)) ;;; requiries (require 'emeteo) (require 'erc) (require 'erc-autojoin) ;(require 'erc-autoaway) (require 'erc-backend) (require 'erc-bbdb) (require 'erc-button) (require 'erc-capab) (require 'erc-compat) (require 'erc-dcc) (require 'erc-fill) (require 'erc-match) (require 'erc-ibuffer) (require 'erc-imenu) (require 'erc-lang) (require 'erc-list) (require 'erc-log) ;;;(require 'erc-members) (require 'erc-menu) (require 'erc-networks) (require 'erc-netsplit) ;;(require 'erc-nicklist) (require 'erc-notify) (require 'erc-page) (require 'erc-pcomplete) (require 'erc-replace) (require 'erc-ring) ;(require 'erc-robot) ;(require 'erc-speak) (require 'erc-services) (require 'erc-show) (require 'erc-sound) (require 'erc-stamp) (require 'erc-track) (require 'erc-truncate) (require 'erc-xdcc) ;;(require 'emeteo) (when running-sxemacs (require 'utf) (require 'unicode) (require 'unidata) (require 'mule-uni) ;;(require 'un-define) ) (load-file (expand-file-name "erc/erc-backend.el" lispdir)) ;; some plugs (erc-autojoin-disable) (erc-button-enable) (erc-capab-identify-enable) (erc-match-enable) (erc-ring-enable) (erc-timestamp-mode 1) (erc-stamp-enable) (erc-track-enable) (erc-truncate-enable) (erc-bbdb-enable) (erc-netsplit-enable) (erc-nickserv-mode 1) (erc-replace-enable) (erc-pcomplete-enable) (erc-log-enable) (erc-notify-enable) ;;(erc-smiley-disable) (erc-sound-enable) ;;; some settings (setq erc-server "irc.freenode.net" erc-port 6667 erc-nick "hroptatyr" erc-away-nickname nil ;;"hroptatyr" erc-user-full-name "Sebastian Freundt" erc-email-userid "asathor") (setq erc-log-channels t erc-log-channels-directory "~/.erc" erc-log-insert-log-on-open nil erc-max-buffer-size 10000 erc-log-file-coding-system 'iso-2022-8 erc-default-coding-system '(iso-2022-8 . undecided) erc-encoding-coding-alist '(("#emacs" . undecided) ("#xemacs" . undecided) ("#sxemacs" . undecided) ("myrkraverk_jab" . undecided)) ;; utf-8 erc-mode-line-format "%a %t %m" erc-log-p nil erc-paranoid t erc-disable-ctcp-replies nil erc-verbose-server-ping t erc-save-buffer-on-part t erc-page-mode t erc-auto-query t erc-auto-reconnect nil ;;t erc-truncate-buffer-on-save t erc-bbdb-popup-type nil) (setq erc-timestamp-only-if-changed-flag nil erc-timestamp-format "%m%d.%T " erc-insert-timestamp-function 'erc-insert-timestamp-left) ;;filling (setq erc-fill-column 78 erc-filling t erc-fill-prefix " ") (setq erc-complete-functions '(erc-button-next erc-pcomplete)) ;; highlighting (setq erc-pal-highlight-type 'all ;;erc-highlight-strings '() erc-keywords '("\\bmtorus") erc-current-nick-highlight-type 'all) ;; score up (setq erc-pals '("hroptatyr" ;;"freundt" "asathor" "Kerstin" "\\bf11\\b" ;;"myrk.+" )) ;; score down (setq erc-fools '()) (setq erc-ignore-list '()) (setq erc-ignore-reply-list '()) (setq erc-dangerous-hosts '("silica\\.math\\.tu-berlin\\.de")) ;;;;;(remove-hook 'erc-text-matched-hook 'erc-hide-fools) ;; notification ;; (setq erc-notify-list '("junkie4life" "j4l")) (setq erc-warn-about-blank-lines nil) ;;(add-hook 'erc-echo-notice-always-hook 'erc-echo-notice-in-default-buffer) ;;(add-hook 'erc-echo-notice-always-hook 'erc-echo-notice-in-user-buffers) ;;(add-hook 'erc-echo-notice-always-hook 'erc-echo-notice-in-minibuffer) ;;(add-hook 'erc-echo-notice-always-hook 'erc-echo-notice-in-active-buffer) ;; erc-replace ;) ;(setq erc-replace-alist '(("" . ""))) ;; emoticons ;;(load-file (expand-file-name "~/.xemacs/.smileys")) ;; emotisounds (setq erc-sound-path (list (expand-file-name "sounds-wav" pkgdir))) ;;nickserv (add-to-list 'erc-nickserv-alist '(Rusnet "NickServ!Service@RusNet" "/NickServ\\\s-IDENTIFY\\s-Password" "NicksServ!Service@RusNet" "IDENTIFY" nil)) ;; (add-to-list 'erc-nickserv-alist ;; '(quakenet ;; "Q!TheQBot@CServe.quakenet.org" ;; "/msg\\s-Q@CServe@quakenet.org\\s-AUTH\\s-hroptatyr\\s-password" ;; "Q@CServe.quakenet.org" ;; "AUTH" ;; t)) ;; (add-to-list 'erc-nickserv-alist ;; '(eunet ;; "NickServ!services@euirc.net" ;; "/msg\\s-NickServ\\s-IDENTIFY\\s-password" ;; "NickServ@services.euirc.net" ;; "IDENTIFY" ;; nil ;; ) t) (add-to-list 'erc-nickserv-alist '(undernet "X@channels.undernet.org" "UnderNet\\.org" "X@channels.undernet.org" "LOGIN" nil)) ;;(setq erc-nickserv-alist (remassoc 'undernet erc-nickserv-alist)) (setq erc-prompt-for-nickserv-password nil erc-nickserv-passwords (when (featurep 'certs) (certs-storage-restore) `((freenode (("hroptatyr" . ,(certs-unveil-secret-by-topic-path ["irc" "freenode" "hroptatyr"])) ("asathor" . ,(certs-unveil-secret-by-topic-path ["irc" "freenode" "asathor"])))) ;;(eunet (("hroptatyr" . ,(certs-unveil-secret-by-topic-path ["irc" "euirc" "hroptatyr"])))) (quakenet (("hroptatyr" . ,(certs-unveil-secret-by-topic-path ["irc" "quakenet" "hroptatyr"]))))))) ;;; botting ;;;; moved to .bot ;;;; connecting (defun myerc-join-channel (channel) (sit-for 0.5) (erc-join-channel channel)) (defun myerc-join-channels (&rest channels) (mapc 'myerc-join-channel channels)) (defun myerc-autojoin-channels (server nick) (cond ((member server '("irc.tu-ilmenau.de" "irc.fu-berlin.de")) (myerc-join-channels "#KANT" ;;"#kRaZykEkS" )) ((and (member server '("fr.quakenet.org" "de.quakenet.org" "uk.quakenet.org")) (member nick '("hroptatyr" "asathor"))) (erc-cmd-AUTHQUAKE) (myerc-join-channels ;;"#schnorty" "#semo" "#d.o.n.t.w.h.o.i.s" "#tu-berlin" "#no_homies" "#i-love-teki" ;;"#MARZAHN" ;;"#rostock" ;;"#hropbot" "#hoschi" ;;"#spacenet" ;;"#bad.radio" )) ((and (member server '("fr.quakenet.org" "de.quakenet.org" "uk.quakenet.org")) (member nick '("MoI|schnorty"))) (myerc-join-channels "#moi-clan" "#rufbert")) ((string= server "irc.euirc.net") (erc-cmd-AUTH) (myerc-join-channels "#evanet" "#teki")) ((string= server "eu.slashnet.org") (myerc-join-channels "#sourceforge")) ((member server '("irc.efnet.org" "eu.rr.efnet.net" "irc.inet.tele.dk")) (myerc-join-channels "#galeforbundet" "#robotolabs")) ((string= server "irc.oftc.net") (myerc-join-channels ;;"#e" "#xslt")) ((string= server "irc.gimp.org") (myerc-join-channels "#Gnome-de" "#gnomemeeting" ;;"#GNOME" )) ((or (string= server "irc.ipv6.freenode.net") (string= server "irc.freenode.net")) (cond ((string-match "^hroptatyr" nick) (erc-cmd-AUTH) (myerc-join-channels "#emacs" "#xemacs" "#sxemacs" ;;"#eicq" "#emchat" "#gnus" "#fresse" "#xwem" ;;"#valby" "##horst-tla" "#erc" ;;"#mplayer" ;;"#orkut" ;;"#postgresql" ;;"#lisp" ;;"#netfilter" ;;"#math" ;;"#iptables" ;;"#latex" ;;"#jabber" "#pulseaudio" "#fsbot" "#ffmpeg" "#kash" "#arch" ;;"#winflame" ;;"#wiki" ;;"#hurd" )) ((string-match "^asathor" nick) (erc-cmd-AUTH) (myerc-join-channels ;;"#bxl-ffii" ;;"#kant" "#amule" "#ig" "#gmane" ;;"#guile" ;;"#svn" "#freedesktop" ;;"#xml" "#kernel" "#scheme" ;;"#commits" )))) ((string= server "141.30.217.15") (erc-cmd-AUTHHSS) (myerc-join-channels "#blah") (myerc-join-channels "#talk")) ((string= server "204.8.222.187") (erc-cmd-AUTHASGARD)) (t nil))) ;;;;(add-hook 'erc-after-connect 'myerc-autojoin-channels) ;;(add-hook 'erc-server-KICK-hook 'myerc-autojoin-channels) ;;(add-hook 'erc-server-PRIVMSG-hook 'erc-pcomplete-ordering-PRIVMSG-handler) (defun erc-cmd-AUTOJOIN (&rest ignore) (myerc-autojoin-channels erc-session-server (erc-current-nick))) (defalias 'erc-cmd-AJ 'erc-cmd-AUTOJOIN) (defun erc-cmd-BITLBEE (&rest ignore) (erc-message "PRIVMSG" (format "%s identify %s" "root" (certs-unveil-secret-by-topic-path ["irc" "bitlbee"])))) (defun erc-cmd-OPME () "request a chanop op to me" (erc-message "PRIVMSG" (format "chanserv op %s %s" (erc-default-target) (erc-current-nick)) nil)) (defun erc-cmd-OPME+BOT () "request a chanop op to me" (erc-message "PRIVMSG" (format "chanserv op %s %s" (erc-default-target) (erc-current-nick)) nil) (erc-message "PRIVMSG" (format "chanserv op %s %s" (erc-default-target) "erbot") nil)) (defun erc-cmd-OPMEEICQ () "request chanop to me at #eicq" (erc-send-ctcp-message "JackaLX" (concat "OP #eicq " (certs-unveil-secret-by-topic-path ["irc" "freenode" "chanserv" "#eicq"])))) (defun erc-cmd-OPMESXE () "request chanop to me at #sxemacs" (erc-send-ctcp-message "JackaLX" (concat "OP #sxemacs " (certs-unveil-secret-by-topic-path ["irc" "freenode" "chanserv" "#sxemacs"])))) (defun erc-cmd-DEOPME () "Deop myself from current channel" (erc-cmd-DEOP (format "%s" (erc-current-nick)))) (defun erc-cmd-BAN (nick) (let* ((chan (erc-default-target)) (who (erc-get-server-user nick)) (host (erc-server-user-host who)) (user (erc-server-user-login who))) (erc-send-command (format "MODE %s +b *!%s@%s" chan user host)))) (defun erc-cmd-KICKBAN (nick &rest reason) (setq reason (mapconcat #'identity reason " ")) (and (string= reason "") (setq reason nil)) (erc-cmd-BAN nick) (erc-send-command (format "KICK %s %s %s" (erc-default-target) nick (or reason "Kicked (kickban)")))) (defun erc-cmd-MASSDEOP (&rest reason) (setq reason (mapconcat #'identity reason " ")) (let ((hash-table erc-channel-users) users) (maphash (lambda (k v) (unless (equal k erc-nick) (add-to-list 'users k))) hash-table) (eval `(erc-cmd-DEOP ,@users)))) (defun erc-cmd-MASSOP (&rest reason) (setq reason (mapconcat #'identity reason " ")) (let ((hash-table erc-channel-users) users) (maphash (lambda (k v) (unless (equal k erc-nick) (add-to-list 'users k))) hash-table) (eval `(erc-cmd-OP ,@users)))) (defun erc-cmd-IP (&rest ignore) "" ) (defun erc-cmd-UPTIME (&rest ignore) "Brag current uptimes to channel." (let* ((a)) (erc-send-message (format "SXEmacs %S; system uptime %S" (uptime) (uptime t))))) (defun erc-cmd-LOADAVG (&rest ignore) "Brag current load to channel." (let* ((uname-output (replace-regexp-in-string "^.+load average:\\s-+\\(.+\\),\\s-+\\(.+\\),\\s-+\\(.+\\)$" "1:\\1 5:\\2 15:\\3" (shell-command-to-string "uptime")))) (erc-send-message uname-output))) (defun erc-cmd-WEATHER (&rest specs-ids) "Brag current weather to channel." (let* ((speclist (or specs-ids '(berlin))) (format '("%s, current temp: %s%s" :name temp :temp-unit-string)) (fspecl (mapcar (lambda (spec) (let ((fullspec (assoc spec emeteo-data-sources))) (and fullspec (emeteo-utils-format fullspec (emeteo-fetch spec) format)))) speclist))) (mapc (lambda (fspec) (and fspec (erc-send-message fspec))) fspecl))) ;;(erc-cmd-WEATHER "berlin") (defun erc-bouncer-connect (command server port nick &optional autoreconnect fname ssl pass) "Create interactive command `command', for connecting to an IRC server. The command uses interactive mode if passed an argument." (let ((name (or fname erc-user-full-name))) (fset command `(lambda (arg) (interactive "p") ;;(setq erc-auto-reconnect t) (if (not (= 1 arg)) (erc-select ,server ,port ,nick) (let* ((erc-connect-function ',(if ssl 'open-ssl-stream 'open-network-stream))) (erc :server ,server :port ,port :nick ,nick :full-name ,name :password ,pass))))))) ;;; foreign (erc-bouncer-connect 'erc-OPN-als-bot "irc.freenode.net" 6667 "deride") ;; mine (erc-bouncer-connect 'erc-quakenet "de.quakenet.org" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-undernet "irc.undernet.org" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-counter-quakenet "de.quakenet.org" 6667 "asathor" t) (erc-bouncer-connect 'erc-conquer-space "conquer-space.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-fub "irc.fu-berlin.de" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-counter-fub "irc.fu-berlin.de" 6667 "asathor") (erc-bouncer-connect 'erc-tui "irc.tu-ilmenau.de" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-counter-tui "irc.tu-ilmenau.de" 6667 "asathor") (erc-bouncer-connect 'erc-gnome "irc.gnome.org" 6667 "hroptatyr") (erc-bouncer-connect 'erc-HSS "141.30.217.15" 6667 "hroptatyr") (erc-bouncer-connect 'erc-mygnus "irc.my.gnus.org" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-efnet "irc.nac.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-OPN "irc.freenode.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-OPN6 "irc.ipv6.freenode.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-OPN-asathor "irc.freenode.net" 6665 "asathor" t) (erc-bouncer-connect 'erc-OPN-hnikar "irc.freenode.net" 6667 "hnikar") (erc-bouncer-connect 'erc-seti "seti-ost.de" 6667 "hroptatyr") (erc-bouncer-connect 'erc-eunet "irc.euirc.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-oftc "irc.oftc.net" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-slashnet "eu.slashnet.org" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-liquid "redevilz.liquidirc.com" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-gimpnet "irc.gimp.org" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-asgard "204.8.222.187" 6667 "hroptatyr" t) ;; dedicated networks (erc-bouncer-connect 'erc-dancer.moneysac "moneysac.math.tu-berlin.de" 6667 "hroptatyr" t) (erc-bouncer-connect 'erc-bitlhicksi "hicksi" 6668 "hroptatyr" t) (erc-bouncer-connect 'erc-bitlhicksihrop "hicksi" 6668 "hroptatyr" t) (erc-bouncer-connect 'erc-bitlmuck "muck" 6668 "hroptatyr" t) (erc-bouncer-connect 'erc-bitlmack "mack" 6668 "hroptatyr" t) ;;(erc-bouncer-connect 'erc-bitlhlid "fluch.pr1v.hlidskjalf.org" 6668 "hroptatyr" t) (erc-bouncer-connect 'erc-bitlhlid "fluch.fresse.org" 6668 "hroptatyr" t) (setq erc-track-exclude '("irc.fu-berlin.de" "irc.tu-ilmenau.de" "irc.freenode.net" "hicksi" "141.30.217.15" "de.quakenet.org" "irc.efnet.org" "irc.oftc.net" "irc.euirc.net") erc-track-exclude-types '("PING" "PONG" "PART" "QUIT") erc-track-showcount t erc-track-position-in-mode-line t erc-track-modified-channel-object-separator "" erc-track-switch-direction 'newest) (defvar current-xemacs-dsp-device nil "This var holds the current dsp-device") (defvar myerc-fire-up-erc-servers-list nil "List of servers to fire up on `erc-fire-up-erc'") (setq myerc-fire-up-erc-servers-list '( erc-OPN ;;erc-OPN-als-asathor ;;erc-quakenet ;;erc-eunet ;;erc-oftc ;;erc-fub erc-HSS ;;erc-efnet ;;erc-asgard erc-bitlhlid )) (defun erc-fire-up-erc (&rest ignore) "Fires up anything I'd like." (interactive) ;;(add-hook 'erc-after-connect 'myerc-autojoin-channels) (mapcar #'(lambda (server-call) (call-interactively server-call) (sit-for 5)) myerc-fire-up-erc-servers-list)) ;;; additional erc-funs ;; 0406.21:22:30 (defun erc-cmd-THINK (&rest line) (let ((text (concat ".oO{ " (erc-trim-string (mapconcat 'identity line " ")) " }"))) (erc-send-action (erc-default-target) text))) (defun erc-cmd-NOW-PLAYING (&rest ignore) "Prints the id3-tag of the music currently playin'" (let* ((cur-music "no music :(") (mpg-strings `[,(concat "iss playing " cur-music) ,(concat "checks the tune of " cur-music)]) (text (elt mpg-strings (random (length mpg-strings))))) (erc-send-action (erc-default-target) text) ;;(erc-send-message (format "NP: %s" cur-music)) t)) (defalias 'erc-cmd-NP 'erc-cmd-NOW-PLAYING) (defun erc-cmd-HOWMANY (&rest ignore) "Display how many users (and ops) the current channel has." (erc-display-message nil 'notice (current-buffer) (let ((hash-table (with-current-buffer (erc-server-buffer) erc-server-users)) (users 0) (ops 0) (voices 0)) (maphash (lambda (k v) (when (member (current-buffer) (erc-server-user-buffers v)) (incf users)) (when (erc-channel-user-op-p k) (incf ops)) (when (erc-channel-user-voice-p k) (incf voices))) hash-table) (format "There are %s users (%s ops, %s voiceds) on the current channel" users ops voices)))) (defalias 'erc-cmd-HM 'erc-cmd-HOWMANY) (defun erc-cmd-DEMOGRAPHICS (&rest ignore) "Display short channel demographics." (erc-display-message nil 'notice (current-buffer) (let ((hash-table erc-channel-users) (demo-hashes (make-hash-table :test 'equal)) (tld-distri)) (maphash (lambda (k v) (let* ((host (format "%s" (aref (car v) 2))) (tld (and (string-match ".+\\.\\([a-zA-Z]+\\)$" host) (downcase (match-string 1 host)))) (tldc (and tld (gethash tld demo-hashes 0)))) (and tldc (puthash tld (1+ tldc) demo-hashes)))) hash-table) (maphash (lambda (k v) (add-to-list 'tld-distri (format "%s %s" v k))) demo-hashes) (format "TLD Demographics: %s" (mapconcat 'identity tld-distri ", "))))) (defalias 'erc-cmd-DG 'erc-cmd-DEMOGRAPHICS) (defalias 'erc-cmd-TLD 'erc-cmd-DEMOGRAPHICS) (defun erc-complete-bitlbee () "Completes bitlbee commands in channel #bitlbee" (interactive) nil) ;;(remove 'smiley erc-modules) ;;(setq erc-modules (append '(bbdb) erc-modules)) ;;(setq erc-modules (remove 'BBDB (remove 'smiley (remove 'bbdb erc-modules)))) ;;; HOOOOOOKS (add-hook 'erc-mode-hook '(lambda () (require 'erc-pcomplete) (pcomplete-erc-setup) ;;(erc-completion-mode 1) ;;(activate-input-method "latin-1-prefix") )) ;;(remove-hook 'erc-mode-hook 'erc-add-scroll-to-bottom) (add-hook 'erc-complete-functions 'erc-complete-bitlbee) ;;;###autoload (defun buffer-name-p-my (name &optional matchfn) "Whether name is the name of a buffer.." (unless matchfn (setq matchfn 'string=)) (and (current-buffer) (member-if (lambda (arg) (funcall matchfn name (buffer-name arg))) (buffer-list)))) (defun erc-cmd-AUTH (&rest ignore) (erc-cmd-MSG (concat "nickserv identify " (certs-unveil-secret-by-topic-path ["irc" "freenode" "hroptatyr"])))) (defun erc-cmd-AUTHHSS (&rest ignore) (erc-cmd-MSG (concat "nickserv identify " (certs-unveil-secret-by-topic-path ["irc" "hss" "hroptatyr"])))) (defun erc-cmd-AUTHASGARD (&rest ignore) (erc-cmd-MSG (concat "NickServ@services.asgard-irc.net auth hroptatyr " (certs-unveil-secret-by-topic-path ["irc" "asgard" "hroptatyr"])))) (defun erc-cmd-AUTHQUAKE (&rest ignore) (erc-cmd-MSG (concat "Q@CServe.quakenet.org AUTH hroptatyr " (certs-unveil-secret-by-topic-path ["irc" "quakenet" "hroptatyr"])))) ;; some extra match stuff (defvar myerc-beep-mode-line-string "" "") (add-to-list 'global-mode-string 'myerc-beep-mode-line-string t) ;;(add-hook 'erc-text-matched-hook 'myerc-beep-my-nick) (defun myerc-beep-my-nick (match-type nick msg) (interactive) (setq test (list match-type nick msg)) (and (eq match-type 'current-nick) (setq myerc-beep-mode-line-string (concat " C:" (erc-extract-nick nick) "@")) (force-mode-line-update))) ;; some sound notifications (defvar myerc-sounds-alist nil "Alist mapping an event name to some sound file.") (defvar myerc-notify-newly-tracked-targets nil "Defines which targets when newly tracked should occur in `myerc-pal-occur-event'.") (load-sound-file (expand-file-name "kiss.wav" "~/.sxemacs/sounds") 'nick) (load-sound-file (expand-file-name "cuckoo.wav" "~/.sxemacs/sounds") 'privmsg) (load-sound-file (expand-file-name "mellowbweep" "~/.sxemacs/sounds") 'pal) ;;; recommended settings for the CeBIT ;; (setq myerc-sounds-alist '((nick . "mellowbweep.wav") ;; (privmsg . "cuckoo.wav"))) (defalias 'myerc-event #'play-sound) (defun myerc-say-nick (str) "Play a sound file if STR contains current nicks." (when (some (lambda (nick) (string-match nick str)) (append erc-alt-nick-regexps `(,erc-nick))) (myerc-event 'nick))) (defun myerc-query-event (proc parsed) (let* ((nick (car (erc-parse-user (aref parsed 1)))) (target (aref parsed 2)) (msg (aref parsed 3)) (query (if (not erc-query-on-unjoined-chan-privmsg) nick (if (erc-current-nick-p target) nick target)))) (and (not (erc-ignored-user-p (aref parsed 1))) (or erc-query-on-unjoined-chan-privmsg (string= target (erc-current-nick))) (not (erc-get-buffer query proc)) (not (erc-is-message-ctcp-and-not-action-p msg)) (myerc-event 'privmsg) nil))) (defun myerc-pal-occur-event (target) "Play a sound file if TARGET is contained `myerc-notify-newly-tracked-targets'." (and (stringp target) (when (some (lambda (tgtrexp) (string-match tgtrexp target)) myerc-notify-newly-tracked-targets) (myerc-event 'pal)))) (defun myerc-sound-enable nil (interactive) (add-hook 'erc-insert-pre-hook 'myerc-say-nick) (add-hook 'erc-track-new-modified-channel-hook 'myerc-pal-occur-event) ;;(add-hook 'erc-server-PRIVMSG-functions 'myerc-query-event) ) (defun myerc-sound-disable nil (interactive) (remove-hook 'erc-insert-pre-hook 'myerc-say-nick) (remove-hook 'erc-track-new-modified-channel-hook 'myerc-pal-occur-event) (remove-hook 'erc-server-PRIVMSG-functions 'myerc-query-event)) (defun myerc-pop-to-buffer-with-current-lock-file nil (interactive) (let ((clogf (erc-current-logfile))) (and (file-exists-p clogf) (find-file-other-window clogf)))) ;;; tunin' ;; per-channel prompts (setq erc-prompt (lambda () (erc-propertize (format "%.12s%s" (or (erc-default-target) "ERC") ">") 'start-open t ; XEmacs 'rear-nonsticky t ; Emacs 'erc-prompt t 'front-sticky t 'read-only t))) (remove-hook 'erc-insert-post-hook #'erc-make-read-only) (remove-hook 'erc-send-post-hook #'erc-make-read-only) ;; bitlbee stuff (require 'url) (defun myerc-query-icq-user (&optional uin) "Queries UIN `uin' on people.icq.com, returns result table." (with-timeout (3 (ignore)) (and uin (with-current-buffer (url-retrieve-synchronously (format "http://people.icq.com/whitepages/about_me/1,,,00.html?to=%%25U&Uin=%s" uin)) (let* (;; some cleansing (result (buffer-string)) (result (replace-regexp-in-string (format " \\|\n\\|%c" 13) " " result)) (result (replace-regexp-in-string "<.+?>\\|%c" "" result)) (result (replace-regexp-in-string "\\s-+" " " result)) (result (replace-regexp-in-string ".+;Personal Details" "" result)) ;; now the parsing (fname (and (string-match "first ?name: ;\\(\\S-+\\)" result) (match-string 1 result))) (lname (and (string-match "last ?name: ;\\(\\S-+\\)" result) (match-string 1 result))) (nick (and (string-match "nickname: ;\\(\\S-+\\)" result) (match-string 1 result)))) `((fname . ,fname) (lname . ,lname) (nick . ,nick))))))) (defun erc-cmd-WIICQ (uin) "Queries icq-user with UIN `uin', and returns the result." (let* ((result (myerc-query-icq-user uin)) (fname (cdr (assoc 'fname result))) (lname (cdr (assoc 'lname result))) (nick (cdr (assoc 'nick result)))) (erc-display-message nil 'notice (current-buffer) (format "%s (%s %s)" nick fname lname)))) ;; adoptions (defvar erc-alt-nick-regexps nil "Some alternative nick regexps to be matched as current-nick.") (setq erc-alt-nick-regexps '("\\bh+r+o+p+.*" ;;"\\bhorstl?" "asathor")) (defun erc-match-current-nick-p (nickuserhost msg) "Check whether the current nickname is in MSG. NICKUSERHOST will be ignored." (and msg (or (string-match (erc-current-nick) msg) (some (lambda (rexp) (string-match rexp msg)) erc-alt-nick-regexps)))) (defun myerc-purge-dumb-tracks nil (interactive) (setq erc-modified-channels-alist (remove-if (lambda (item) (member (cddr item) '(erc-notice-face))) erc-modified-channels-alist)) (erc-track-enable) (erc-modified-channels-update) (erc-update-mode-line)) (defun myerc-purge-notice-tracks nil (interactive) (setq erc-modified-channels-alist (remove-if (lambda (item) (member (cddr item) '(erc-nick-msg-face))) erc-modified-channels-alist)) (erc-track-enable) (erc-modified-channels-update) (erc-update-mode-line)) (defun myerc-purge-server-tracks nil (interactive) (setq erc-modified-channels-alist (remove-if (lambda (item) (erc-server-buffer-p (car item))) erc-modified-channels-alist)) (erc-track-enable) (erc-modified-channels-update) (erc-update-mode-line)) (defun myerc-track-channel-slideshow nil (interactive) (let ((bufl (copy-sequence (erc-buffer-list)))) (setq erc-modified-channels-alist (mapcar (lambda (buf) (cons buf (cons 1 'erc-default-face))) bufl)) (erc-modified-channels-update) (erc-update-mode-line))) (defun myerc-track-server-slideshow nil (interactive) (let ((bufl (copy-sequence (erc-buffer-list 'erc-server-buffer-p)))) (setq erc-modified-channels-alist (append erc-modified-channels-alist (mapcar (lambda (buf) (cons buf (cons 1 'erc-notice-face))) bufl))) (erc-modified-channels-update) (erc-update-mode-line))) (defun myerc-purge-last (&optional n) (interactive "p") (let ((n (or n 1))) (setq erc-modified-channels-alist (butlast erc-modified-channels-alist n)) (erc-modified-channels-update) (erc-update-mode-line))) (defun erc-cmd-INTERSECTION (nick1 &optional nick2) "Gives intersection set of channels joined by nick1 and nick2. Optional `nick2' is current nick by default." (let ((nick2 (and (erc-is-valid-nick-p (or nick2 erc-nick)) (or nick2 erc-nick))) (nick1wi )) (and (erc-is-valid-nick-p nick1) (erc-cmd-WHOIS nick2)))) (defun myerc-track-buffer-toric-motion (char) (interactive "cRing: ") (let* ((bufl (copy-sequence (erc-buffer-list))) (bufn (mapcar 'buffer-name bufl))) (member* "#t" bufn))) (defun erc-cmd-SHOWOFF (&rest ignore) "Fscking show off implementation" (let* ((chnl (erc-buffer-list)) (srvl (erc-buffer-list 'erc-server-buffer-p)) (memb (apply '+ (mapcar (lambda (chn) (with-current-buffer chn (1- (length (erc-get-channel-user-list))))) chnl))) (show (format "is connected to %i networks and talks in %i chans to %i ppl overall :>" (length srvl) (- (length chnl) (length srvl)) memb))) (erc-send-action (erc-default-target) show))) (defalias 'erc-cmd-SO 'erc-cmd-SHOWOFF) (defun erc-cmd-DETAILED-SHOWOFF (&rest ignore) "Fscking show off implementation with details" (let* ((chnl (erc-buffer-list)) (srvl (erc-buffer-list 'erc-server-buffer-p))) (mapcar (lambda (srv) (let* ((netn (with-current-buffer srv erc-session-server)) (netp (with-current-buffer srv erc-session-port)) (chns (remove-if-not (lambda (chn) (and (string= netn (with-current-buffer chn erc-session-server)) (eq netp (with-current-buffer chn erc-session-port)))) chnl)) (chnn (1- (length chns))) (chnm (remove nil (mapcar (lambda (chn) (with-current-buffer chn (erc-get-channel-user-list))) chns))) (chnmn (apply '+ (mapcar '1- (mapcar 'length chnm)))) (show (format "is connected to %s (%s), talking to %i users in %i chans" netn (buffer-name srv) chnmn chnn))) (erc-send-action (erc-default-target) show) (sit-for 1))) srvl))) (defalias 'erc-cmd-DSO 'erc-cmd-DETAILED-SHOWOFF) (defun erc-cmd-ALIAS (command &rest words) (fset (intern (concat "erc-cmd-" (upcase command))) (list 'lambda '(&rest ignore) (list 'erc-send-command (mapconcat 'identity words " "))))) (defun erc-cmd-TEMPLATE (command &rest words) (fset (intern (concat "erc-cmd-" (upcase command))) `(lambda () (run-with-idle-timer 0 nil (lambda (&rest ignore) (insert ,(mapconcat 'identity words " "))))))) ;; helper defun to unfill lines that have been cut from elsewhere (defun erc-unfill () "Unfill the region after the prompt. Intended to be called just before you send a line" (interactive) (save-excursion (end-of-buffer) (goto-char (previous-single-property-change (point) 'erc-prompt)) (while (search-forward "\n" nil t) (delete-backward-char 1) (just-one-space)))) (define-key erc-mode-map (kbd "M-q") 'erc-unfill) (defvar myerc-track-exclude erc-track-exclude "Original track exclude list.") (defun myerc-track-add-exclude-target (&rest ignore) (interactive) (let ((edt (erc-default-target))) (add-to-list 'erc-track-exclude edt) (message "track exclusion for target %s added ..." edt))) (defun myerc-track-reset-exclude-targets (&rest ignore) (interactive) (setq erc-track-exclude myerc-track-exclude) (message "track excludes reset ...")) (defun myerc-show-queries nil "Show list of buffers holding a query" (interactive) (let ((qry-list (remove-if (lambda (buf) (string-match "^#\\|:" buf)) (mapcar 'buffer-name (erc-buffer-list))))) (message "%S" qry-list))) ;; (setq emacs-build-time (current-time)) ;; (setq erc-emacs-build-time (current-time)) ;;test ;; ;; key stuff (define-key erc-mode-map [(meta s)] 'erc-send-current-line) (define-key erc-mode-map [(control a)] 'erc-bol) ;; (define-key erc-mode-map [(control x) (control s)] (function (lambda nil ;; (interactive) ;; (erc-truncate-buffer) ;; (set-buffer-modified-p nil)))) (global-set-key [f9 f1] 'erc-fire-up-erc) (global-set-key [f9 f11] 'myerc-purge-notice-tracks) (global-set-key [f9 f12] 'myerc-purge-dumb-tracks) (global-set-key [f9 f10] 'myerc-purge-last) (global-set-key [f9 f7] 'myerc-purge-server-tracks) (global-set-key [f9 f9 f9] 'erc-track-disable) (global-set-key [f9 f9 f5] 'erc-track-enable) ;;(global-set-key [f9 f9 f12] 'myerc-track-channel-slideshow) (global-set-key [f9 f9 s] 'myerc-track-server-slideshow) (global-set-key [f9 f9 (escape)] 'myerc-track-reset-exclude-targets) (global-set-key [(super s)] 'myerc-show-queries) (define-key erc-mode-map [f9 l] 'myerc-pop-to-buffer-with-current-lock-file) ;;(define-key erc-mode-map [f9 a] 'myerc-track-add-exclude-target) (define-key erc-mode-map [f9 f9 x] 'myerc-track-add-exclude-target) (define-key erc-mode-map [(meta up)] 'erc-previous-command) (define-key erc-mode-map [(meta down)] 'erc-next-command) (define-key erc-mode-map [tab] 'erc-complete-word) (define-key erc-mode-map [kp-enter] 'newline) (define-key erc-mode-map [(control c) (control m)] (lambda () (interactive) (insert (format "/mode %s " (buffer-name))))) (define-key erc-mode-map (kbd "C-c q") (lambda (nick) (interactive (list (completing-read "Nick (channel-wide): " (let ((hash-t erc-channel-users) (users)) (maphash (lambda (key val) (add-to-list 'users (cons key key))) hash-t) users)))) (erc-cmd-QUERY nick))) (define-key erc-mode-map (kbd "C-c C-q") (lambda (nick) (interactive (list (completing-read "Nick (server-wide): " (let ((hash-t (with-current-buffer (erc-server-buffer) erc-server-users)) (users)) (maphash (lambda (key val) (add-to-list 'users (cons key key))) hash-t) users)))) (erc-cmd-QUERY nick))) (defvar myerc-network-prefixes '((quakenet . ?q) (euIRCnet . ?e) (efnet . ?f) (freenode . ?o) (hss . ?h) (bitlbee . ?b) (queries . ?\`)) "Looks like an alist \(network . [keystroke]) This binds network `network' to the prefix-key `keystroke'.") (defvar myerc-channel-shortcuts nil "Looks like an alist of alists \(network . '((\"#channel\" . [keystroke]) ... This binds #channel to the keystroke myerc-prefix-map-key myerc-network-prefix-map-key `keystroke'") (setq myerc-channel-shortcuts '((quakenet . (("#semo" . ?s) ("#d.o.n.t.w.h.o.i.s" . ?d) ("#tu-berlin" . ?t) ("#no_homies" . ?n) ("#spacenet" . [?2 ?s]) ("#i-love-teki" . ?i) ("#maRzaHn" . ?m) ("#hropbot" . ?h) ("#hoschi" . [?2 ?h]) ("de.quakenet.org:6667" . [space]))) (euIRCnet . (("#evanet" . ?e) ("#teki" . ?t) ("irc.euirc.net:6667" . [space]))) (efnet . (("#galeforbundet" . ?g) ("#robotolabs" . ?r) ("irc.efnet.org:6667" . [space]))) (oftc . (("#xslt" . ?x))) (freenode . (("#emacs" . ?e) ("#xemacs" . ?x) ("#emchat" . ?c) ("#eicq" . ?q) ("#gnus" . ?n) ("#mplayer" . ?m) ;;("#orkut" . ?o) ("#pulseaudio" . ?p) ("#jabber" . ?j) ("#lisp" . ?l) ("#fresse" . ?f) ("#fsbot" . [?2 ?f]) ("#ffmpeg" . [?3 ?f]) ("#kash" . ?k) ("#iptables" . ?i) ("#gnus" . ?g) ("#kant" . [?2 ?k]) ("#sxemacs" . ?s) ("##horst-tla" . ?h) ("#valby" . ?v) ("#xwem" . ?w) ("#slackware" . [?2 ?s]) ("#wiki" . [?2 ?w]) ("#amule" . [?2 ?a]) ("#arch" . ?a) ("irc.freenode.net:6667" . [space]) ("irc.ipv6.freenode.net:6667" . [?6 space]))) (bitlbee . (("&bitlbee" . ?b) ("log" . ?l))) (hss . (("#blah" . ?b) ("#talk" . ?t))) (queries . (("myrkraverk_jab" . [?2 ?m]) ("myrkraverk_aim" . [?3 ?m]) ("myrkraverk" . ?m) ("steve_icq" . ?s) ("Semo_icq" . [?2 ?s]) ("dynamo" . ?d) ("ben_icq" . ?b) ("ralf_icq" . ?r) ("majo_icq" . ?m) ("JackaLX" . ?j) ("julie_icq" . [?2 ?j]) ("hynek" . ?h) ("hynek_icq" . [?2 ?h]) ("hynek_ic" . [?3 ?h]) ("urb_icq" . ?u) ("urb_ic" . [?2 ?u]) ("keks_icq" . [?2 ?k]) ("kerstin_icq" . ?k))))) (defun myerc-bind-keys nil (interactive) (mapc (lambda (net-prefix) (let* ((net (car net-prefix)) (key (cdr net-prefix)) (map (make-sparse-keymap net))) (define-key myerc-prefix-map key map) (let ((chankeys (cdr (assoc net myerc-channel-shortcuts)))) (mapc (lambda (chankey) (let ((chan (car chankey)) (key (cdr chankey))) (define-key map key `(lambda nil (interactive) (let* ((buf (get-buffer ,chan))) (and buf (prog1 (switch-to-buffer buf t) (goto-char (point-max))))))))) chankeys)))) myerc-network-prefixes)) (myerc-bind-keys) ;;(load-file (concat (getenv "lispdir") "/erc/erc.el")) ;;;(load-file (concat (getenv "lispdir") "/erc/erc-spies.el")) ;;(load-file (concat (getenv "lispdir") "/erc/erc-backend.el")) ;; Local variables: ;; donteval: (mtorus-add-pos-to-ring (current-buffer) "emacs-config") ;; indent-tabs-mode: nil ;; End: