;; 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 "") ;; 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*" ;; - 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)