This repository has been archived on 2022-12-11. You can view files and clone it, but cannot push or open issues or pull requests.
dot-files/.emacs

1084 lines
45 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;; Date: Aug 19, 2010
;; Author: Collin J. Doering
;; Description: Emacs configuration file (in emacs lisp)
;; TODO: clean up backages (prefer ELPA to AUR and archlinux packages); also denote which
;; source is being used after require or autoload sexp's.
;; E.g (require 'pkg) ;; PKG_SRC
;; (autoload ...) ;; PKG_SRC
;; For packages that are installed through the ELPA (and thus they are loaded
;; auto-magically) that do not require any changes to this file (.emacs) and/or
;; are changed using customize simply note (in a comment) at the beginning of this file
;; the package
;; ELPA packages that do not require modification of this file other then Customize
;; * psgml
;; * caml (required by tuareg)
;; * tuareg
;; * project-mode
;; * register-list
;; ELPA packages configured explicitly below:
;; * php-mode
;; * python-mode
;; * ipython
;; * lua-mode
;; * erlang
;; * clojure-mode
;; * ..more
;; TODO: document and cleanup file; specifically remove requires and autoloads of packages
;; that are autoloaded by package.el's package-initialize. Also ensure that each
;; file type and respective mode are added to auto-mode-alist along with a call to
;; autoload to give the user documentation. Eg:
;; (autoload 'foo-mode "foo" "Some documentation." t)
;; (add-to-list 'auto-mode-alist '("\\.foo\\'" . foo-mode))
;; Set repos for package.el
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")
("ELPA" . "http://tromey.com/elpa/")))
;; This needs to be a the start of ~/.emacs since package-initialize is run after the user
;; init file is read but before after-init-hook. It autoloads packages installed by
;; package.el including updating the load-path and running/loading/requiring
;; pkgname-autoload.el for all packages (where pkgname is replaced with the appropriate
;; package name). To disable package.el's autoloading functionality use:
;; (setq package-enabled-at-startup nil)
;; The reason to use package-initialize here is so one can modify the installed modules
;; later in this .emacs file but still retain the autoloading functionality of package.el
(package-initialize)
;; stop renaming of saved files to filename~ which ends up breaking hardlinks
(setq backup-by-copying-when-linked t)
;; Turn off indentation (use spaces instead)
(setq-default indent-tabs-mode nil)
;; Turn on electric-indent-mode
(electric-indent-mode 1)
;; Single spaces denote end sentences for use with sentence commands
(setq sentence-end-double-space nil)
;; Show column number in status bar
(column-number-mode)
;; Set the fill-column for text filling
(setq fill-column 95)
;; fixes color output issues; see: http://wiki.archlinux.org/index.php/Emacs#Colored_output_issues
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
;; Automatically open some config files with an associated major mode
;; Note: regexp's used to match buffer filenames are intentionally left
;; unbounded (without '$') to catch cases where the filename may
;; take the format: filename~
(add-to-list 'auto-mode-alist '("\\.conkerorrc" . js-mode))
(add-to-list 'auto-mode-alist '("\\.xmobarrc" . haskell-mode))
(add-to-list 'auto-mode-alist '("\\.screenrc" . conf-mode))
(add-to-list 'auto-mode-alist '("\\.stumpwmrc" . lisp-mode))
(add-to-list 'auto-mode-alist '("\w*\\.service" . conf-mode))
(add-to-list 'auto-mode-alist '("\w*\\.socket" . conf-mode))
(add-to-list 'auto-mode-alist '("\\.mpdconf" . conf-mode))
(add-to-list 'auto-mode-alist '("dunstrc" . conf-mode))
;; Load ~/.emacs.d/site-list-extra which contains various .el files
;; that aren't (yet) available through packages
(add-to-list 'load-path "~/.emacs.d/site-lisp-extra")
;; Define some alias' for commonly M-x'ed commands
(defalias 'run-sql 'sql-product-interactive)
;; bind M-g to M-x goto-line *DEPRECIATED*
;; "M-g was made a prefix by RMS in 2005. goto-line has been bound to M-g g and M-g M-g. XueFuqiao"
;; See: http://www.emacswiki.org/emacs/EmacsNiftyTricks
;;(global-set-key "\M-g" 'goto-line)
;; Make C-x O cycle backwards a pane (oposite to C-x o)
(global-set-key "\C-xO" #'(lambda ()
(interactive)
(other-window -1)))
;; Setup browse-key-ring
(require 'browse-kill-ring) ;; ELPA
(global-set-key "\C-cy" 'browse-kill-ring)
;; adds the given function mode to each element of the given-hooks
(defun activate-mode-with-hooks (mode given-hooks)
(while given-hooks
(add-hook (car given-hooks)
mode)
(setq given-hooks (cdr given-hooks))))
;; linum mode for pretty line numbering
(require 'linum) ;; Built-in
;; right justify the numbers and add a space between them and the text in the given buffer
(setq linum-format
(lambda (line)
(propertize (format
(let ((w (length (number-to-string
(count-lines (point-min) (point-max))))))
(concat "%" (number-to-string w) "d "))
line)
'face 'linum)))
;; code-modes is a list of mode hooks (for programming langs only)
(defvar code-modes '(sml-mode-hook scheme-mode-hook emacs-lisp-mode-hook c-mode-hook c++-mode-hook python-mode-hook lua-mode-hook python-mode-hook haskell-mode-hook php-mode-hook perl-mode-hook lisp-mode-hook clojure-mode-hook ruby-mode-hook erlang-mode-hook sh-mode-hook java-mode-hook scala-mode-hook js-mode-hook))
;; activate linum-mode in all buffers used for programming
(activate-mode-with-hooks (lambda () (linum-mode 1)) code-modes)
;; activate flyspell-prog-mode for all buffers used for programming
(activate-mode-with-hooks 'flyspell-prog-mode code-modes)
;; use flyspell-mode in 'non-code' text like modes (Eg. org-mode, markup modes and magit-log-edit-mode)
(activate-mode-with-hooks 'flyspell-mode '(text-mode-hook markdown-mode-hook latex-mode-hook org-mode-hook magit-log-edit-mode-hook mu4e-compose-mode-hook))
;; Enjoy a game of Sudoku on some downtime
(require 'sudoku) ;; ELPA
;; Add collection of themes path
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
;; Use the built-in theming in emacs 24
(load-theme 'manoj-transparent t)
;; On the creation of each frame checks whether it is a XWindow and if so sets
;; the background to black and the foreground to WhiteSmoke
;; (add-hook 'after-make-frame-functions
;; (lambda (frames)
;; (select-frame frame)
;; (if window-system (progn
;; (set-background-color "black")
;; (set-foreground-color "WhiteSmoke")))))
;; Set default tramp method to ssh (for security purposes)
(setq tramp-default-method "ssh")
;; Set the prompt pattern tramp searches for in order to send commands to the remote shell
(setq tramp-shell-prompt-pattern "^[^$>\n]*[#$%>] *\\(\[[0-9;]*[a-zA-Z] *\\)*")
;; Setup ibuffer (interactive buffer)
(global-set-key "\C-x\C-b" 'ibuffer)
(autoload 'ibuffer "ibuffer" "List buffers." t)
;; Setup ido-mode
(ido-mode t)
;; Require ibuffer extentions (used for ibuffer-never-show-predicates)
(require 'ibuf-ext) ;; Built-in
(add-to-list 'ibuffer-never-show-predicates "^\\*slime-events\\*$")
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions\\*$")
(add-to-list 'ibuffer-never-show-predicates "^\\*tramp/.*\\*$")
;; Enable ibuffer-vc extension
;; TODO: enable along side my pre existing filter groups using (ibuffer-vc-generate-filter-groups-by-vc-root).
;; This cannot be done in the ibuffer-saved-filters because ibuffer-vc-generate... returns a list of cons
;; cells but we need this to be dynamic (use a hook like ibuffer-load-hook)
(require 'ibuffer-vc)
;; Filter ibuffers (similar to gnus)
(setq ibuffer-saved-filter-groups
'(("default"
("dired" (mode . dired-mode))
("config" (or
(name . "^\\.xinitrc")
(name . "^\\.bashrc")
(name . "^\\.bash_profile")
(name . "^\\.zshrc")
(name . "^xmonad\\.hs")
(name . "^\\.emacs")
(name . "^\\.gnus")
(name . "^\\.xmobarrc")
(name . "^\\.Xdefaults")
(name . "^\\.Xresources")
(name . "^\\.screenrc")
(name . "^\\.xbindkeysrc")
(name . "^\\.racketrc")
(name . "^\\.ghci")
(name . "\w*\\.service")
(name . "\w*\\.socket")
(name . "^dunstrc")
(name . "^\\.mpdconf")
(name . "^\\.conkerorrc")))
("markup" (or
(mode . xml-mode)
(mode . html-mode)
(mode . haml-mode)
(mode . markdown-mode)
(mode . latex-mode)))
("code" (or
(mode . c-mode)
(mode . c++-mode)
(mode . perl-mode)
(mode . lua-mode)
(mode . clojure-mode)
(mode . java-mode)
(mode . python-mode)
(mode . ruby-mode)
(mode . emacs-lisp-mode)
(mode . lisp-mode)
(mode . sh-mode)
(mode . scheme-mode)
(mode . haskell-mode)
(mode . scala-mode)
(mode . php-mode)
(mode . css-mode)
(mode . sass-mode)
(mode . scss-mode)
(mode . js-mode)
(mode . sql-mode)))
("REPL" (or
(mode . geiser-repl-mode)
(mode . slime-repl-mode)
(mode . inferior-python-mode)
(mode . ipython-mode)
(mode . inferior-haskell-mode)
(mode . inferior-lisp-mode)
(mode . eshell-mode)
(mode . inferior-scheme-mode)
(mode . inferior-tcl)
(mode . erlang-shell-mode)
(mode . sql-interactive-mode)))
("git" (or
(name . "^\\*magit: .*\\*$") ;; this regxp could be better
(mode . magit-mode)
(mode . magit-diff-mode)
(mode . magit-log-mode)
(mode . magit-commit-mode)
(mode . magit-log-mode)
(mode . magit-wazzup-mode)
(mode . magit-process-mode)))
("bookmarks" (or
(name . "^\\*Bookmark List\\*$")))
("help" (or
(mode . help-mode)
(mode . apropos-mode)
(mode . info-mode)
(mode . man-mode)))
("messages" (or
(name . "^\\*geiser messages\\*$")
(name . "^\\*Shell Command Output\\*$")))
("planner" (or
(name . "^\\*Calendar\\*$")
(name . "^diary$")
(mode . muse-mode)))
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")
(name . "^\\*Backtrace\\*$")
(name . "^\\*Compile-Log\\*$")
(mode . ediff-meta-mode)
(mode . browse-kill-ring-mode)
(mode . package-menu-mode)
(mode . compilation-mode)))
("org" (or
(mode . org-mode)
(name . "^\\.org$")
(name . "^\\.org.gpg$")))
("mu4e" (or
(mode . mu4e-main-mode)
(mode . mu4e-compose-mode)
(mode . mu4e-headers-mode)
(mode . mu4e-view-mode)
(name . "^mu4e-update$")
(name . "^\\*trace of SMTP session to .*\\*$")))
("gnus" (or
(mode . message-mode)
(mode . bbdb-mode)
(mode . mail-mode)
(mode . gnus-group-mode)
(mode . gnus-summary-mode)
(mode . gnus-article-mode)
(name . "^\\.bbdb$")
(name . "^\\.newsrc-dribble"))))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-switch-to-saved-filter-groups "default")))
;; Setup oauth2 (required by google-contacts)
(require 'oauth2-autoloads) ;; ELPA
;; Setup google-contact
(require 'google-contacts) ;; AUR: emacs-google-contacts
(require 'google-contacts-gnus) ;; AUR: emacs-google-contacts
;; Setup nav
(require 'nav) ;; ELPA
(nav-disable-overeager-window-splitting)
(global-set-key "\C-cn" 'nav-toggle)
;; setup html renderer w3m and external browser conkeror
(require 'w3m-load) ;; AUR: emacs-w3m-cvs
(setq browse-url-browser-function 'w3m-browse-url
browse-url-generic-program "conkeror"
w3m-use-cookies t)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)
;; setup magit for git (being used though elpa [auto-loaded])
;;(require 'magit) ;; ELPA
(global-set-key "\C-xS" 'magit-status)
(setq magit-commit-signoff t)
;;setup vc-darcs ;; ELPA
(add-to-list 'vc-handled-backends 'DARCS)
(autoload 'vc-darcs-find-file-hook "vc-darcs")
(add-hook 'find-file-hooks 'vc-darcs-find-file-hook)
;; Setup PKGBUILD mode ;; Community (archlinux)
(autoload 'pkgbuild-mode "pkgbuild-mode.el" "PKGBUILD mode." t)
(setq auto-mode-alist (append '(("/PKGBUILD$" . pkgbuild-mode)) auto-mode-alist))
;; setup php-mode
(autoload 'php-mode "php-mode.el" "Php mode." t) ;; ELPA
(setq auto-mode-alist (append '(("/*.\.php[345]?$" . php-mode)) auto-mode-alist))
;; Setup sql-mode (use mysql instead of ansi)
(setq sql-product 'mysql)
;; Setup zencoding-mode
(require 'emmet-mode)
;; Disable C-j keybinding set by zencoding-mode and replace it with 'C-c j'
(define-key emmet-mode-keymap "\C-j" nil)
(define-key emmet-mode-keymap "\C-cj" 'emmet-expand-line)
;; Add appropriate hooks to sgml-mode
(add-hook 'sgml-mode-hook 'emmet-mode) ;; Auto-start on any markup modes
(add-hook 'css-mode-hook 'emmet-mode) ;; enable Emmet's css abbreviation.
(add-hook 'emmet-mode-hook (lambda () (setq emmet-indentation 2))) ;; indent 2 spaces.
;; Setup mmm-mode for multiple mode regions in the same buffer
(require 'mmm-mode)
;;(setq mmm-global-mode 'maybe)
;; Set default lisp program
(setq inferior-lisp-program "/usr/bin/sbcl")
;; Since there is no support for the kawa implementation of scheme
(defun run-kawa ()
"Run Kawa Scheme in an Emacs buffer."
(interactive)
(require 'cmuscheme) ;; Built-in
(let ((scheme-program-name "/usr/bin/kawa"))
(run-scheme scheme-program-name)))
;; Set usable lisp implementations
(setq slime-lisp-implementations
'((sbcl ("/usr/bin/sbcl" ""))
(clisp ("/usr/bin/clisp" "-K base"))
(clojure ("/usr/bin/clj" ""))))
;; Function to start and/or connect to slime
(defun start-slime ()
(interactive)
(unless (slime-connected-p)
(save-excursion (slime))))
;; Setup slime mode *TODO* drop in slime from ELPA
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
(require 'slime) ;; AUR: emacs-slime-cvs
(slime-setup '(slime-fancy))
;; Setup swank-clojure-mode
(add-to-list 'load-path "/usr/share/emacs/site-lisp/swank-clojure")
(require 'swank-clojure) ;; ELPA
(add-hook 'clojure-mode-hook
'(lambda ()
(define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)
(define-key clojure-mode-map "\C-x\C-e" 'lisp-eval-last-sexp)))
;; TODO: functionality needs to be re-written; assoc library obsolete
;; (eval-after-load "slime"
;; `(progn
;; (require 'assoc) ;; Built-in (OBSOLETE)
;; (setq swank-clojure-classpath
;; (list "/usr/share/clojure/clojure.jar"
;; "/usr/share/clojure/clojure-contrib.jar"
;; "/usr/share/emacs/site-lisp/swank-clojure/src"))
;; (aput 'slime-lisp-implementations 'clojure
;; (list (swank-clojure-cmd) :init 'swank-clojure-init))))
;; Setup Auctex
(load "auctex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)
(add-hook 'LaTeX-mode-hook 'visual-line-mode)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(require 'tex)
(TeX-global-PDF-mode t)
;; Setup emacs-org-mode
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(add-hook 'org-mode-hook 'turn-on-font-lock) ; not needed when global-font-lock-mode is on
(setq org-return-follows-link t
org-log-done 'time
org-src-fontify-natively t
org-enforce-todo-dependencies t)
;; Enable org-mode capture
(setq org-default-notes-file "~/.org/notes.org") ;; (concat org-directory "/notes.org"))
(define-key global-map "\C-cc" 'org-capture)
(setq org-capture-templates
'(("t" "General Todo" entry
(file+olp "~/.org/notes.org" "Notes" "Tasks" "General")
"* TODO %?\n %i\n" :kill-buffer)
("f" "Todo in current file" entry
(file+olp "~/.org/notes.org" "Notes" "Tasks" "Per-File")
"* TODO %? %i\n See: %a")
("r" "Remember something" entry
(file+olp "~/.org/notes.org" "Notes" "Things to Remember")
"* %?" :kill-buffer)
("j" "Journal" entry
(file+datetree "~/.org/notes.org")
"* %?\nEntered on %U\n %i\n %a" :kill-buffer)))
;; Add additional languages for org-babel (now part of org-mode)
(org-babel-do-load-languages
'org-babel-load-languages
'((haskell . t)))
;; Set keybindings for org-mode
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
;; Setup coq-mode ;; AUR: coq
(require 'coq)
;; Setup haskell-mode ;; ELPA
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)
;; Set inferior haskell default executable
(setq haskell-program-name "/usr/bin/ghci")
;; Setup hlint ;; ELPA
;; (require 'flymake-hlint)
;; (add-hook 'haskell-mode-hook 'flymake-hlint-load)
;; Setup ghc (requires ghc-mod from cabal) ;; ELPA
(autoload 'ghc-init "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init)))
;; Setup ensime ;; AUR
(add-to-list 'load-path "/usr/share/ensime/elisp")
(add-to-list 'exec-path "/usr/share/ensime")
(require 'ensime)
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; Setup python-mode auto-required by package.el (ELPA)
(setq auto-mode-alist (append '(("/*.\.py$" . python-mode)) auto-mode-alist))
;; Setup ipython-mode
;; (setq py-python-command "/usr/bin/ipython")
(require 'ipython) ;; ELPA
;; Setup emacs-lua-mode
(setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist)) ;; ELPA
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)
;; Setup emacs-erlang-mode (ELPA)
(setq erlang-root-dir "/usr/lib/erlang")
(setq exec-path (cons "/usr/lib/erlang/bin" exec-path))
(setq auto-mode-alist (append '(("\.erl$" . erlang-mode)) auto-mode-alist))
;; Setup enhanced scheme/racket mode consisting of geiser, quack and paredit
;; Setup geiser
(require 'geiser) ;; ELPA
;; Setup auto-completion for geiser (ELPA)
(require 'ac-geiser)
(add-hook 'geiser-mode-hook 'ac-geiser-setup)
(add-hook 'geiser-repl-mode-hook 'ac-geiser-setup)
(eval-after-load "auto-complete"
'(add-to-list 'ac-modes 'geiser-repl-mode))
;; Make struct stand out in scheme-mode for racket
(defun racket-faces ()
(font-lock-add-keywords nil
'(("(struct \\(\\sw+\\)" 1 font-lock-function-name-face)
("(\\(struct\\)" 1 font-lock-keyword-face)
("(\\(λ\\)" 1 font-lock-keyword-face))))
(add-hook 'scheme-mode-hook 'racket-faces)
(add-hook 'geiser-repl-mode-hook 'racket-faces)
;; Setup scribble mode (custom .el from ~/.emacs.d/site-lisp-extra)
;; See: http://www.neilvandyke.org/scribble-emacs/
(require 'scribble)
;; Setup quack
(require 'quack) ;; ELPA
;; Setup paredit
(require 'paredit) ;; ELPA
(defvar lispy-langs-hooks '(lisp-mode-hook lisp-interaction-mode-hook emacs-lisp-mode-hook scheme-mode-hook c-mode-hook c++-mode-hook python-mode-hook geiser-repl-mode-hook))
;; Apply paredit-mode to modes listed in lispy-langs-hooks
(activate-mode-with-hooks (lambda () (paredit-mode 1)) lispy-langs-hooks)
;; Highlight sexp's in lispy languages
(activate-mode-with-hooks (lambda () (highlight-sexp-mode)) lispy-langs-hooks)
;; Paredit binds to C-j globally and thus disables the binding to
;; eval-print-last-sexp in emacs-lisp-mode (e.g *scratch*, etc..)
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(define-key emacs-lisp-mode-map "\C-xj" 'eval-print-last-sexp)))
;; Match paren's in given modes [to apply globally do (show-paren-mode 1)]
(activate-mode-with-hooks (lambda () (show-paren-mode)) lispy-langs-hooks)
;; Highlight paren's near point
(require 'highlight-parentheses)
(activate-mode-with-hooks (lambda () (highlight-parentheses-mode)) lispy-langs-hooks)
;; Setup rainbow-delimiters
(require 'rainbow-delimiters) ;; ELPA
(global-rainbow-delimiters-mode)
;; Setup rainbow-mode ;; ELPA
(require 'rainbow-mode)
(add-hook 'css-mode-hook 'rainbow-mode)
;; upcomming functionallity: toggle paredit-mode due to annoying things like wrapping parens when a mistake is made
;; known issue..if paredit-mode is turned on when there are unbalanced parens an error is reported
(defun toggle-paredit-mode ()
(let ((active-minor-modes (list)))
(mapatoms (lambda (sym)
(when (and (symbolp sym) (assq sym minor-mode-alist) (symbol-value sym))
(push sym active-minor-modes))))
(if (member 'paredit-mode active-minor-modes) (paredit-mode -1) (paredit-mode 1))))
(setq geiser-repl-use-other-window nil)
(setq geiser-active-implementations '(racket guile))
;; setup pastebin.el for use with pastebin.com *BROKEN*
;(require 'pastebin) ;; ELPA
;; yasnippet, auto-complete-mode and flyspell do not play nicely with one another due to
;; a conflict with the context of their tab binding *OLD*
;; hideshow-org being depreciated in my config due to conflicting key bindings with yasnippet
;; and flyspell *TODO*
;; Make hs-minor-mode act like org-mode for code folding
;;(add-to-list 'load-path "/usr/share/emacs/site-lisp/hideshow-org")
;; (require 'hideshow-org)
;; (global-set-key "\C-ch" 'hs-org/minor-mode)
;; Add automatic activation of hs-org/minor-mode in the below major-modes
;; (add-hook 'c-mode-common-hook 'hs-org/minor-mode)
;; (add-hook 'emacs-lisp-mode-hook 'hs-org/minor-mode)
;; (add-hook 'java-mode-hook 'hs-org/minor-mode)
;; (add-hook 'lisp-mode-hook 'hs-org/minor-mode)
;; (add-hook 'sh-mode-hook 'hs-org/minor-mode)
;; (add-hook 'python-mode-hook 'hs-org/minor-mode)
;; (add-hook 'scheme-mode-hook 'hs-org/minor-mode)
;; Setup isearch+
(require 'isearch+)
;; Setup bookmark+
(require 'bookmark+)
;; Setup ace-jump-mode
(autoload
'ace-jump-mode
"ace-jump-mode"
"Emacs quick move minor mode"
t)
(define-key global-map (kbd "C-c SPC") 'ace-jump-mode)
;; Setup expand-region ;; ELPA
(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)
;; Setup multiple-cursons ;; ELPA
(require 'multiple-cursors)
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
;; Setup fancy auto-complete
(require 'auto-complete-config) ;; ELPA
;;(add-to-list 'ac-dictionary-directories "/usr/share/emacs/site-lisp/auto-complete/ac-dict")
(ac-config-default)
;; Set trigger keys so yasnippet and auto-complete play nicely. If tab is pressed and the word at point exists
;; in yasnippet, then yassippet will be used; otherwise auto-complete will be used.
(ac-set-trigger-key "TAB")
(ac-set-trigger-key "<tab>")
;; Setup yasnippet-mode (not yasnippet-bundle)
(require 'yasnippet) ;; ELPA
(yas-load-directory "~/.emacs.d/elpa/yasnippet-20140821.38")
(yas-load-directory "~/.emacs.d/snippets")
(yas-global-mode 1)
;; Enable flyspell-mode
(ac-flyspell-workaround)
;; Known Bug: flyspell-mode doesn't play nice with auto-complete-mode
;;(flyspell-mode)
;; Enable autoinsert feature to automagically insert
(require 'autoinsert) ;; Built-in
(auto-insert-mode) ;;; Adds hook to find-files-hook
(setq auto-insert-directory "~/.emacs.d/templates/") ;;; Or use custom, *NOTE* Trailing slash important
(setq auto-insert-query nil) ;;; If you don't want to be prompted before insertion
(setq autoinsert-tpl-author "Collin J. Doering")
(setq autoinsert-tpl-email "collin.doering@rekahsoft.ca")
;; auto-insert options template and auto-completion
(add-hook 'find-file-hooks 'auto-insert)
(setq auto-insert-directory (concat (getenv "HOME") "/.emacs.d/templates/"))
(setq auto-insert-alist
'(("\\.c$" . ["c-template.c" auto-update-generic-template])
("\\.cc\\|cpp$" . ["cpp-template.cc" auto-update-generic-template])
("\\.php$" . ["php-template.php" auto-update-generic-template])
("\\.rb$" . ["ruby-template.rb" auto-update-generic-template])
("\\.lua$" . ["lua-template.lua" auto-update-generic-template])
("\\.erl$" . ["erlang-template.erl" auto-update-generic-template])
("\\.sh$" . ["shell-template.sh" auto-update-generic-template])
("\\.rkt$" . ["racket-template.rkt" auto-update-generic-template])
("\\.scm$" . ["scheme-template.scm" auto-update-generic-template])
("\\.clj$" . ["clojure-template.clj" auto-update-generic-template])
("\\.lisp$" . ["lisp-template.lisp" auto-update-generic-template])
("\\.el$" . ["emacs-lisp-template.el" auto-update-generic-template])
("\\.hs$" . ["haskell-template.hs" auto-update-generic-template])
("\\.ml$" . ["ocaml-template.ml" auto-update-generic-template])
("\\.sml$" . ["sml-template.sml" auto-update-generic-template])
("\\.py$" . ["python-template.py" auto-update-generic-template])
("\\.java$" . ["java-template.java" auto-update-generic-template])
("\\.scala$" . ["scala-template.scala" auto-update-generic-template])
("\\.htm\\|html$" . ["html-template.html" auto-update-generic-template])
("\\.js$" . ["java-script-template.js" auto-update-generic-template])
("\\.css$" . ["css-template.css" auto-update-generic-template])
("\\.scss$" . ["scss-template.scss" auto-update-generic-template])
("\\.sass$" . ["sass-template.sass" auto-update-generic-template])
("\\.haml$" . ["haml-template.haml" auto-update-generic-template])
("\\.markdown$" . ["markdown-template.markdown" auto-update-generic-template])
("\\.tex$" . ["latex-template.tex" auto-update-generic-template])))
(setq auto-insert 'other)
;; TODO: remove interactive-ness from auto-update-generic-template as it's not needed
;; and there only as a workaround. Python and PHP templates are not filled for
;; some unknown reason.
(defun auto-update-generic-template ()
(interactive)
(save-excursion
;; Replace @!@FILENAME@!@ with file name sans suffix
(while (search-forward "@!@FILENAME@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match (file-name-sans-extension (file-name-nondirectory buffer-file-name)) t))))
(save-excursion
;; Replace @!@FILE@!@ with file name
(while (search-forward "@!@FILE@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match (file-name-nondirectory buffer-file-name) t))))
(save-excursion
;; replace @!@DATE@!@ with today's date
(while (search-forward "@!@DATE@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match "")
(insert-date))))
(save-excursion
;; Replace @!@YEAR@!@ with the current year
(while (search-forward "@!@YEAR@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match (format-time-string "%Y" (current-time))))))
(save-excursion
;; Replace @!@AUTHOR@!@ with the current year
(while (search-forward "@!@AUTHOR@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match "")
(insert-author))))
(save-excursion
;; Replace @!@EMAIL@!@ with the current year
(while (search-forward "@!@EMAIL@!@" nil t)
(save-restriction
(narrow-to-region (match-beginning 0) (match-end 0))
(replace-match "")
(insert-author-email)))))
;; Insert current date at cursor in the currently active buffer
(defun insert-date ()
"Insert today's date into buffer"
(interactive)
(insert (format-time-string "%b %e, %Y" (current-time))))
(defun insert-author ()
"Insert author name at point"
(interactive)
(insert autoinsert-tpl-author))
(defun insert-author-email ()
"Insert author email at point"
(interactive)
(insert autoinsert-tpl-email))
;; (defun open-scratch-buffer ()
;; "Opens the scratch buffer; if none exists creates one."
;; (interactive)
;; (let ((scratch-buffer (get-buffer "*scratch*")))
;; (if (null scratch-buffer) (with-current-buffer (get-buffer-create "*scratch*")
;; (insert initial-scratch-message)
;; (lisp-interaction-mode)))
;; (switch-to-buffer "*scratch*")))
(defvar scratch-buffer-alist '((python-mode . "# This buffer is for notes you don't want to save, and for Lisp evaluation.\n# If you want to create a file, visit that file with C-x C-f,\n# then enter the text in that file's own buffer.")))
(defun open-scratch-buffer (&optional buf-mode buf-name msg)
"Opens a scratch buffer; if none exists creates one. When called with the universal argument (C-u) will ask what mode to use for the scratch buffer."
(interactive
(cond ((equal current-prefix-arg nil) ;; universal argument not called
(list initial-major-mode "*scratch*" initial-scratch-message))
((equal current-prefix-arg '(4)) ;; Universal argument called (C-u)
(let* ((buf-mode (read-command "Mode: " initial-major-mode))
(buf-name (if (equal buf-mode initial-major-mode)
"*scratch*"
(concat "*scratch:" (symbol-name buf-mode) "*")))
(msg ""))
(list buf-mode buf-name msg)))))
(let* ((scratch-buffer (get-buffer buf-name)))
;; check if the scratchpad is open. If not create it, change its mode and insert message text at the top of the buffer
(if (null scratch-buffer)
(with-current-buffer (get-buffer-create buf-name)
(funcall buf-mode)
(insert msg)))
(switch-to-buffer buf-name)))
;; Bind a key to grab a scratchpad
(define-key ctl-x-4-map "s" 'open-scratch-buffer)
;; TODO: make a function to toggle the eshell; given a the universal argument the following can occur:
;; - if numerical then opens the nth scratch buffer "*eshell*<n>"
;; - if no args then open a new eshell
;; Bind a key to switch to eshell
(define-key ctl-x-4-map "e" 'eshell)
;; Toggles windows split orientation of 2 adjecent windows
;; Thanks to http://www.emacswiki.org/cgi-bin/wiki?ToggleWindowSplit
(defun toggle-window-split ()
(interactive)
(if (= (count-windows) 2)
(let* ((this-win-buffer (window-buffer))
(next-win-buffer (window-buffer (next-window)))
(this-win-edges (window-edges (selected-window)))
(next-win-edges (window-edges (next-window)))
(this-win-2nd (not (and (<= (car this-win-edges)
(car next-win-edges))
(<= (cadr this-win-edges)
(cadr next-win-edges)))))
(splitter
(if (= (car this-win-edges)
(car (window-edges (next-window))))
'split-window-horizontally
'split-window-vertically)))
(delete-other-windows)
(let ((first-win (selected-window)))
(funcall splitter)
(if this-win-2nd (other-window 1))
(set-window-buffer (selected-window) this-win-buffer)
(set-window-buffer (next-window) next-win-buffer)
(select-window first-win)
(if this-win-2nd (other-window 1))))))
;; TODO: Modify the below function to accept the universal argument.
;; Specifically an integer argument (n) where:
;; - if negative denotes backwards rotation repeated |n| times
;; - if positive denotes forwards rotation repeated n times
;; - otherwise, no numerical value is given for the universal argument; ignore.
;; Rotates windows
;; Thanks to http://www.emacswiki.org/emacs/TransposeWindows
(defun rotate-windows ()
"Rotate your windows"
(interactive)
(cond
((not (> (count-windows) 1))
(message "You can't rotate a single window!"))
(t
(let ((i 0)
(num-windows (count-windows)))
(while (< i (- num-windows 1))
(let* ((w1 (elt (window-list) i))
(w2 (elt (window-list) (% (+ i 1) num-windows)))
(b1 (window-buffer w1))
(b2 (window-buffer w2))
(s1 (window-start w1))
(s2 (window-start w2)))
(set-window-buffer w1 b2)
(set-window-buffer w2 b1)
(set-window-start w1 s2)
(set-window-start w2 s1)
(setq i (1+ i))))))))
;; Assign keybinding to toggle split orientation of 2 adjacent windows, and to rotate windows
(define-key ctl-x-4-map "t" 'toggle-window-split)
(global-set-key "\C-cr" 'rotate-windows)
;; Force ediff sessions to run in the same frame
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
;; This is now done ine ~/.Xresources
;; Remove menu-bar, tool-bar, and scroll-bars
(menu-bar-mode -1)
;;(tool-bar-mode -1)
;;(scroll-bar-mode -1)
;;(set-default-font "Terminus-12")
;; Stop startup screen
(setq inhibit-startup-screen t)
;; Set some eshell options
(setq eshell-scroll-to-bottom-on-input t)
;; *BROKEN*
;;(setq eshell-scroll-to-bottom-on-output t)
;; Commands that require a little more then a dumb-term
(setq eshell-visual-commands '("vi" "screen" "top" "less" "more" "lynx" "ncftp" "vim" "ncmpcpp" "irssi" "mc" "alsamixer" "/usr/bin/sudo"))
(defun eshell/catbuf (buffer-name)
"Given a buffer-name returns the contents of said buffer"
(interactive "bBuffer: ")
(save-excursion
(let ((code-buf (get-buffer buffer-name)))
(if (null code-buf) (concat "The buffer given \"" buffer-name "\" does not exist")
(set-buffer code-buf)
(buffer-string)))))
(defun eshell/find-file-ext (fp)
"Finds a single file or a list of files matching a regxp and returns a list of their respective buffers"
(interactive)
(if (listp fp) (mapcar #'find-file fp)
(list (find-file fp))))
(defun eshell/ff (fp &rest other-fps)
"A FP is either a file path (relative or absolute) or a regexp which eshell converts to a
list of stings (file paths) which match the regexp (likely using file-expand-widcards).
eshell/ff takes one or more file paths and opens them in the current buffer returning a list
consisting of lists of buffers opened by each respective FP argument."
(interactive)
(mapcar #'eshell/find-file-ext (cons fp other-fps)))
(defun eshell/clear ()
"04Dec2001 - sailor, to clear the eshell buffer."
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)))
;; (add-to-list 'load-path "~/.emacs.d/el-get/el-get")
;; *BROKEN*..can't connect to dbus for some reason?
;; ;; Setup el-get
;; (unless (require 'el-get nil t)
;; (with-current-buffer
;; (url-retrieve-synchronously
;; "https://raw.github.com/dimitri/el-get/master/el-get-install.el")
;; (end-of-buffer)
;; (eval-print-last-sexp)))
;; ;; Synchronize el-get
;; (el-get 'sync)
;; Setup email using mu4e (offlineimap in the background) and smtpmail
(require 'mu4e)
(require 'smtpmail)
(setq mail-user-agent 'mu4e-user-agent
mu4e-get-mail-command "mbsync -a"
mu4e-update-interval 300
mu4e-user-mail-address-list (list "collin.doering@gmail.com" "rekahsoft@gmail.com")
message-kill-buffer-on-exit t
mu4e-use-fancy-chars t
mu4e-sent-messages-behavior 'delete
mu4e-confirm-quit nil
mu4e-headers-date-format "%d/%b/%Y %H:%M" ; date format
message-signature "Collin J. Doering\n\nhttp://rekahsoft.ca\nhttp://blog.rekahsoft.ca\n"
mu4e-compose-signature message-signature
message-signature-insert-empty-line t
mu4e-html2text-command "pandoc -f html -t asciidoc"
mu4e-view-show-images t
mu4e-view-image-max-width 800
;; Default email for smtp and mu4e
user-mail-address "collin.doering@gmail.com"
;; Setup mu4e default sent and draft folders
mu4e-sent-folder "/collin.doering-gmail/[Gmail].Sent"
mu4e-drafts-folder "/collin.doering-gmail/[Gmail].Drafts"
;; Set location of maildir
mu4e-maildir "~/.mail"
;; Setup smtp defaults
user-full-name "Collin J. Doering"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
smtpmail-auth-credentials "~/.authinfo.gpg"
smtpmail-stream-type 'starttls
smtpmail-debug-info t
message-send-mail-function 'smtpmail-send-it)
;; Override default mu4e-bookmarks with custom ones
(setq mu4e-bookmarks
'(("flag:unread AND NOT flag:trashed AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Unread messages" ?u)
("date:today..now AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Today's messages" ?t)
("date:7d..now AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Last 7 days" ?w)
("mime:image/*" "Messages with images" ?p)
;; For collin.doering-gmail maildir
("flag:unread AND maildir:/collin.doering-gmail/INBOX AND NOT flag:trashed AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Unread messages to collin.doering-gmail" ?z)
("date:today..now AND maildir:/collin.doering-gmail/INBOX AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Today's messages to collin.doering-gmail" ?x)
("date:7d..now AND maildir:/collin.doering-gmail/INBOX AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Last 7 days (collin.doering-gmail)" ?c)
("mime:image/* AND maildir:/collin.doering-gmail/INBOX" "Messages with images to collin.doering-gmail" ?v)
;; For rekahsoft-gmail maildir
("flag:unread AND maildir:/rekahsoft-gmail/INBOX AND NOT flag:trashed AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Unread messages to rekahsoft-gmail" ?m)
("date:today..now AND maildir:/rekahsoft-gmail/INBOX AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Today's messages to rekahsoft-gmail" ?,)
("date:7d..now AND maildir:/rekahsoft-gmail/INBOX AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Last 7 days (rekahsoft-gmail)" ?.)
("mime:image/* AND maildir:/rekahsoft-gmail/INBOX" "Messages with images to rekahsoft-gmail" ?/)))
;; TODO: consolidate my-mu4e-account-alist and smtp-accounts
(defvar my-mu4e-account-alist
'(("collin.doering-gmail"
(mu4e-sent-folder "/collin.doering-gmail/[Gmail].Sent")
(mu4e-drafts-folder "/collin.doering-gmail/[Gmail].Drafts")
(user-mail-address "collin.doering@gmail.com"))
("rekahsoft-gmail"
(mu4e-sent-folder "/rekahsoft-gmail/[Gmail].Sent")
(mu4e-drafts-folder "/rekahsoft-gmail/[Gmail].Drafts")
(user-mail-address "rekahsoft@gmail.com"))))
(defun my-mu4e-set-account ()
"Set the account for composing a message."
(let* ((account
(if mu4e-compose-parent-message
(let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
(string-match "/\\(.*?\\)/" maildir)
(match-string 1 maildir))
(completing-read (format "Compose with account: (%s) "
(mapconcat #'(lambda (var) (car var)) my-mu4e-account-alist "/"))
(mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
nil t nil nil (caar my-mu4e-account-alist))))
(account-vars (cdr (assoc account my-mu4e-account-alist))))
(if account-vars
(mapc #'(lambda (var)
(set (car var) (cadr var)))
account-vars)
(error "No email account found"))))
(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account)
;; Attach files using dired using 'C-c RET C-a'
;; Thanks to: http://www.djcbsoftware.nl/code/mu/mu4e/Attaching-files-with-dired.html#Attaching-files-with-dired
(require 'gnus-dired)
;; make the `gnus-dired-mail-buffers' function also work on
;; message-mode derived modes, such as mu4e-compose-mode
(defun gnus-dired-mail-buffers ()
"Return a list of active message buffers."
(let (buffers)
(save-current-buffer
(dolist (buffer (buffer-list t))
(set-buffer buffer)
(when (and (derived-mode-p 'message-mode)
(null message-sent-message-via))
(push (buffer-name buffer) buffers))))
(nreverse buffers)))
(setq gnus-dired-mail-mode 'mu4e-user-agent)
(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
;; Setup mu4e-maildirs-extension
(require 'mu4e-maildirs-extension)
(mu4e-maildirs-extension)
(setq smtp-accounts
'(("collin.doering@gmail.com" "Collin J. Doering" "smtp.gmail.com")
("rekahsoft@gmail.com" "rekahsoft" "smtp.gmail.com")))
(defun my-change-smtp ()
(save-excursion
(loop with from = (save-restriction
(message-narrow-to-headers)
(message-fetch-field "from"))
for (addr fname server) in smtp-accounts
when (string-match addr from)
do (setq user-mail-address addr
user-full-name fname
smtpmail-smtp-server server
smtpmail-smtp-user addr))))
(defadvice smtpmail-via-smtp
(before change-smtp-by-message-from-field (recipient buffer &optional ask) activate)
(with-current-buffer buffer (my-change-smtp)))
(ad-activate 'smtpmail-via-smtp)
;; Set environment variables set by gpg-agent --daemon in ~/.gpg-agent-info
;; TODO: perhaps better error handling if ~/.gpg-agent-info doesn't exist
(mapc (lambda (x) (setenv (car x) (cadr x)))
(with-temp-buffer
(insert-file-contents "~/.gpg-agent-info")
(mapcar (lambda (x) (split-string x "=" t)) (split-string (buffer-string) "\n" t))))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(TeX-command-list (quote (("TeX" "%(PDF)%(tex) %`%S%(PDFout)%(mode)%' %t" TeX-run-TeX nil (plain-tex-mode texinfo-mode ams-tex-mode) :help "Run plain TeX") ("LaTeX" "%`%l%(mode)%' %t" TeX-run-TeX nil (latex-mode doctex-mode) :help "Run LaTeX") ("Makeinfo" "makeinfo %t" TeX-run-compile nil (texinfo-mode) :help "Run Makeinfo with Info output") ("Makeinfo HTML" "makeinfo --html %t" TeX-run-compile nil (texinfo-mode) :help "Run Makeinfo with HTML output") ("AmSTeX" "%(PDF)amstex %`%S%(PDFout)%(mode)%' %t" TeX-run-TeX nil (ams-tex-mode) :help "Run AMSTeX") ("ConTeXt" "texexec --once --texutil %(execopts)%t" TeX-run-TeX nil (context-mode) :help "Run ConTeXt once") ("ConTeXt Full" "texexec %(execopts)%t" TeX-run-TeX nil (context-mode) :help "Run ConTeXt until completion") ("BibTeX" "bibtex %s" TeX-run-BibTeX nil t :help "Run BibTeX") ("Biber" "biber %s" TeX-run-Biber nil t :help "Run Biber") ("View" "zathura %s.pdf" TeX-run-discard-or-function t t :help "Run Viewer") ("Print" "%p" TeX-run-command t t :help "Print the file") ("Queue" "%q" TeX-run-background nil t :help "View the printer queue" :visible TeX-queue-command) ("File" "%(o?)dvips %d -o %f " TeX-run-command t t :help "Generate PostScript file") ("Index" "makeindex %s" TeX-run-command nil t :help "Create index file") ("Check" "lacheck %s" TeX-run-compile nil (latex-mode) :help "Check LaTeX file for correctness") ("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil t :help "Spell-check the document") ("Clean" "TeX-clean" TeX-run-function nil t :help "Delete generated intermediate files") ("Clean All" "(TeX-clean t)" TeX-run-function nil t :help "Delete generated intermediate and output files") ("Other" "" TeX-run-command t t :help "Run an arbitrary command"))))
'(bmkp-last-as-first-bookmark-file "~/.emacs.d/bookmarks")
'(coffee-tab-width 2)
'(confirm-kill-emacs (quote y-or-n-p))
'(custom-safe-themes (quote ("96b54f35e473769a388f12984d735092f9163c63aa6724ee49176d865c46071b" "fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" "b5aaedbcd4d81925c8b2bc21dbed6d0a5a6854b6ad745e948efd55e42b48bd04" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" "36a309985a0f9ed1a0c3a69625802f87dee940767c9e200b89cdebdb737e5b29" "dc8693659115ea453f849f47509b903da3801b5f1521a73fa31556a9a3558517" default)))
'(fill-column 95)
'(geiser-default-implementation (quote racket))
'(geiser-racket-collects (quote ("/usr/share/racket/collects")))
'(hl-sexp-background-color "#19202B")
'(ido-enable-flex-matching t)
'(magit-commit-signoff t t)
'(org-agenda-files (quote ("~/.org/tech/notes.org" "~/.org/todo/rekahsoft-mini-todo.org" "~/.org/todo/rekahsoft-todo.org" "~/.org/todo/general.org" "~/.org/todo/work.org")))
'(quack-default-program "racket")
'(quack-fontify-style (quote plt))
'(quack-programs (quote ("mzscheme" "bigloo" "csi" "csi -hygienic" "gosh" "gracket" "gsi" "gsi ~~/syntax-case.scm -" "guile" "kawa" "mit-scheme" "racket" "racket -il typed/racket" "rs" "scheme" "scheme48" "scsh" "sisc" "stklos" "sxi")))
'(quack-remap-find-file-bindings-p nil)
'(scroll-bar-mode nil)
'(send-mail-function (quote smtpmail-send-it))
'(show-paren-mode t)
'(w3m-content-type-alist (quote (("text/plain" "\\.\\(?:txt\\|tex\\|el\\)\\'" nil nil) ("text/html" "\\.s?html?\\'" ("conkeror" file) nil) ("text/sgml" "\\.sgml?\\'" nil "text/plain") ("text/xml" "\\.xml\\'" nil "text/plain") ("image/jpeg" "\\.jpe?g\\'" ("/usr/bin/display" file) nil) ("image/png" "\\.png\\'" ("/usr/bin/display" file) nil) ("image/gif" "\\.gif\\'" ("/usr/bin/display" file) nil) ("image/tiff" "\\.tif?f\\'" ("/usr/bin/display" file) nil) ("image/x-xwd" "\\.xwd\\'" ("/usr/bin/display" file) nil) ("image/x-xbm" "\\.xbm\\'" ("/usr/bin/display" file) nil) ("image/x-xpm" "\\.xpm\\'" ("/usr/bin/display" file) nil) ("image/x-bmp" "\\.bmp\\'" ("/usr/bin/display" file) nil) ("video/mpeg" "\\.mpe?g\\'" nil nil) ("video/quicktime" "\\.mov\\'" nil nil) ("application/dvi" "\\.dvi\\'" ("xdvi" file) nil) ("application/postscript" "\\.e?ps\\'" ("gs" file) nil) ("application/pdf" "\\.pdf\\'" nil nil) ("application/x-pdf" "\\.pdf\\'" nil nil) ("application/xml" "\\.xml\\'" nil w3m-detect-xml-type) ("application/rdf+xml" "\\.rdf\\'" nil "text/plain") ("application/rss+xml" "\\.rss\\'" nil "text/plain") ("application/xhtml+xml" nil nil "text/html"))) t)
'(yas-prompt-functions (quote (yas-ido-prompt))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(mode-line ((t (:background "grey20" :foreground "#00afff" :box 1 :slant normal :weight normal :height 111 :width normal :foundry "xos4" :family "Terminus"))))
'(mode-line-inactive ((t (:inherit mode-line :background "grey5" :foreground "grey80" :box 1 :slant normal :weight normal :height 111 :width normal :foundry "xos4" :family "Terminus"))))
'(show-paren-match ((t (:background "dark violet")))))
(put 'dired-find-alternate-file 'disabled nil)
(put 'downcase-region 'disabled nil)