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

226 lines
7.7 KiB
Plaintext
Raw Normal View History

;; Date: Aug 19, 2010
;; Author: Collin J. Doering
;; Description: Emacs configuration file (in emacs lisp)
;; 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)
;; bind M-g to M-x goto-line
(global-set-key "\M-g" 'goto-line)
;; 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)
;; 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)))
;; linum-modes is a list of mode hooks to instantiate linum-mode on
(defvar linum-modes '(scheme-mode-hook emacs-lisp-mode-hook c-mode-hook c++-mode-hook python-mode-hook lua-mode-hook haskell-mode-hook php-mode-hook perl-mode-hook lisp-mode-hook ruby-mode-hook sh-mode-hook))
(activate-mode-with-hooks (lambda () (linum-mode 1)) linum-modes)
;; load color-theme and initialize
(require 'color-theme)
(color-theme-initialize)
;; use a global color theme
(color-theme-tty-dark)
;; make color-theme not applied globally and not cumunitive
;;(setq color-theme-is-cumulative nil)
;;(setq color-theme-is-global nil)
;; given a frame colorizes the frame
;; if its window-system is X Windows the tty-dark theme will be applied otherwise it will be colorized tty-dark
;;(defun apply-color-theme (frame)
;; (select-frame frame)
;; (if (eq (window-system frame) 'x)
;; (color-theme-tty-dark)
;; (color-theme-tty-dark)))
;; add the apply-color-theme function (hook) to be executed on the creation of a new frame
;;(add-hook 'after-make-frame-functions 'apply-color-theme)
;; Set default tramp method to ssh (for security purposes)
(setq tramp-default-method "ssh")
;; Setup ibuffer (interactive buffer)
(global-set-key "\C-x\C-b" 'ibuffer)
(autoload 'ibuffer "ibuffer" "List buffers." t)
;; Require ibuffer extentions (used for ibuffer-never-show-predicates)
(require 'ibuf-ext)
(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/.*\\*$")
;; Filter ibuffers (similar to gnus)
(setq ibuffer-saved-filter-groups
(quote (("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 . "^\\.screenrc$")
(name . "^\\.xbindkeysrc$")))
("code" (or
(mode . c-mode)
(mode . c++-mode)
(mode . perl-mode)
(mode . python-mode)
(mode . ruby-mode)
(mode . emacs-lisp-mode)
(mode . lisp-mode)
(mode . sh-mode)
(mode . scheme-mode)
(mode . php-mode)
(mode . xml-mode)))
("REPL" (or
(mode . geiser-mode)
(mode . slime-repl-mode)
(name . "^\\*inferior-lisp\\*$")
(name . "^\\* Racket REPL \\*$")))
("planner" (or
(name . "^\\*Calendar\\*$")
(name . "^diary$")
(mode . muse-mode)))
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
("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 html renderer w3m
(require 'w3m-load)
(setq browse-url-browser-function 'w3m-browse-url)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)
;; setup php-mode
(autoload 'php-mode "php-mode.el" "Php mode." t)
(setq auto-mode-alist (append '(("/*.\.php[345]?$" . php-mode)) auto-mode-alist))
;; Set default lisp program
(setq inferior-lisp-program "/usr/bin/sbcl")
;; Set usable lisp implementations
(setq slime-lisp-implementations
'((sbcl ("/usr/bin/sbcl" ""))
(clisp ("/usr/bin/clisp" "-K full"))))
;; Function to start and/or connect to slime
(defun start-slime ()
(unless (slime-connected-p)
(save-excursion (slime))))
;; Setup slime mode
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
(require 'slime)
(add-hook 'slime-mode-hook 'start-slime)
(slime-setup '(slime-fancy))
;; 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
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
;; Setup emacs-haskell-mode
(load "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file")
(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)
;; Setup emacs-python-mode
(autoload 'python-mode "/usr/share/emacs/site-lisp/python-mode.el" "Python mode." t)
(setq auto-mode-alist (append '(("/*.\.py$" . python-mode)) auto-mode-alist))
;; Setup emacs-lua-mode
(setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)
;; Setup emacs-erlang-mode
(setq erlang-root-dir "/usr/lib/erlang")
(setq exec-path (cons "/usr/lib/erlang/bin" exec-path))
(require 'erlang-start)
;; Setup enhanced scheme/racket mode consisting of geiser, quack and paredit
(require 'geiser-install)
;(require 'quack)
(require 'paredit)
(defvar paredit-hooks '(lisp-mode-hook lisp-interaction-mode-hook scheme-mode-hook c-mode-hook c++-mode-hook python-mode-hook))
(activate-mode-with-hooks (lambda () (paredit-mode 1)) paredit-hooks)
;; 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))
;; 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)
;; 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))))
;; Force ediff sessions to run in the same frame
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
;; Remove menu-bar
(menu-bar-mode -1)
;; Remove tool-bar
(tool-bar-mode -1)