Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
483 lines (405 sloc) 16.8 KB

Starter Kit Misc

This is part of the Emacs Starter Kit.

Stuff to do:

  • [ ] set font sizes for each system
  • [ ] change cursor to line
  • [ ] matlab-load
  • [ ] anything (bring to git)
  • [ ] generalize eshell prompt for nix

Starter Kit Misc

Things that don’t fit anywhere else.

System type defun

;; Check if system is Mac

;; Check if system is gnu/linux
(defun system-type-is-gnu ()
  "Return true if system is GNU/Linux-based"
  (string-equal system-type "gnu/linux"))

Sentences and tabs and newlines

(setq sentence-end-double-space nil)
(setq-default tab-width 4)
(defun toggle-final-newline ()
  "Toggle value of variable require-final-newline"
  (if require-final-newline
        (setq require-final-newline nil)
        (message "nil"))
      (setq require-final-newline t)
      (message "t"))))

(setq require-final-newline nil)

Color Themes

The Color Themes package provides support for changing, saving, sharing Emacs color themes. To view and apply color themes available on your system run M-x color-theme-select. See the color theme website and EmacsWiki pages for more information.

This following loads color-theme so that it is available by default.

(add-to-list 'load-path
             (expand-file-name "color-theme"
                               (expand-file-name "src" dotfiles-dir)))

(add-to-list 'load-path
             (expand-file-name "zenburn-emacs"
                               (expand-file-name "src" dotfiles-dir)))
(require 'color-theme)
(require 'zenburn)
(eval-after-load "color-theme"

;; (color-theme-railscasts)

Once you’ve selected a preferred color theme it can be installed by adding its function to your initialization. For example


will load the railscasts color theme when Emacs starts.

Font Size

Set the font size to a bearable one:

(set-face-attribute 'default nil :height 150)

Window system stuff

(when window-system
  (setq frame-title-format '(buffer-file-name "%f" ("%b")))
  (tooltip-mode -1)
  (tool-bar-mode -1)
  (blink-cursor-mode t)
  (mouse-wheel-mode t))

(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

(setq visible-bell 0
      echo-keystrokes 0.1
      font-lock-maximum-decoration t
      inhibit-startup-message t
      transient-mark-mode t
      color-theme-is-global t
      delete-by-moving-to-trash t
      shift-select-mode nil
      truncate-partial-width-windows nil
      uniquify-buffer-name-style 'forward
      whitespace-style '(trailing lines space-before-tab
                                  indentation space-after-tab)
      whitespace-line-column 100
      ediff-window-setup-function 'ediff-setup-windows-plain
      oddmuse-directory (concat dotfiles-dir "oddmuse")
      xterm-mouse-mode t
      save-place-file (concat dotfiles-dir "places"))

Nxhtml – utilities for we development

Nxhtml is a large package of utilities for web development and for embedding multiple major modes in a single buffer.

Nxhtml is not installed in this version of the starter-kit by default, for information on installing nxhtml see EmacsWiki-Nxhtml.

Set browser

Set this to whatever browser you use e.g…

;; (setq browse-url-browser-function 'browse-url-firefox)
;; (setq browse-url-browser-function 'browse-default-macosx-browser)
;; (setq browse-url-browser-function 'browse-default-windows-browser)
;; (setq browse-url-browser-function 'browse-default-kde)
;; (setq browse-url-browser-function 'browse-default-epiphany)
;; (setq browse-url-browser-function 'browse-default-w3m)
;; (setq browse-url-browser-function 'browse-url-generic
;;       browse-url-generic-program "~/src/conkeror/conkeror")

Transparently open compressed files

(auto-compression-mode t)

Enable syntax highlighting for older Emacsen that have it off

(global-font-lock-mode t)

No Menu Bar

You really don’t need this; trust me. edit: actually I do

(menu-bar-mode 1)

Save a list of recent files visited.

Matching and highlighting parentheses

When the point is on them.

(show-paren-mode 1)

Keyboard Input

Give me Dvorak or give me death

  (setq default-input-method "english-dvorak")
;  (defadvice switch-to-buffer (after activate-input-method activate) ; dvorak keyboard
;    (activate-input-method "english-dvorak"))
 ;  (add-hook 'org-src-mode-hook 'toggle-input-method)
 ;  (add-hook 'inferior-octave-mode-hook 'toggle-input-method)
 ;  (add-hook 'eshell-mode-hook 'toggle-input-method)
 ;  (add-hook 'comint-mode-hook 'toggle-input-method)

Anything mode and random crap

  ;;; Add new lines
  (setq next-line-add-newlines t)
  (setq history-length 250)
  (setq inhibit-startup-screen t)
  (if (string-match "24" emacs-version) (progn
                      ;; (ns-toggle-fullscreen)
                      (show-paren-mode 1)
                      (cua-mode 1)
                      (cua-selection-mode 1)
                      (setq sentence-end-double-space nil)
  ;; Changes all yes/no questions to y/n type
  (fset 'yes-or-no-p 'y-or-n-p)
  (setq show-paren-delay 0)       ; show the matching parentheses immediately
  (display-time)              ;displays the time in the status bar
  ;; Cursor
  (blink-cursor-mode 1)
  (setq cursor-type 'box)
  ;; recentf
  (setq recentf-save-file (concat dotfiles-dir "/Recent Files.el"))
;; (setq recentf-save-file "~/.emacs.d/Recent Files.el")
;; (add-to-list 'load-path (concat dotfiles-dir "/elpa-to-submit"))
  (recentf-mode 1)
  (setq recentf-max-saved-items 100)
  ;; visual line mode
  (dolist (hook '(c-mode-hook))
    (add-hook hook (lambda () (visual-line-mode 0))))
  (dolist (hook '(tex-mode-hook))
    (add-hook hook (lambda () (visual-line-mode 0))))
  (dolist (hook '(org-mode-hook))
    (add-hook hook (lambda () (visual-line-mode 0))))
  (global-visual-line-mode 1)
  (auto-fill-mode 0)
  ;; spell check
  (setq-default ispell-program-name "aspell")
  ;; hooks
  ;; (dolist (hook '(text-mode-hook))
  ;;   (add-hook hook (lambda () (flyspell-mode 1))))
  (dolist (hook '(text-mode-hook))
    (add-hook hook (lambda () (auto-fill-mode 0))))
  (dolist (hook '(org-mode-hook))
    (add-hook hook (lambda () (auto-fill-mode 0))))
  (dolist (hook '(change-log-mode-hook log-edit-mode-hook))
    (add-hook hook (lambda () (flyspell-mode -1))))
  (add-hook 'c-mode-common-hook 'flyspell-prog-mode)
  (add-hook 'tcl-mode-hook 'flyspell-prog-mode)
  (defun turn-on-flyspell ()
     "Force flyspell-mode on using a positive arg.  For use in hooks."
     (flyspell-mode 1))
  (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)
  (add-hook 'org-mode-hook 'visual-line-mode)
  (add-hook 'text-mode-hook 'paragraph-indent-minor-mode)
  (defun fill-sentence ()
      (or (eq (point) (point-max)) (forward-char))
      (forward-sentence -1)
      (let ((beg (point)))
        (if (equal "LaTeX" (substring mode-name (string-match "LaTeX" mode-name)))
            (LaTeX-indent-line beg (point))
            ;; (LaTeX-fill-region-as-paragraph beg (point))
          (fill-region-as-paragraph beg (point))))))
  ;;===Kill Ring===
  ;; Use C-c y for kill ring popup
  (global-set-key "\C-cy" '(lambda ()
                 (popup-menu 'yank-menu)))
  (when (require 'browse-kill-ring nil 'noerror)
  ;; M-y key binding will activate browse-kill-ring
  (setq browse-kill-ring-quit-action 'save-and-restore)
  ;; initial modes
  (setq initial-major-mode 'org-mode)
  (setq default-major-mode 'org-mode)
    (add-hook 'c-mode-common-hook '(lambda ()
                                     ;; ac-omni-completion-sources is made buffer local so
                                     ;; you need to add it to a mode hook to activate on 
                                     ;; whatever buffer you want to use it with.  This
                                     ;; example uses C mode (as you probably surmised).
                                     ;; auto-complete.el expects ac-omni-completion-sources to be
                                     ;; a list of cons cells where each cell's car is a regex
                                     ;; that describes the syntactical bits you want AutoComplete
                                     ;; to be aware of. The cdr of each cell is the source that will
                                     ;; supply the completion data.  The following tells autocomplete
                                     ;; to begin completion when you type in a . or a ->
                                     (add-to-list 'ac-omni-completion-sources
                                                  (cons "\\." '(ac-source-semantic)))
                                     (add-to-list 'ac-omni-completion-sources
                                                  (cons "->" '(ac-source-semantic)))
                                     ;; ac-sources was also made buffer local in new versions of
                                     ;; autocomplete.  In my case, I want AutoComplete to use 
                                     ;; semantic and yasnippet (order matters, if reversed snippets
                                     ;; will appear before semantic tag completions).
                                     (setq ac-sources '(ac-source-semantic ac-source-yasnippet ac-source-words-in-all-buffer))
    (add-hook 'LaTeX-mode-hook '(lambda ()
                                  (add-to-list 'ac-omni-completion-sources
                                               (cons "\\." '(ac-source-semantic)))
                                  (add-to-list 'ac-omni-completion-sources
                                               (cons "->" '(ac-source-semantic)))
                                  (setq ac-sources '(ac-source-semantic ac-source-yasnippet ac-source-words-in-all-buffer))
  ;;  (setq ac-modes (append ac-modes '(LaTeX/FMPS-mode)))
  ;;  (setq ac-modes (append ac-modes '(LaTeX-mode)))

ido mode

ido-mode is like magic pixie dust!

(when (> emacs-major-version 21)
  (ido-mode t)
  (setq ido-enable-prefix nil
        ido-enable-flex-matching t
        ido-create-new-buffer 'always
        ido-use-filename-at-point t
        ido-max-prospects 10))

;;; But it sucks when it auto-searches and I don't want it to
;; disable auto searching for files unless called explicitly
(setq ido-auto-merge-delay-time 99999)

(define-key ido-file-dir-completion-map (kbd "C-c C-s") 
    (ido-initiate-auto-merge (current-buffer))))

(defun ido-goto-symbol (&optional symbol-list)
      "Refresh imenu and jump to a place in the buffer using Ido."
      (unless (featurep 'imenu)
        (require 'imenu nil t))
       ((not symbol-list)
        (let ((ido-mode ido-mode)
               (if (boundp 'ido-enable-flex-matching)
                   ido-enable-flex-matching t))
              name-and-pos symbol-names position)
          (unless ido-mode
            (ido-mode 1)
            (setq ido-enable-flex-matching t))
          (while (progn
                   (setq imenu--index-alist nil)
                   (ido-goto-symbol (imenu--make-index-alist))
                   (setq selected-symbol
                         (ido-completing-read "Symbol? " symbol-names))
                   (string= (car imenu--rescan-item) selected-symbol)))
          (unless (and (boundp 'mark-active) mark-active)
            (push-mark nil t nil))
          (setq position (cdr (assoc selected-symbol name-and-pos)))
           ((overlayp position)
            (goto-char (overlay-start position)))
            (goto-char position)))))
       ((listp symbol-list)
        (dolist (symbol symbol-list)
          (let (name position)
             ((and (listp symbol) (imenu--subalist-p symbol))
              (ido-goto-symbol symbol))
             ((listp symbol)
              (setq name (car symbol))
              (setq position (cdr symbol)))
             ((stringp symbol)
              (setq name symbol)
              (setq position
                    (get-text-property 1 'org-imenu-marker symbol))))
            (unless (or (null position) (null name)
                        (string= (car imenu--rescan-item) name))
              (add-to-list 'symbol-names name)
              (add-to-list 'name-and-pos (cons name position))))))))


(set-default 'indent-tabs-mode nil)
(set-default 'indicate-empty-lines t)
(set-default 'imenu-auto-rescan t)

(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; (add-hook 'text-mode-hook 'turn-on-flyspell)

(defvar coding-hook nil
  "Hook that gets run on activation of any programming mode.")

(defalias 'yes-or-no-p 'y-or-n-p)
(random t) ;; Seed the random-number generator

possible issues/resolutions with flyspell

Most of the solution came from EmacsWiki-FlySpell. Here is one possible fix.

Emacs set path to aspell

it’s possible aspell isn’t in your path

(setq exec-path (append exec-path '("/opt/local/bin")))

Emacs specify spelling program

  • This didn’t work at first, possibly because cocoAspell was building its dictionary. Now it seems to work fine.
(setq ispell-program-name "aspell"
      ispell-dictionary "english"
      (let ((default '("[A-Za-z]" "[^A-Za-z]" "[']" nil
                       ("-B" "-d" "english" "--dict-dir"
                        "/Library/Application Support/cocoAspell/aspell6-en-6.0-0")
                       nil iso-8859-1)))
        `((nil ,@default)
          ("english" ,@default))))

Hippie expand: at times perhaps too hip

(delete 'try-expand-line hippie-expand-try-functions-list)
(delete 'try-expand-list hippie-expand-try-functions-list)

Don’t clutter up directories with files~

(setq backup-directory-alist `(("." . ,(expand-file-name
                                        (concat dotfiles-dir "backups")))))

Associate modes with file extensions

(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
(add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . js2-mode))
;; (add-to-list 'auto-mode-alist '("\\.xml$" . nxml-mode))

Default to unified diffs

(setq diff-switches "-u")


(eval-after-load 'diff-mode
     (set-face-foreground 'diff-added "green4")
     (set-face-foreground 'diff-removed "red3")))

(eval-after-load 'magit
     (set-face-foreground 'magit-diff-add "green3")
     (set-face-foreground 'magit-diff-del "red3")))