Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

Now use Carton for emacs for dependency management

  • Loading branch information...
commit 968f8849eb106cdbf42f367e9919c800c48da74b 1 parent 4354c0b
@oakho authored
Showing with 2,691 additions and 73 deletions.
  1. +3 −2 emacs/emacs.d.symlink/.gitignore
  2. +49 −0 emacs/emacs.d.symlink/Carton
  3. +9 −45 emacs/emacs.d.symlink/init.el
  4. +17 −5 emacs/emacs.d.symlink/oakho/init.el
  5. +4 −1 emacs/emacs.d.symlink/oakho/oakho-keybindings.el
  6. +3 −14 emacs/emacs.d.symlink/oakho/oakho-variables.el
  7. +106 −1 emacs/emacs.d.symlink/prelude/core/prelude-packages.el
  8. +0 −3  emacs/emacs.d.symlink/prelude/core/prelude-ui.el
  9. +1 −1  emacs/emacs.d.symlink/prelude/init.el
  10. +676 −0 emacs/emacs.d.symlink/prelude/vendor/COPYING
  11. +31 −0 emacs/emacs.d.symlink/prelude/vendor/README.extras
  12. +91 −0 emacs/emacs.d.symlink/prelude/vendor/ac-slime.el
  13. +38 −0 emacs/emacs.d.symlink/prelude/vendor/auto-complete-yasnippet.el
  14. +269 −0 emacs/emacs.d.symlink/prelude/vendor/erc-bbdb.el
  15. +181 −0 emacs/emacs.d.symlink/prelude/vendor/erc-chess.el
  16. +149 −0 emacs/emacs.d.symlink/prelude/vendor/erc-highlight-nicknames.el
  17. +416 −0 emacs/emacs.d.symlink/prelude/vendor/erc-list-old.el
  18. +416 −0 emacs/emacs.d.symlink/prelude/vendor/erc-nicklist.el
  19. +230 −0 emacs/emacs.d.symlink/prelude/vendor/erc-speak.el
  20. BIN  emacs/emacs.d.symlink/prelude/vendor/images/icq-offline.png
  21. BIN  emacs/emacs.d.symlink/prelude/vendor/images/icq-online.png
  22. BIN  emacs/emacs.d.symlink/prelude/vendor/images/irc-offline.png
  23. BIN  emacs/emacs.d.symlink/prelude/vendor/images/irc-online.png
  24. BIN  emacs/emacs.d.symlink/prelude/vendor/images/msn-offline.png
  25. BIN  emacs/emacs.d.symlink/prelude/vendor/images/msn-online.png
  26. +2 −1  zsh/zshrc.symlink
5 emacs/emacs.d.symlink/.gitignore
@@ -1,3 +1,4 @@
49 emacs/emacs.d.symlink/Carton
@@ -0,0 +1,49 @@
+(source "melpa" "")
+(source "marmalade" "")
+(source "tromey" "")
+(depends-on "s" "1.3.0")
+(depends-on "dash" "1.0.3")
+(depends-on "powerline")
+(depends-on "rinari")
+(depends-on "auto-complete")
+(depends-on "auto-complete-clang")
+(depends-on "ac-slime")
+(depends-on "expand-region")
+(depends-on "popwin")
+(depends-on "drag-stuff")
+(depends-on "fuzzy")
+(depends-on "highlight-indentation")
+(depends-on "js2-mode")
+(depends-on "nrepl")
+(depends-on "popup")
+(depends-on "powerline")
+(depends-on "pretty-mode")
+(depends-on "rspec-mode")
+(depends-on "smart-tab")
+(depends-on "ace-jump-mode")
+(depends-on "textmate")
+(depends-on "ecukes")
+(depends-on "iedit")
+(depends-on "rainbow-mode")
+(depends-on "ack-and-a-half")
+(depends-on "elisp-slime-nav")
+(depends-on "exec-path-from-shell")
+(depends-on "expand-region")
+(depends-on "flycheck")
+(depends-on "gist")
+(depends-on "guru-mode")
+(depends-on "helm")
+(depends-on "helm-projectile")
+(depends-on "magit")
+(depends-on "magithub")
+(depends-on "melpa")
+(depends-on "volatile-highlights")
+(depends-on "yasnippet")
+(depends-on "git-commit-mode")
+(depends-on "gitconfig-mode")
+(depends-on "gitignore-mode")
+(depends-on "flymake-ruby")
+(depends-on "redo+")
+(depends-on "undo-tree")
+(depends-on "slime")
54 emacs/emacs.d.symlink/init.el
@@ -2,53 +2,17 @@
(let ((default-directory "~/.emacs.d"))
+;; Turn off early to avoid momentary display.
+ (lambda (mode)
+ (if (fboundp mode)
+ (funcall mode -1)))
+ '(menu-bar-mode tool-bar-mode scroll-bar-mode))
(setq-default ispell-dictionary "american"
flyspell-issue-message-flag nil)
-;; El-get
-(setq el-get-sources '((:name powerline)
- (:name rinari)
- (:name auto-complete)
- (:name auto-complete-clang)
- (:name auto-complete-yasnippet)
- (:name ac-slime)
- (:name erc-extras)
- (:name erc-highlight-nicknames)
- (:name apel)
- (:name fuzzy)
- (:name highlight-indentation)
- (:name js2-mode)
- (:name markdown-mode)
- (:name nrepl)
- (:name popup)
- (:name powerline)
- (:name pretty-mode)
- (:name rspec-mode)
- (:name smart-tab)
- (:name ace-jump-mode)
- (:name key-chord)
- (:name textmate)))
-(defun sync-packages ()
- "Synchronize packages"
- (interactive)
- (el-get 'sync '(el-get package))
- (add-to-list 'package-archives '("tromey" . ""))
- (add-to-list 'package-archives '("marmalade" . ""))
- (add-to-list 'package-archives '("melpa" . ""))
- (setq my-packages (mapcar 'el-get-source-name el-get-sources))
- (el-get 'sync my-packages))
-(if (require 'el-get nil t)
- (sync-packages)
- (url-retrieve
- ""
- (lambda (s)
- (let (el-get-master-branch)
- (end-of-buffer)
- (eval-print-last-sexp)
- (setq el-get-verbose t)
- (sync-packages)))))
-(load-file "~/.emacs.d/prelude/init.el")
(load-file "~/.emacs.d/oakho/init.el")
+(load-file "~/.emacs.d/prelude/init.el")
22 emacs/emacs.d.symlink/oakho/init.el
@@ -12,9 +12,6 @@
(require 'oakho-ruby)
(require 'oakho-erc)
-;; Packages
-(prelude-ensure-module-deps '(redo+ magit magithub rainbow-mode volatile-highlights))
(add-to-list 'custom-theme-load-path "~/.emacs.d/prelude/themes")
(load-theme 'tangotango t)
@@ -44,8 +41,9 @@
;; Powerline
(when (require 'powerline nil t)
- (setq powerline-color1 "grey10")
- (setq powerline-color2 "grey40"))
+ (powerline-default-center)
+ (setq powerline-color1 "grey40")
+ (setq powerline-color2 "grey10"))
;; Ido customization
(when (require 'ido-hacks nil t)
@@ -79,6 +77,9 @@
(autoload 'js2-mode "js2-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
+;; Drag Stuff
+(require 'drag-stuff)
;; Redo+
(require 'redo+)
@@ -119,3 +120,14 @@
;; Delete Selection Mode
+;; Textmate
+(require 'textmate)
+;; Linum
+(require 'linum)
+(linum-mode nil)
+;; Disable Flyspell
+(setq prelude-flyspell nil)
5 emacs/emacs.d.symlink/oakho/oakho-keybindings.el
@@ -51,6 +51,9 @@
(define-key oakho-minor-mode-map (kbd "M-n") "~")
(define-key oakho-minor-mode-map (kbd "M-/") "\\")
+(define-key oakho-minor-mode-map (kbd "M-N") 'drag-stuff-down)
+(define-key oakho-minor-mode-map (kbd "M-P") 'drag-stuff-up)
;; Redo+
(define-key oakho-minor-mode-map (kbd "s-z") 'undo)
(define-key oakho-minor-mode-map (kbd "s-Z") 'redo)
@@ -79,7 +82,7 @@
(define-key oakho-minor-mode-map (kbd "C-c m b") 'magit-checkout)
;; Ace Jump Mode
-(key-chord-define oakho-minor-mode-map "fj" 'ace-jump-mode)
+(define-key oakho-minor-mode-map (kbd "C-c j") 'ace-jump-mode)
(add-hook 'prelude-prog-mode-hook 'oakho-minor-mode t)
(add-hook 'prelude-prog-mode-hook 'oakho-keybindings-hook t)
17 emacs/emacs.d.symlink/oakho/oakho-variables.el
@@ -5,17 +5,6 @@
;; Emacs
(setq shell-command-switch "-ic")
-;; Desktop
-(setq desktop-dirname prelude-savefile-dir
- desktop-base-file-name "emacs.desktop"
- desktop-base-lock-name "lock"
- desktop-path (list desktop-dirname)
- desktop-save t
- desktop-files-not-to-save "^$" ;reload tramp paths
- desktop-load-locked-desktop nil)
-;; (desktop-save-mode t)
;; Always use spaces insted of tabs
(setq-default indent-tabs-mode nil)
@@ -53,7 +42,7 @@
(setq scroll-conservatively 100000)
(setq auto-window-vscroll nil)
(setq auto-save-interval 5000)
-(setq bidi-paragraph-direction nil)
+(setq bidi-paragraph-direction nil)
;; Let's create music instead of the annoying bleep sound
(setq ring-bell-function 'oakho-bells)
@@ -95,7 +84,7 @@
(setq js2-bounce-indent-p t)
;; Vertical window split
-(setq split-height-threshold 1)
-(setq split-width-threshold nil)
+;; (setq split-height-threshold 1)
+;; (setq split-width-threshold nil)
(provide 'oakho-variables)
107 emacs/emacs.d.symlink/prelude/core/prelude-packages.el
@@ -36,7 +36,7 @@
(add-to-list 'package-archives
'("melpa" . "") t)
;; set package-user-dir to be relative to Prelude install path
-(setq package-user-dir (expand-file-name "elpa" prelude-dir))
+;; (setq package-user-dir (expand-file-name "elpa" prelude-dir))
;; required because of a package.el bug
@@ -111,4 +111,109 @@
(-each (-remove #'package-installed-p packages) #'package-install))
(provide 'prelude-packages)
+;;; prelude-packages.el ends here;;; prelude-packages.el --- Emacs Prelude: default package selection.
+;; Copyright © 2011-2013 Bozhidar Batsov
+;; Author: Bozhidar Batsov <>
+;; URL:
+;; Version: 1.0.0
+;; Keywords: convenience
+;; This file is not part of GNU Emacs.
+;;; Commentary:
+;; Takes care of the automatic installation of all the packages required by
+;; Emacs Prelude.
+;;; License:
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License
+;; as published by the Free Software Foundation; either version 3
+;; of the License, or (at your option) any later version.
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;; Code:
+(require 'package)
+(add-to-list 'package-archives
+ '("melpa" . "") t)
+(defvar prelude-packages
+ '()
+ "A list of packages to ensure are installed at launch.")
+(defun prelude-packages-installed-p ()
+ (-all? #'package-installed-p prelude-packages))
+(defun prelude-install-packages ()
+ (unless (prelude-packages-installed-p)
+ ;; check for new packages (package versions)
+ (message "%s" "Emacs Prelude is now refreshing its package database...")
+ (package-refresh-contents)
+ (message "%s" " done.")
+ ;; install the missing packages
+ (-each
+ (-reject #'package-installed-p prelude-packages)
+ #'package-install)))
+(defmacro prelude-auto-install (extension package mode)
+ `(add-to-list 'auto-mode-alist
+ `(,extension . (lambda ()
+ (unless (package-installed-p ',package)
+ (package-install ',package))
+ (,mode)))))
+(defvar prelude-auto-install-alist
+ '(("\\.clj\\'" clojure-mode clojure-mode)
+ ("\\.coffee\\'" coffee-mode coffee-mode)
+ ("\\.css\\'" css-mode css-mode)
+ ("\\.erl\\'" erlang erlang-mode)
+ ("\\.feature\\'" feature-mode feature-mode)
+ ("\\.groovy\\'" groovy-mode groovy-mode)
+ ("\\.haml\\'" haml-mode haml-mode)
+ ("\\.hs\\'" haskell-mode haskell-mode)
+ ("\\.latex\\'" auctex LaTeX-mode)
+ ("\\.less\\'" less-css-mode less-css-mode)
+ ("\\.lua\\'" lua-mode lua-mode)
+ ("\\.markdown\\'" markdown-mode markdown-mode)
+ ("\\.md\\'" markdown-mode markdown-mode)
+ ("\\.php\\'" php-mode php-mode)
+ ("\\.sass\\'" sass-mode sass-mode)
+ ("\\.scala\\'" scala-mode2 scala-mode)
+ ("\\.scss\\'" scss-mode scss-mode)
+ ("\\.slim\\'" slim-mode slim-mode)
+ ("\\.yml\\'" yaml-mode yaml-mode)))
+;; markdown-mode doesn't have autoloads for the auto-mode-alist
+;; so we add them manually if it's already installed
+(when (package-installed-p 'markdown-mode)
+ (add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
+ (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)))
+(-each prelude-auto-install-alist
+ (lambda (entry)
+ (let ((extension (car entry))
+ (package (cadr entry))
+ (mode (cadr (cdr entry))))
+ (unless (package-installed-p package)
+ (prelude-auto-install extension package mode)))))
+(defun prelude-ensure-module-deps (packages)
+ (-each (-remove #'package-installed-p packages) #'package-install))
+(provide 'prelude-packages)
;;; prelude-packages.el ends here
3  emacs/emacs.d.symlink/prelude/core/prelude-ui.el
@@ -94,8 +94,5 @@
(abbreviate-file-name (buffer-file-name))
-;; use zenburn as the default theme
-(load-theme 'zenburn t)
(provide 'prelude-ui)
;;; prelude-ui.el ends here
2  emacs/emacs.d.symlink/prelude/init.el
@@ -97,7 +97,7 @@ Emacs load path."
(require 'prelude-css)
(require 'prelude-emacs-lisp)
(require 'prelude-erc)
-(require 'prelude-erlang)
+;; (require 'prelude-erlang)
(require 'prelude-haskell)
(require 'prelude-js)
(require 'prelude-latex)
676 emacs/emacs.d.symlink/prelude/vendor/COPYING
@@ -0,0 +1,676 @@
+ Version 3, 29 June 2007
+ Copyright (C) 2007 Free Software Foundation, Inc. <>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+ Preamble
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+ The precise terms and conditions for copying, distribution and
+modification follow.
+ 0. Definitions.
+ "This License" refers to version 3 of the GNU General Public License.
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+ 1. Source Code.
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+ The Corresponding Source for a work in source code form is that
+same work.
+ 2. Basic Permissions.
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+ 4. Conveying Verbatim Copies.
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+ 5. Conveying Modified Source Versions.
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+ 6. Conveying Non-Source Forms.
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+ 7. Additional Terms.
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+ 8. Termination.
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+ 9. Acceptance Not Required for Having Copies.
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+ 10. Automatic Licensing of Downstream Recipients.
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+ 11. Patents.
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+ 12. No Surrender of Others' Freedom.
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+ 13. Use with the GNU Affero General Public License.
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+ 14. Revised Versions of this License.
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+ 15. Disclaimer of Warranty.
+ 16. Limitation of Liability.
+ 17. Interpretation of Sections 15 and 16.
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+ How to Apply These Terms to Your New Programs
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <>.
+Also add information on how to contact you by electronic and paper mail.
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
31 emacs/emacs.d.symlink/prelude/vendor/README.extras
@@ -0,0 +1,31 @@
+This is the README file for the ERC extras.
+ERC is a powerful, modular, and extensible IRC client for Emacs.
+The files included here are those which could not be distributed with
+the version of ERC that comes with Emacs 23. The reasons might include:
+ - No copyright disclaimer was completed for an author of the file.
+ - Depends on files which are not distibuted with Emacs.
+There are several ways to tell Emacs where to find these files. The
+easiest may perhaps be to copy them to "~/elisp/erc-extras", and then
+to add the line
+ (add-to-list 'load-path "~/elisp/erc-extras" t)
+to your ~/.emacs (or ~/.emacs/init.el) file. Compiling them would be
+License information
+These extras for ERC are available under the terms of the GNU General
+Public License. See the file `COPYING' for details.
91 emacs/emacs.d.symlink/prelude/vendor/ac-slime.el
@@ -0,0 +1,91 @@
+;;; ac-slime.el --- An auto-complete source using slime completions
+;;; Author: Steve Purcell <>
+;;; URL:
+;;; Version: DEV
+;;; Commentary:
+;; Usage:
+;; (require 'ac-slime)
+;; (add-hook 'slime-mode-hook 'set-up-slime-ac)
+;; (add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
+;; (eval-after-load "auto-complete"
+;; '(add-to-list 'ac-modes 'slime-repl-mode))
+(eval-when-compile (require 'cl))
+(defun ac-source-slime-fuzzy-candidates ()
+ "Return a possibly-empty list of fuzzy completions for the symbol at point."
+ (when (slime-connected-p)
+ (let ((slime-fuzzy-completion-limit 50))
+ (mapcar 'car (car (slime-fuzzy-completions (substring-no-properties ac-prefix)))))))
+(defun ac-source-slime-simple-candidates ()
+ "Return a possibly-empty list of completions for the symbol at point."
+ (when (slime-connected-p)
+ (car (slime-simple-completions (substring-no-properties ac-prefix)))))
+(defun ac-source-slime-case-correcting-completions (name collection)
+ (mapcar #'(lambda (completion)
+ (replace completion name))
+ (all-completions (downcase name) collection)))
+(defvar ac-slime-current-doc nil "Holds slime docstring for current symbol")
+(defun ac-slime-documentation (symbol-name)
+ (let ((symbol-name (substring-no-properties symbol-name)))
+ (slime-eval `(swank:documentation-symbol ,symbol-name))))
+(defun ac-slime-init ()
+ (setq ac-slime-current-doc nil))
+(defface ac-slime-menu-face
+ '((t (:inherit ac-candidate-face)))
+ "Face for slime candidate menu."
+ :group 'auto-complete)
+(defface ac-slime-selection-face
+ '((t (:inherit ac-selection-face)))
+ "Face for the slime selected candidate."
+ :group 'auto-complete)
+(defvar ac-source-slime-fuzzy
+ '((init . ac-slime-init)
+ (candidates . ac-source-slime-fuzzy-candidates)
+ (candidate-face . ac-slime-menu-face)
+ (selection-face . ac-slime-selection-face)
+ (prefix . slime-symbol-start-pos)
+ (symbol . "l")
+ (match . (lambda (prefix candidates) candidates))
+ (document . ac-slime-documentation))
+ "Source for fuzzy slime completion")
+(defvar ac-source-slime-simple
+ '((init . ac-slime-init)
+ (candidates . ac-source-slime-simple-candidates)
+ (candidate-face . ac-slime-menu-face)
+ (selection-face . ac-slime-selection-face)
+ (prefix . slime-symbol-start-pos)
+ (symbol . "l")
+ (document . ac-slime-documentation)
+ (match . ac-source-slime-case-correcting-completions))
+ "Source for slime completion")
+(defun set-up-slime-ac (&optional fuzzy)
+ "Add an optionally-fuzzy slime completion source to the
+front of `ac-sources' for the current buffer."
+ (interactive)
+ (add-to-list 'ac-sources
+ (if fuzzy
+ 'ac-source-slime-fuzzy
+ 'ac-source-slime-simple)))
+(provide 'ac-slime)
+;;; ac-slime.el ends here
38 emacs/emacs.d.symlink/prelude/vendor/auto-complete-yasnippet.el
@@ -0,0 +1,38 @@
+(require 'auto-complete)
+(require 'yasnippet)
+(defun ac-yasnippet-candidate-1 (table)
+ (let ((hashtab (yas/snippet-table-hash table))
+ (parent (yas/snippet-table-parent table))
+ candidates)
+ (maphash (lambda (key value)
+ (push key candidates))
+ hashtab)
+ (setq candidates (all-completions ac-prefix (nreverse candidates)))
+ (if parent
+ (setq candidates
+ (append candidates (ac-yasnippet-candidate-1 parent))))
+ candidates))
+(defun ac-yasnippet-candidate ()
+ (let ((table (yas/snippet-table major-mode)))
+ (if table
+ (ac-yasnippet-candidate-1 table))))
+(defface ac-yasnippet-candidate-face
+ '((t (:background "sandybrown" :foreground "black")))
+ "Face for yasnippet candidate.")
+(defface ac-yasnippet-selection-face
+ '((t (:background "coral3" :foreground "white")))
+ "Face for the yasnippet selected candidate.")
+(defvar ac-source-yasnippet
+ '((candidates . ac-yasnippet-candidate)
+ (action . yas/expand)
+ (limit . 3)
+ (candidate-face . ac-yasnippet-candidate-face)
+ (selection-face . ac-yasnippet-selection-face))
+ "Source for Yasnippet.")
+(provide 'auto-complete-yasnippet)
269 emacs/emacs.d.symlink/prelude/vendor/erc-bbdb.el
@@ -0,0 +1,269 @@
+;;; erc-bbdb.el --- Integrating the BBDB into ERC
+;; Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007
+;; 2008 Free Software Foundation, Inc.
+;; Author: Andreas Fuchs <>
+;; Maintainer: Mario Lang <>
+;; This file is part of GNU Emacs.
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;; Commentary:
+;; This mode connects the BBDB to ERC. Whenever a known nick
+;; connects, the corresponding BBDB record pops up. To identify
+;; users, use the irc-nick field. Define it, if BBDB asks you about
+;; that. When you use /WHOIS on a known nick, the corresponding
+;; record will be updated.
+;;; History
+;; Andreas Fuchs <> wrote zenirc-bbdb-whois.el, which was
+;; adapted for ERC by Mario Lang <>.
+;; Changes by Edgar Gonçalves <>
+;; May 31 2005:
+;; - new variable: erc-bbdb-bitlbee-name-field - the field name for the
+;; msn/icq/etc nick
+;; - nick doesn't go the the name. now it asks for an existing record to
+;; merge with. If none, then create a new one with the nick as name.
+;;; Code:
+(require 'erc)
+(require 'bbdb)
+(require 'bbdb-com)
+(require 'bbdb-gui)
+(require 'bbdb-hooks)
+(defgroup erc-bbdb nil
+ "Variables related to BBDB usage."
+ :group 'erc)
+(defcustom erc-bbdb-auto-create-on-whois-p nil
+ "*If nil, don't create bbdb records automatically when a WHOIS is done.
+Leaving this at nil is a good idea, but you can turn it
+on if you want to have lots of People named \"John Doe\" in your BBDB."
+ :group 'erc-bbdb
+ :type 'boolean)
+(defcustom erc-bbdb-auto-create-on-join-p nil
+ "*If nil, don't create bbdb records automatically when a person joins a channel.
+Leaving this at nil is a good idea, but you can turn it
+on if you want to have lots of People named \"John Doe\" in your BBDB."
+ :group 'erc-bbdb
+ :type 'boolean)
+(defcustom erc-bbdb-auto-create-on-nick-p nil
+ "*If nil, don't create bbdb records automatically when a person changes her nick.
+Leaving this at nil is a good idea, but you can turn it
+on if you want to have lots of People named \"John Doe\" in your BBDB."
+ :group 'erc-bbdb
+ :type 'boolean)
+(defcustom erc-bbdb-popup-type 'visible
+ "*If t, pop up a BBDB buffer showing the record of a WHOISed person
+or the person who has just joined a channel.
+If set to 'visible, the BBDB buffer only pops up when someone was WHOISed
+or a person joined a channel visible on any frame.
+If set to nil, never pop up a BBDD buffer."
+ :group 'erc-bbdb
+ :type '(choice (const :tag "When visible" visible)
+ (const :tag "When joining" t)
+ (const :tag "Never" nil)))
+(defcustom erc-bbdb-irc-nick-field 'irc-nick
+ "The notes field name to use for annotating IRC nicknames."
+ :group 'erc-bbdb
+ :type 'symbol)
+(defcustom erc-bbdb-irc-channel-field 'irc-channel
+ "The notes field name to use for annotating IRC channels."
+ :group 'erc-bbdb
+ :type 'symbol)
+(defcustom erc-bbdb-irc-highlight-field 'irc-highlight
+ "The notes field name to use for highlighting a person's messages."
+ :group 'erc-bbdb
+ :type 'symbol)
+(defcustom erc-bbdb-bitlbee-name-field 'bitlbee-name
+ "The notes field name to use for annotating bitlbee displayed name.
+This is the name that a bitlbee (AIM/MSN/ICQ) contact provides as
+their \"displayed name\"."
+ :group 'erc-bbdb
+ :type 'symbol)
+(defcustom erc-bbdb-elide-display nil
+ "*If t, show BBDB popup buffer elided."
+ :group 'erc-bbdb
+ :type 'boolean)
+(defcustom erc-bbdb-electric-p nil
+ "*If t, BBDB popup buffer is electric."
+ :group 'erc-bbdb
+ :type 'boolean)
+(defun erc-bbdb-search-name-and-create (create-p name nick finger-host silent)
+ (let* ((ircnick (cons erc-bbdb-irc-nick-field (concat "^"
+ (regexp-quote nick))))
+ (finger (cons bbdb-finger-host-field (regexp-quote finger-host)))
+ (record (or (bbdb-search (bbdb-records) nil nil nil ircnick)
+ (and name (bbdb-search-simple name nil))
+ (bbdb-search (bbdb-records) nil nil nil finger)
+ (unless silent
+ (bbdb-completing-read-one-record
+ "Merge using record of (C-g to skip, RET for new): "))
+ (when create-p
+ (bbdb-create-internal (or name
+ "John Doe")
+ nil nil nil nil nil)))))
+ ;; sometimes, the record will be a list. I don't know why.
+ (if (listp record)
+ (car record)
+ record)))
+(defun erc-bbdb-show-entry (record channel proc)
+ (let ((bbdb-display-layout (bbdb-grovel-elide-arg erc-bbdb-elide-display))
+ (bbdb-electric-p erc-bbdb-electric-p))
+ (when (and record (or (eq erc-bbdb-popup-type t)
+ (and (eq erc-bbdb-popup-type 'visible)
+ (and channel
+ (or (eq channel t)
+ (get-buffer-window (erc-get-buffer
+ channel proc)
+ 'visible))))))
+ (bbdb-display-records (list record)))))
+(defun erc-bbdb-insinuate-and-show-entry-1 (create-p proc nick name finger-host silent &optional chan new-nick)
+ (let ((record (erc-bbdb-search-name-and-create
+ create-p nil nick finger-host silent))) ;; don't search for a name
+ (when record
+ (bbdb-annotate-notes record (or new-nick nick) erc-bbdb-irc-nick-field)
+ (bbdb-annotate-notes record finger-host bbdb-finger-host-field)
+ (and name
+ (bbdb-annotate-notes record name erc-bbdb-bitlbee-name-field t))
+ (and chan
+ (not (eq chan t))
+ (bbdb-annotate-notes record chan erc-bbdb-irc-channel-field))
+ (erc-bbdb-highlight-record record)
+ (erc-bbdb-show-entry record chan proc))))
+(defun erc-bbdb-insinuate-and-show-entry (create-p proc nick name finger-host silent &optional chan new-nick)
+ ;; run this outside of the IRC filter process, to avoid an annoying
+ ;; error when the user hits C-g
+ (run-at-time 0.1 nil
+ #'erc-bbdb-insinuate-and-show-entry-1
+ create-p proc nick name finger-host silent chan new-nick))
+(defun erc-bbdb-whois (proc parsed)
+ (let (; We could use server name too, probably
+ (nick (second (erc-response.command-args parsed)))
+ (name (erc-response.contents parsed))
+ (finger-host (concat (third (erc-response.command-args parsed))
+ "@"
+ (fourth (erc-response.command-args parsed)))))
+ (erc-bbdb-insinuate-and-show-entry erc-bbdb-auto-create-on-whois-p proc
+ nick name finger-host nil t)))
+(defun erc-bbdb-JOIN (proc parsed)
+ (let* ((sender (erc-parse-user (erc-response.sender parsed)))
+ (nick (nth 0 sender)))
+ (unless (string= nick (erc-current-nick))
+ (let* ((channel (erc-response.contents parsed))
+ (finger-host (concat (nth 1 sender) "@" (nth 2 sender))))
+ (erc-bbdb-insinuate-and-show-entry
+ erc-bbdb-auto-create-on-join-p proc
+ nick nil finger-host t channel)))))
+(defun erc-bbdb-NICK (proc parsed)
+ "Annotate new nick name to a record in case it already exists."
+ (let* ((sender (erc-parse-user (erc-response.sender parsed)))
+ (nick (nth 0 sender)))
+ (unless (string= nick (erc-current-nick))
+ (let* ((finger-host (concat (nth 1 sender) "@" (nth 2 sender))))
+ (erc-bbdb-insinuate-and-show-entry
+ erc-bbdb-auto-create-on-nick-p proc
+ nick nil finger-host t nil (erc-response.contents parsed))))))
+(defun erc-bbdb-init-highlighting-hook-fun (proc parsed)
+ (erc-bbdb-init-highlighting))
+(defun erc-bbdb-init-highlighting ()
+ "Initialize the highlighting based on BBDB fields.
+This function typically gets called on a successful server connect.
+The field name in the BBDB which controls highlighting is specified by
+`erc-bbdb-irc-highlight-field'. Fill in either \"pal\"
+\"dangerous-host\" or \"fool\". They work exactly like their
+counterparts `erc-pals', `erc-dangerous-hosts' and `erc-fools'."
+ (let* ((irc-highlight (cons erc-bbdb-irc-highlight-field
+ ".+"))
+ (matching-records (bbdb-search (bbdb-records)
+ nil nil nil irc-highlight)))
+ (mapcar 'erc-bbdb-highlight-record matching-records)))
+(defun erc-bbdb-highlight-record (record)
+ (let* ((notes (bbdb-record-raw-notes record))
+ (highlight-field (assoc erc-bbdb-irc-highlight-field notes))
+ (nick-field (assoc erc-bbdb-irc-nick-field notes)))
+ (if (and highlight-field
+ nick-field)
+ (let ((highlight-types (split-string (cdr highlight-field)
+ bbdb-notes-default-separator))
+ (nick-names (split-string (cdr nick-field)
+ (concat "\\(\n\\|"
+ bbdb-notes-default-separator
+ "\\)"))))
+ (mapcar
+ (lambda (highlight-type)
+ (mapcar
+ (lambda (nick-name)
+ (if (member highlight-type
+ '("pal" "dangerous-host" "fool"))
+ (add-to-list (intern (concat "erc-" highlight-type "s"))
+ (regexp-quote nick-name))
+ (error (format "\"%s\" (in \"%s\") is not a valid highlight type!"
+ highlight-type nick-name))))
+ nick-names))
+ highlight-types)))))
+;;;###autoload (autoload 'erc-bbdb-mode "erc-bbdb")
+(define-erc-module bbdb nil
+ "In ERC BBDB mode, you can directly interact with your BBDB."
+ ((add-hook 'erc-server-311-functions 'erc-bbdb-whois t)
+ (add-hook 'erc-server-JOIN-functions 'erc-bbdb-JOIN t)
+ (add-hook 'erc-server-NICK-functions 'erc-bbdb-NICK t)
+ (add-hook 'erc-server-376-functions 'erc-bbdb-init-highlighting-hook-fun t))
+ ((remove-hook 'erc-server-311-functions 'erc-bbdb-whois)
+ (remove-hook 'erc-server-JOIN-functions 'erc-bbdb-JOIN)
+ (remove-hook 'erc-server-NICK-functions 'erc-bbdb-NICK)
+ (remove-hook 'erc-server-376-functions 'erc-bbdb-init-highlighting-hook-fun)))
+(provide 'erc-bbdb)
+;;; erc-bbdb.el ends here
+;; Local Variables:
+;; indent-tabs-mode: t
+;; tab-width: 8
+;; coding: utf-8
+;; End:
+;; arch-tag: 1edf3729-cd49-47dc-aced-70fcfc28c815
181 emacs/emacs.d.symlink/prelude/vendor/erc-chess.el
@@ -0,0 +1,181 @@
+;;; erc-chess.el --- CTCP chess playing support for ERC
+;; Copyright (C) 2002, 2004, 2007, 2008 Free Software Foundation, Inc.
+;; Author: Mario Lang <>
+;; Keywords: games, comm
+;; This file is part of GNU Emacs.
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;; Commentary:
+;; This module requires chess.el by John Wiegley.
+;; You need to have chess.el installed (load-path properly set)
+;;; Code:
+(require 'erc)
+(require 'chess-network)
+(require 'chess-display)
+(require 'chess)
+;;;; Variables
+(defgroup erc-chess nil
+ "Playing chess over IRC."
+ :group 'erc)
+(defcustom erc-chess-verbose-flag nil
+ "*If non-nil, inform about bogus CTCP CHESS messages in the server buffer."
+ :group 'erc-chess
+ :type 'boolean)
+(defcustom erc-chess-debug-flag t
+ "*If non-nil, print all chess CTCP messages received in the server buffer."
+ :group 'erc-chess
+ :type 'boolean)
+(defvar erc-ctcp-query-CHESS-hook '(erc-chess-ctcp-query-handler))
+(defvar erc-chess-alist nil
+ "Alist of chess sessions. It has the form of (NICK ENGINE)")
+(make-variable-buffer-local 'erc-chess-alist)
+(defvar erc-chess-regexp-alist chess-network-regexp-alist)
+(defvar erc-chess-partner)
+(make-variable-buffer-local 'erc-chess-partner)
+;;;; Catalog messages
+ 'english
+ '((ctcp-chess-debug . "CTCPchess: %n (%u@%h) sent: '%m'")
+ (ctcp-chess-quit . "Chess game with %n (%u@%h) quit")))
+(defun erc-chess-response-handler (event &rest args)
+ (when (and (eq event 'accept)
+ (eq chess-engine-pending-offer 'match))
+ (let ((display (chess-game-data (chess-engine-game nil) 'display)))
+ (chess-display-enable-popup display)
+ (chess-display-popup display)))
+ (apply 'chess-engine-default-handler event args))
+(defun erc-chess-handler (game event &rest args)
+ "Handle erc-chess events.
+This is the main handler for the erc-chess module."
+ (cond
+ ((eq event 'initialize)
+ (setq erc-chess-partner (car args))
+ (setq erc-server-process (nth 1 args))
+ t)
+ ((eq event 'send)
+ ;; Transmit the string given in `(car args)' to the nick
+ ;; saved in `erc-chess-partner'.
+ (let ((nick erc-chess-partner)
+ (msg (substring (car args) 0 (1- (length (car args))))))
+ (erc-with-server-buffer
+ (erc-send-ctcp-message nick (concat "CHESS " msg) t))))
+ (t
+ (cond
+ ((eq event 'accept)
+ (let ((display (chess-game-data (chess-engine-game nil) 'display)))
+ (chess-display-enable-popup display)
+ (chess-display-popup display)))
+ ((eq event 'destroy)
+ (let* ((buf (process-buffer erc-server-process))
+ (nick (erc-downcase erc-chess-partner))
+ (engine (current-buffer)))
+ (erc-with-server-buffer
+ (let ((elt (assoc nick erc-chess-alist)))
+ (when (and elt (eq (nth 1 elt) engine))
+ (message "Removed from erc-chess-alist in destroy event")
+ (setq erc-chess-alist (delq elt erc-chess-alist))))))))
+ ;; Pass all other events down to chess-network
+ (apply 'chess-network-handler game event args))))
+;;;; Game initialisation
+(defun erc-chess-engine-create (nick)
+ "Initialize a game for a particular nick.
+This function adds to `erc-chess-alist' too."
+ ;; Maybe move that into the connect callback?
+ (let* ((objects (chess-session 'erc-chess t 'erc-chess-response-handler
+ nick erc-server-process))
+ (engine (car objects))
+ (display (cadr objects)))
+ (when engine
+ (if display
+ (chess-game-set-data (chess-display-game display)
+ 'display display))
+ (push (list (erc-downcase nick) engine) erc-chess-alist)
+ engine)))
+;;;; IRC /commands
+(defun erc-cmd-CHESS (line &optional force)
+ "Initiate a chess game via CTCP to NICK.
+NICK should be the first and only arg to /chess"
+ (cond
+ ((string-match (concat "^\\s-*\\(" erc-valid-nick-regexp "\\)\\s-*$") line)
+ (let ((nick (match-string 1 line)))
+ (erc-with-server-buffer
+ (if (assoc (erc-downcase nick) erc-chess-alist)
+ ;; Maybe check for correctly connected game, and switch here.
+ (erc-display-message
+ nil 'notice 'active
+ (concat "Invitation for a game already sent to " nick))
+ (with-current-buffer (erc-chess-engine-create nick)
+ (erc-chess-handler nil 'match)
+ t)))))
+ (t nil)))
+;;; CTCP handler
+(defun erc-chess-ctcp-query-handler (proc nick login host to msg)
+ (if erc-chess-debug-flag
+ (erc-display-message
+ nil 'notice (current-buffer)
+ 'ctcp-chess-debug ?n nick ?m msg ?u login ?h host))
+ (when (string-match "^CHESS\\s-+\\(.*\\)$" msg)
+ (let ((str (concat (match-string 1 msg) "\n"))
+ (elt (assoc (erc-downcase nick) erc-chess-alist)))
+ (if (not elt)
+ (chess-engine-submit (erc-chess-engine-create nick) str)
+ (if (buffer-live-p (nth 1 elt))
+ (chess-engine-submit (nth 1 elt) str)
+ (setq erc-chess-alist (delq elt erc-chess-alist)))))))
+(provide 'erc-chess)
+;;; erc-chess.el ends here
+;; Local Variables:
+;; indent-tabs-mode: t
+;; tab-width: 8
+;; End:
+;; arch-tag: beb148d1-db16-48da-8145-9f3a7ff27b7b
149 emacs/emacs.d.symlink/prelude/vendor/erc-highlight-nicknames.el
@@ -0,0 +1,149 @@
+;;; erc-highlight-nicknames.el --- Highlights nicknames
+;; Copyright (C) 2007 André Riemann
+;; Copyright (C) 2008 Andy Stewart
+;; Author: André Riemann <>
+;; Maintainer: André Riemann <>
+;; Created: 2007-09-25
+;; Keywords: comm, faces
+;; URL:
+;; Compatibility: tested with
+;; * GNU Emacs 23.0 (Erc 5.2, 5.3)
+;; * XEmacs 21.4 (Erc 5.1) (briefly)
+;; Version: 0.4.1
+;; Last-Updated: 2008-12-07
+;; By: Andy Stewart
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;; This file is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the Free
+;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
+;;; Commentary:
+;; To activate this module, put this in your init file
+;; (require 'erc-highlight-nicknames)
+;; and add highlight-nicknames to `erc-modules' by customizing it.
+;; Or put this in your init file
+;; (and
+;; (load-library "erc-highlight-nicknames")
+;; (add-to-list 'erc-modules 'highlight-nicknames)
+;; (erc-update-modules))
+;; Press
+;; M-x customize-face RET erc-highlight-nick-base-face RET
+;; to customize the face that will be added before the color, if you want
+;; for example all the nicks underlined.
+;;; Change Log:
+;; 2008-12-07 Andy Stewart
+;; * There was a bug that function `erc-highlight-nicknames' created
+;; many faces for the same nickname. It would create a new one when
+;; erc inserts text, and didn't care whether a face already existed
+;; for this nickname.
+;; Now I added a hash table `erc-highlight-face-table' to save the
+;; face for a nickname. Faces are now only created, if the nickname
+;; doesn't occur in the hash table.
+;; 2007-12-24 andre-r
+;; * bug fixed in invert-color where color code contained spaces instead
+;; of leading zeros
+;; 2007-12-12 andre-r
+;; * erc-highlight-nick-base-face is by default empty now,
+;; not inherited from `default'
+;; * erc-button-add-face instead of put-text-property
+;; * using `x-color-values' instead of `color-values' since XEmacs
+;; seams to only know the former
+;; 2007-12-12 andre-r
+;; * built in XEmacs-compatible code for text properties by Dave Marquardt
+;; (works both in Emacs and XEmacs)
+;; * changed it a bit so that the face for the text property is derived
+;; from another face (hopefully it still works with XEmacs)
+;; * for that purpose created a new, customizable face
+;; 2007-09-25 andre-r
+;; * inital release
+;; This file is *NOT* part of GNU Emacs.
+;;; Code:
+(require 'erc)
+(require 'erc-button)
+(defface erc-highlight-nick-base-face
+ '((t nil))
+ "Base face used for highlighting nicks in erc. (Before the nick
+color is added)"
+ :group 'erc-faces)
+(defvar erc-highlight-face-table
+ (make-hash-table :test 'equal)
+ "The hash table that contains unique erc nickname faces.")
+(defun hexcolor-luminance (color)
+ "Returns the luminance of color COLOR. COLOR is a string \(e.g.
+\"#ffaa00\", \"blue\"\) `color-values' accepts. Luminance is a
+value of 0.299 red + 0.587 green + 0.114 blue and is always
+between 0 and 255."
+ (let* ((values (x-color-values color))
+ (r (car values))
+ (g (car (cdr values)))
+ (b (car (cdr (cdr values)))))
+ (floor (+ (* 0.299 r) (* 0.587 g) (* 0.114 b)) 256)))
+(defun invert-color (color)
+ "Returns the inverted color of COLOR."
+ (let* ((values (x-color-values color))
+ (r (car values))
+ (g (car (cdr values)))
+ (b (car (cdr (cdr values)))))
+ (format "#%04x%04x%04x"
+ (- 65535 r) (- 65535 g) (- 65535 b))))
+(defun erc-highlight-nicknames ()
+ "Searches for nicknames and highlights them. Uses the first
+twelve digits of the MD5 message digest of the nickname as
+color (#rrrrggggbbbb)."
+ (with-syntax-table erc-button-syntax-table
+ (let (bounds word color new-nick-face)
+ (goto-char (point-min))
+ (while (re-search-forward "\\w+" nil t)
+ (setq bounds (bounds-of-thing-at-point 'word))
+ (setq word (buffer-substring-no-properties
+ (car bounds) (cdr bounds)))
+ (when (erc-get-server-user word)
+ (setq new-nick-face (gethash word erc-highlight-face-table))
+ (unless new-nick-face
+ (setq color (concat "#" (substring (md5 (downcase word)) 0 12)))
+ (if (equal (cdr (assoc 'background-mode (frame-parameters))) 'dark)
+ ;; if too dark for background
+ (when (< (hexcolor-luminance color) 85)
+ (setq color (invert-color color)))
+ ;; if to bright for background
+ (when (> (hexcolor-luminance color) 170)
+ (setq color (invert-color color))))
+ (setq new-nick-face (make-symbol (concat "erc-highlight-nick-" word "-face")))
+ (copy-face 'erc-highlight-nick-base-face new-nick-face)
+ (set-face-foreground new-nick-face color)
+ (puthash word new-nick-face erc-highlight-face-table))
+ (erc-button-add-face (car bounds) (cdr bounds) new-nick-face))))))
+(define-erc-module highlight-nicknames nil
+ "Search through the buffer for nicknames, and highlight."
+ ((add-hook 'erc-insert-modify-hook 'erc-highlight-nicknames t))
+ ((remove-hook 'erc-insert-modify-hook 'erc-highlight-nicknames)))
+(provide 'erc-highlight-nicknames)
+;;; erc-highlight-nicknames.el ends here
416 emacs/emacs.d.symlink/prelude/vendor/erc-list-old.el
@@ -0,0 +1,416 @@
+;;; erc-list-old.el --- Provide a faster channel listing mechanism
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+;; 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2004 Brian Palmer
+;; Author: Mario Lang <>
+;; Keywords: comm
+;; This file is part of ERC.
+;; ERC is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;; ERC is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with ERC; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;; Commentary:
+;; This file provides a simple derived mode for viewing Channel lists.
+;; It also serves as a demonstration of how the new server hook facility
+;; can be used.
+;;; Code:
+(require 'erc)
+(require 'erc-networks)
+(require 'sort)
+(unless (fboundp 'make-overlay)
+ (require 'overlay))
+(eval-when-compile (require 'cl))
+;; User customizable variables.
+(defgroup erc-list-old nil
+ "Display IRC channels in another window when using /LIST"
+ :group 'erc)
+(defcustom erc-chanlist-progress-message t
+ "*Show progress message while accumulating channel list."
+ :group 'erc-list-old
+ :type 'boolean)
+(defcustom erc-no-list-networks nil
+ "*A list of network names on which the /LIST command refuses to work."
+ :group 'erc-list-old
+ :type '(repeat string))
+(defcustom erc-chanlist-frame-parameters nil
+ "*If nil, the channel list is displayed in a new window; if non-nil,
+this variable holds the frame parameters used to make a frame to
+display the channel list."
+ :group 'erc-list-old
+ :type 'list)
+(defcustom erc-chanlist-hide-modeline nil
+ "*If nil, the channel list buffer has a modeline, otherwise the modeline is hidden."
+ :group 'erc-list-old
+ :type 'boolean)
+(defface erc-chanlist-header-face '((t (:bold t)))
+ "Face used for the headers in erc's channel list."
+ :group 'erc-faces)
+(defface erc-chanlist-odd-line-face '((t (:inverse-video t)))
+ "Face used for the odd lines in erc's channel list."
+ :group 'erc-faces)
+(defface erc-chanlist-even-line-face '((t (:inverse-video nil)))
+ "Face used for the even lines in erc's channel list."
+ :group 'erc-faces)
+(defface erc-chanlist-highlight '((t (:foreground "red")))
+ "Face used to highlight the current line in the channel list."
+ :group 'erc-faces)
+;; This should perhaps be a defface that inherits values from the highlight face
+;; but xemacs does not support inheritance
+(defcustom erc-chanlist-highlight-face 'erc-chanlist-highlight
+ "Face used for highlighting the current line in a list."
+ :type 'face
+ :group 'erc-faces)
+;; All variables below this line are for internal use only.
+(defvar erc-chanlist-channel-line-regexp "^\\([#&\\*][^ \t\n]*\\)\\s-+[0-9]+"
+ "Regexp that matches a channel line in the channel list buffer.")
+(defvar erc-chanlist-buffer nil)
+(make-variable-buffer-local 'erc-chanlist-buffer)
+(defvar erc-chanlist-last-time 0
+ "A time value used to throttle the progress indicator.")
+(defvar erc-chanlist-frame nil
+ "The frame displaying the most recent channel list buffer.")
+(defvar erc-chanlist-sort-state 'channel
+ "The sort mode of the channel list buffer. Either 'channel or 'users.")
+(make-variable-buffer-local 'erc-chanlist-sort-state)
+(defvar erc-chanlist-highlight-overlay nil
+ "The overlay used for erc chanlist highlighting")
+(make-variable-buffer-local 'erc-chanlist-highlight-overlay)
+;; Define erc-chanlist-mode.
+(defcustom erc-chanlist-mode-hook nil
+ "Hook run by erc-chanlist-mode."
+ :group 'erc-list-old
+ :type 'hook)
+(define-derived-mode erc-chanlist-mode fundamental-mode "ERC Channel List"
+ "Mode for viewing a channel list of a particular server.
+ (local-set-key "\C-c\C-j" 'erc-join-channel)
+ (local-set-key "j" 'erc-chanlist-join-channel)
+ (local-set-key "n" 'next-line)
+ (local-set-key "p" 'previous-line)
+ (local-set-key "q" 'erc-chanlist-quit)
+ (local-set-key "s" 'erc-chanlist-toggle-sort-state)
+ (local-set-key "t" 'toggle-truncate-lines)
+ (setq erc-chanlist-sort-state 'channel)
+ (setq truncate-lines t)
+ (add-hook 'post-command-hook 'erc-chanlist-post-command-hook 'append 'local))
+;; Define module:
+;;;###autoload (autoload 'erc-list-old-mode "erc-list-old")
+(define-erc-module list nil
+ "List channels nicely in a separate buffer."
+ ((defalias 'erc-cmd-LIST 'erc-list-channels))
+ ((defalias 'erc-cmd-LIST 'erc-list-channels-simple)))
+;; Functions.
+(defun erc-list-channels (&rest channel)
+ "Display a buffer containing a list of channels on the current server.
+Optional argument CHANNEL specifies a single channel to list (instead of every
+available channel)."
+ (interactive
+ (remove "" (split-string
+ (read-from-minibuffer "List channels (RET for all): ") " ")))
+ (if (and (null channel)
+ (erc-member-ignore-case (erc-network-name) erc-no-list-networks))
+ (erc-display-line "ERC is configured not to allow the /LIST command on this network!"
+ (current-buffer))
+ (erc-display-line (erc-make-notice (concat "Listing channel"
+ (if channel
+ "."
+ "s. This may take a while."))))
+ (erc-chanlist channel))
+ t)
+(defun erc-list-channels-simple (&optional line)
+ "Send the LIST command to the current server with optional channels LINE."
+ (when (string-match "^\\s-*\\(.*\\)$" line)
+ (let ((channels (match-string 1 line)))
+ (erc-log (format "cmd: LIST: %s" channels))
+ (erc-server-send
+ (if (string= channels "")
+ "LIST"
+ (concat "LIST :" channels))))
+ t))
+(put 'erc-list-channels-simple 'do-not-parse-args t)
+(defun erc-chanlist (&optional channels)
+ "Show a channel listing of the current server in a special mode.
+Please note that this function only works with IRC servers which conform
+to RFC and send the LIST header (#321) at start of list transmission."
+ (interactive)
+ (erc-with-server-buffer
+ (erc-once-with-server-event
+ 321
+ '(progn
+ (add-hook 'erc-server-322-functions 'erc-chanlist-322 nil t)
+ (erc-once-with-server-event
+ 323
+ '(progn
+ (remove-hook 'erc-server-322-functions 'erc-chanlist-322 t)
+ (let ((buf erc-chanlist-buffer))
+ (if (not (buffer-live-p buf))
+ (error "`erc-chanlist-buffer' does not refer to a live buffer"))
+ (set-buffer buf)
+ (buffer-disable-undo)
+ (let (buffer-read-only
+ (sort-fold-case t))
+ (sort-lines nil (point-min) (point-max))
+ (setq erc-chanlist-sort-state 'channel)
+ (let ((sum (count-lines (point-min) (point-max))))
+ (goto-char (point-min))
+ (insert (substitute-command-keys
+ (concat "'\\[erc-chanlist-toggle-sort-state]' toggle sort mode.\n"
+ "'\\[erc-chanlist-quit]' kill this buffer.\n"
+ "'\\[toggle-truncate-lines]' toggle line truncation.\n"
+ "'\\[erc-chanlist-join-channel]' join the channel listed on the current line.\n\n")))
+ (insert (format "%d channels (sorted by %s).\n\n"
+ sum (if (eq erc-chanlist-sort-state 'channel)
+ "channel name"
+ "number of users"))))
+ (insert (format "%-25s%5s %s\n------------------------ ----- ----------------------------\n"
+ "Channel"
+ "Users"
+ "Topic"))
+ ;; Display the channel list buffer.
+ (if erc-chanlist-frame-parameters
+ (progn
+ (if (or (null erc-chanlist-frame)
+ (not (frame-live-p erc-chanlist-frame)))
+ (setq erc-chanlist-frame
+ (make-frame `((name . ,(format "Channels on %s"
+ erc-session-server))
+ ,@erc-chanlist-frame-parameters))))
+ (select-frame erc-chanlist-frame)
+ (switch-to-buffer buf)
+ (erc-prettify-channel-list))
+ (pop-to-buffer buf)
+ (erc-prettify-channel-list))))
+ (goto-char (point-min))
+ (search-forward-regexp "^------" nil t)
+ (forward-line 1)
+ (erc-chanlist-highlight-line)
+ (message "")
+ t))
+ (setq erc-chanlist-buffer (get-buffer-create
+ (format "*Channels on %s*"
+ (erc-response.sender parsed))))
+ (with-current-buffer erc-chanlist-buffer
+ (setq buffer-read-only nil)
+ (erase-buffer)
+ (erc-chanlist-mode)
+ (setq erc-server-process proc)
+ (if erc-chanlist-hide-modeline
+ (setq mode-line-format nil))
+ (setq buffer-read-only t))
+ t))
+ ;; Now that we've setup our callbacks, pull the trigger.
+ (if (interactive-p)
+ (message "Collecting channel list for server %s" erc-session-server))
+ (erc-server-send (if (null channels)
+ "LIST"
+ (concat "LIST "
+ (mapconcat #'identity channels ","))))))
+(defun erc-chanlist-322 (proc parsed)
+ "Process an IRC 322 message.
+The message carries information about one channel for the LIST
+ (multiple-value-bind (channel num-users)
+ (cdr (erc-response.command-args parsed))
+ (let ((topic (erc-response.contents parsed)))
+ (with-current-buffer erc-chanlist-buffer
+ (save-excursion
+ (goto-char (point-max))
+ (let (buffer-read-only)
+ (insert (format "%-26s%4s %s\n" (erc-controls-strip channel)
+ num-users
+ (erc-controls-strip topic))))
+ ;; Maybe display a progress indicator in the minibuffer.
+ (when (and erc-chanlist-progress-message
+ (> (erc-time-diff
+ erc-chanlist-last-time (erc-current-time))
+ 3))
+ (setq erc-chanlist-last-time (erc-current-time))
+ (message "Accumulating channel list ... %c"
+ (aref [?/ ?| ?\\ ?- ?! ?O ?o] (random 7))))
+ ;; Return success to prevent other hook functions from being run.
+ t)))))
+(defun erc-chanlist-post-command-hook ()
+ "Keep the current line highlighted."
+ (ignore-errors
+ (save-excursion
+ (beginning-of-line)
+ (if (looking-at erc-chanlist-channel-line-regexp)
+ (erc-chanlist-highlight-line)
+ (erc-chanlist-dehighlight-line)))))
+(defun erc-chanlist-highlight-line ()
+ "Highlight the current line."
+ (unless erc-chanlist-highlight-overlay
+ (setq erc-chanlist-highlight-overlay
+ (make-overlay (point-min) (point-min)))
+ ;; Detach it from the buffer.
+ (delete-overlay erc-chanlist-highlight-overlay)
+ (overlay-put erc-chanlist-highlight-overlay
+ 'face erc-chanlist-highlight-face)
+ ;; Expressly put it at a higher priority than the text
+ ;; properties used for faces later on. Gnu emacs promises that
+ ;; right now overlays are higher priority than text properties,
+ ;; but why take chances?
+ (overlay-put erc-chanlist-highlight-overlay 'priority 1))
+ (move-overlay erc-chanlist-highlight-overlay (point) (1+ (point-at-eol))))
+(defun erc-chanlist-dehighlight-line ()
+ "Remove the line highlighting."
+ (delete-overlay erc-chanlist-highlight-overlay))
+(defun erc-prettify-channel-list ()
+ "Make the channel list buffer look pretty.
+When this function runs, the current buffer must be the channel
+list buffer, or it does nothing."
+ (if (eq major-mode 'erc-chanlist-mode)
+ (save-excursion
+ (let ((inhibit-read-only t))
+ (goto-char (point-min))
+ (when (search-forward-regexp "^-------" nil t)
+ (add-text-properties
+ (point-min) (1+ (point-at-eol)) '(face erc-chanlist-header-face))
+ (forward-line 1))
+ (while (not (eobp))
+ (add-text-properties
+ (point) (1+ (point-at-eol)) '(face erc-chanlist-odd-line-face))
+ (forward-line 1)
+ (unless (eobp)
+ (add-text-properties
+ (point) (1+ (point-at-eol)) '(face erc-chanlist-even-line-face)))
+ (forward-line 1))))))
+(defun erc-chanlist-toggle-sort-state ()
+ "Toggle the channel list buffer sorting method.
+Either sort by channel names or by number of users in each channel."
+ (interactive)
+ (let ((inhibit-read-only t)
+ (sort-fold-case t))
+ (save-excursion
+ (goto-char (point-min))
+ (search-forward-regexp "^-----" nil t)
+ (forward-line 1)
+ (unless (eobp)
+ (if (eq erc-chanlist-sort-state 'channel)
+ (progn
+ (sort-numeric-fields 2 (point) (point-max))
+ (reverse-region (point) (point-max))
+ (setq erc-chanlist-sort-state 'users))
+ (sort-lines nil (point) (point-max))
+ (setq erc-chanlist-sort-state 'channel))
+ (goto-char (point-min))
+ (if (search-forward-regexp "^[0-9]+ channels (sorted by \\(.*\\)).$"
+ nil t)
+ (replace-match (if (eq erc-chanlist-sort-state 'channel)
+ "channel name"
+ "number of users")
+ nil nil nil 1))
+ (goto-char (point-min))
+ (search-forward-regexp "^-----" nil t)
+ (forward-line 1)
+ (recenter -1)
+ (erc-prettify-channel-list)))))
+(defun erc-chanlist-quit ()
+ "Quit Chanlist mode.
+Kill the channel list buffer, window, and frame (if there's a frame
+devoted to the channel list)."
+ (interactive)
+ (kill-buffer (current-buffer))
+ (if (eq (selected-frame) erc-chanlist-frame)
+ (delete-frame)
+ (delete-window)))
+(defun erc-chanlist-join-channel ()
+ "Join the channel listed on the current line of the channel list buffer.
+Private channels, which are shown as asterisks (*), are ignored."
+ (interactive)
+ (save-excursion
+ (beginning-of-line)
+ (when (looking-at erc-chanlist-channel-line-regexp)
+ (let ((channel-name (match-string 1)))
+ (when (and (stringp channel-name)
+ (not (string= channel-name "*")))
+ (run-at-time 0.5 nil 'erc-join-channel channel-name))))))
+(provide 'erc-list-old)
+;;; erc-list-old.el ends here
+;; Local Variables:
+;; indent-tabs-mode: t
+;; tab-width: 8
+;; End:
+;; arch-tag: 4a13196a-a61b-465a-9926-044dfbc7e5ff
416 emacs/emacs.d.symlink/prelude/vendor/erc-nicklist.el
@@ -0,0 +1,416 @@
+;;; erc-nicklist.el --- Display channel nicknames in a side buffer.
+;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Filename: erc-nicklist.el
+;; Author: Lawrence Mitchell <>
+;; Created: 2004-04-30
+;; Keywords: IRC chat client Internet
+;; This file is part of GNU Emacs.
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;; Commentary:
+;; This provides a minimal mIRC style nicklist buffer for ERC. To
+;; activate, do M-x erc-nicklist RET in the channel buffer you want
+;; the nicklist to appear for. To close and quit the nicklist
+;; buffer, do M-x erc-nicklist-quit RET from within the nicklist buffer.
+;; TODO:
+;; o Somehow associate nicklist windows with channel windows so they
+;; appear together, and if one gets buried, then the other does.
+;; o Make "Query" and "Message" work.
+;; o Prettify the actual list of nicks in some way.
+;; o Add a proper erc-module that people can turn on and off, figure
+;; out a way of creating the nicklist window at an appropriate time
+;; --- probably in `erc-join-hook'.
+;; o Ensure XEmacs compatibility --- the mouse-menu support is likely
+;; broken.
+;; o Add option to display in a separate frame --- will again need to
+;; be able to associate the nicklist with the currently active
+;; channel buffer or something similar.
+;; o Allow toggling of visibility of nicklist via ERC commands.
+;;; History:
+;; Changes by Edgar Gonçalves <>
+;; Jun 25 2005:
+;; - images are changed to a standard set of names.
+;; - /images now contain gaim's status icons.
+;; May 31 2005:
+;; - tooltips are improved. they try to access bbdb for a nice nick!
+;; Apr 26 2005:
+;; - erc-nicklist-channel-users-info was fixed (sorting bug)
+;; - Away names don't need parenthesis when using icons
+;; Apr 26 2005:
+;; - nicks can display icons of their connection type (msn, icq, for now)
+;; Mar 15 2005:
+;; - nicks now are different for unvoiced and op users
+;; - nicks now have tooltips displaying more info
+;; Mar 18 2005:
+;; - queries now work ok, both on menu and keyb shortcut RET.
+;; - nicklist is now sorted ignoring the case. Voiced nicks will
+;; appear according to `erc-nicklist-voiced-position'.
+;;; Code:
+(require 'erc)
+(condition-case nil
+ (require 'erc-bbdb)
+ (error nil))
+(eval-when-compile (require 'cl))
+(defgroup erc-nicklist nil
+ "Display a list of nicknames in a separate window."
+ :group 'erc)
+(defcustom erc-nicklist-use-icons t
+ "*If non-nil, display an icon instead of the name of the chat medium.
+By \"chat medium\", we mean IRC, AOL, MSN, ICQ, etc."
+ :group 'erc-nicklist
+ :type 'boolean)
+(defcustom erc-nicklist-icons-directory
+ (let ((dir (locate-library "erc-nicklist.el")))
+ (when dir
+ (concat (file-name-directory dir) "images/")))
+ "*Directory of the PNG files for chat icons.
+Icons are displayed if `erc-nicklist-use-icons' is non-nil."
+ :group 'erc-nicklist
+ :type 'directory)
+(defcustom erc-nicklist-voiced-position 'bottom
+ "*Position of voiced nicks in the nicklist.
+The value can be `top', `bottom' or nil (don't sort)."
+ :group 'erc-nicklist
+ :type '(choice
+ (const :tag "Top" top)
+ (const :tag "Bottom" bottom)
+ (const :tag "Mixed" nil)))
+(defcustom erc-nicklist-window-size 20.0
+ "*The size of the nicklist window.
+This specifies a percentage of the channel window width.
+A negative value means the nicklist window appears on the left of the
+channel window, and vice versa."
+ :group 'erc-nicklist
+ :type 'float)
+(defun erc-nicklist-buffer-name (&optional buffer)
+ "Return the buffer name for a nicklist associated with BUFFER.
+If BUFFER is nil, use the value of `current-buffer'."
+ (format " *%s-nicklist*" (buffer-name (or buffer (current-buffer)))))
+(defun erc-nicklist-make-window ()
+ "Create an ERC nicklist window.
+See also `erc-nicklist-window-size'."
+ (let ((width (floor (* (window-width) (/ erc-nicklist-window-size 100.0))))
+ (buffer (erc-nicklist-buffer-name))
+ window)
+ (split-window-horizontally (- width))
+ (setq window (next-window))
+ (set-window-buffer window (get-buffer-create buffer))
+ (with-current-buffer buffer
+ (set-window-dedicated-p window t))))
+(defvar erc-nicklist-images-alist '()
+ "Alist that maps a connection type to an icon.")
+(defun erc-nicklist-insert-medium-name-or-icon (host channel is-away)
+ "Inserts an icon or a string identifying the current host type.
+This is configured using `erc-nicklist-use-icons' and
+ ;; identify the network (for bitlebee usage):
+ (let ((bitlbee-p (save-match-data
+ (string-match "\\`&bitlbee\\b"
+ (buffer-name channel)))))
+ (cond ((and bitlbee-p
+ (string= "" host))
+ (if erc-nicklist-use-icons
+ (if is-away
+ (insert-image (cdr (assoc 'icq-away
+ erc-nicklist-images-alist)))
+ (insert-image (cdr (assoc 'icq
+ erc-nicklist-images-alist))))
+ (insert "ICQ")))
+ (bitlbee-p
+ (if erc-nicklist-use-icons
+ (if is-away
+ (insert-image (cdr (assoc 'msn-away
+ erc-nicklist-images-alist)))
+ (insert-image (cdr (assoc 'msn
+ erc-nicklist-images-alist))))
+ (insert "MSN")))
+ (t
+ (if erc-nicklist-use-icons
+ (if is-away
+ (insert-image (cdr (assoc 'irc-away
+ erc-nicklist-images-alist)))
+ (insert-image (cdr (assoc 'irc
+ erc-nicklist-images-alist))))
+ (insert "IRC"))))
+ (insert " ")))
+(defun erc-nicklist-search-for-nick (finger-host)
+ "Return the bitlbee-nick field for this contact given FINGER-HOST.
+Seach for the BBDB record of this contact. If not found, return nil."
+ (when (boundp 'erc-bbdb-bitlbee-name-field)
+ (let ((record (car
+ (erc-member-if
+ #'(lambda (r)
+ (let ((fingers (bbdb-record-finger-host r)))
+ (when fingers
+ (string-match finger-host
+ (car (bbdb-record-finger-host r))))))
+ (bbdb-records)))))
+ (when record
+ (bbdb-get-field record erc-bbdb-bitlbee-name-field)))))
+(defun erc-nicklist-insert-contents (channel)
+ "Insert the nicklist contents, with text properties and the optional images."
+ (setq buffer-read-only nil)
+ (erase-buffer)
+ (dolist (u (erc-nicklist-channel-users-info channel))
+ (let* ((server-user (car u))
+ (channel-user (cdr u))
+ (nick (erc-server-user-nickname server-user))
+ (host (erc-server-user-host server-user))
+ (login (erc-server-user-login server-user))
+ (full-name(erc-server-user-full-name server-user))
+ (info (erc-server-user-info server-user))
+ (channels (erc-server-user-buffers server-user))
+ (op (erc-channel-user-op channel-user))
+ (voice (erc-channel-user-voice channel-user))
+ (bbdb-nick (or (erc-nicklist-search-for-nick
+ (concat login "@" host))
+ ""))
+ (away-status (if voice "" "\n(Away)"))
+ (balloon-text (concat bbdb-nick (if (string= "" bbdb-nick)
+ "" "\n")
+ "Login: " login "@" host
+ away-status)))
+ (erc-nicklist-insert-medium-name-or-icon host channel (not voice))
+ (unless (or voice erc-nicklist-use-icons)
+ (setq nick (concat "(" nick ")")))
+ (when op
+ (setq nick (concat nick " (OP)")))
+ (insert (erc-propertize nick
+ 'erc-nicklist-nick nick
+ 'mouse-face 'highlight
+ 'erc-nicklist-channel channel
+ 'help-echo balloon-text)
+ "\n")))
+ (erc-nicklist-mode))
+(defun erc-nicklist ()
+ "Create an ERC nicklist buffer."
+ (interactive)
+ (let ((channel (current-buffer)))
+ (unless (or (not erc-nicklist-use-icons)
+ erc-nicklist-images-alist)
+ (setq erc-nicklist-images-alist
+ `((msn . ,(create-image (concat erc-nicklist-icons-directory
+ "msn-online.png")))
+ (msn-away . ,(create-image (concat erc-nicklist-icons-directory
+ "msn-offline.png")))
+ (irc . ,(create-image (concat erc-nicklist-icons-directory
+ "irc-online.png")))
+ (irc-away . ,(create-image (concat erc-nicklist-icons-directory
+ "irc-offline.png")))
+ (icq . ,(create-image (concat erc-nicklist-icons-directory
+ "icq-online.png")))
+ (icq-away . ,(create-image (concat erc-nicklist-icons-directory
+ "icq-offline.png"))))))