|
|
@@ -1,1245 +0,0 @@ |
|
|
#+BABEL: :cache yes |
|
|
|
|
|
#+PROPERTY: header-args :tangle yes :comments no |
|
|
|
|
|
#+TITLE: Emacs Configuration |
|
|
|
|
|
#+AUTHOR: Mitch Tishmack |
|
|
|
|
|
#+STARTUP: hidestars |
|
|
|
|
|
#+STARTUP: odd |
|
|
|
|
|
|
|
|
|
|
|
* readme |
|
|
|
|
|
|
|
|
|
|
|
This is my emacs configuration file. I don't encourage anyone to use this verbatim, |
|
|
|
|
|
but if you wanted to this is how you would do so: |
|
|
|
|
|
|
|
|
|
|
|
*** Clone this repo |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh :tangle no |
|
|
|
|
|
git clone https://github.com/mitchty/dotfiles |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** Preferably backup your emacs configuration |
|
|
|
|
|
|
|
|
|
|
|
Always good to back things up, just in case you hate how I did things. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh :tangle no |
|
|
|
|
|
tar cvf ~/.emacs-backup.tar ~/.emacs.d ~/.emacs |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** Remove/move your old configuration |
|
|
|
|
|
|
|
|
|
|
|
This is up to you to do right, just an example. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh :tangle no |
|
|
|
|
|
rm -fr ~/.emacs.d ~/.emacs |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** Lastly copy necessary files |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh :tangle no |
|
|
|
|
|
mkdir ~/.emacs.d |
|
|
|
|
|
cp dotfiles/init.el dotfiles/emacs.org ~/.emacs.d |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
* prelude |
|
|
|
|
|
|
|
|
|
|
|
Startup related tasks/setup that might be used later on. |
|
|
|
|
|
|
|
|
|
|
|
*** emacs package setup |
|
|
|
|
|
|
|
|
|
|
|
Setup the builtin emacs package manager. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(require 'package) |
|
|
|
|
|
(package-initialize) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
Add in the standard package archive urls. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t) |
|
|
|
|
|
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) |
|
|
|
|
|
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** use-package bootstrap |
|
|
|
|
|
|
|
|
|
|
|
This configuration is using *use-package* extensively. Install it straight away. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(unless (package-installed-p 'use-package) |
|
|
|
|
|
(progn |
|
|
|
|
|
(package-refresh-contents) |
|
|
|
|
|
(package-install 'use-package) |
|
|
|
|
|
(package-initialize))) |
|
|
|
|
|
|
|
|
|
|
|
(require 'use-package) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** match end of string function |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(defun string/ends-with (string suffix) |
|
|
|
|
|
"Return t if STRING ends with SUFFIX." |
|
|
|
|
|
(and (string-match (rx-to-string `(: ,suffix eos) t) |
|
|
|
|
|
string) |
|
|
|
|
|
t) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** always babel tangle and byte compile emacs.org |
|
|
|
|
|
|
|
|
|
|
|
Add a save hook to always tangle and byte compile emacs.org file when we save it. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(defun tangle-init () |
|
|
|
|
|
"If the current buffer is 'emacs.org' the code-blocks are |
|
|
|
|
|
tangled, and the tangled file is compiled." |
|
|
|
|
|
(when (string/ends-with (buffer-file-name) ".emacs.d/emacs.org") |
|
|
|
|
|
(let ((prog-mode-hook nil)) |
|
|
|
|
|
(org-babel-tangle) |
|
|
|
|
|
(byte-compile-file (concat user-emacs-directory "emacs.el"))) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
(add-hook 'after-save-hook 'tangle-init) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** debug on error |
|
|
|
|
|
|
|
|
|
|
|
Not having to start *emacs* with *--debug-init* is useful. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq debug-on-error t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** emacs server |
|
|
|
|
|
|
|
|
|
|
|
Start up the emacs server if it isn't running. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(load "server") |
|
|
|
|
|
(unless (server-running-p) (server-start)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** theme |
|
|
|
|
|
|
|
|
|
|
|
Solarized light is decent. I'll just use that. Note, to prevent flicker this is setup early in startup. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package solarized-theme :ensure t :init (load-theme 'solarized-light 't)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** os detection |
|
|
|
|
|
|
|
|
|
|
|
Make it easier to determine what os we're running on. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(defvar on-mswindows (string-match "windows" (symbol-name system-type)) |
|
|
|
|
|
"Am I running under windows?") |
|
|
|
|
|
(defvar on-osx (string-match "darwin" (symbol-name system-type)) |
|
|
|
|
|
"Am I running under osx?") |
|
|
|
|
|
(defvar on-linux (string-match "gnu/linux" (symbol-name system-type)) |
|
|
|
|
|
"Am I running under linux?") |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** disable pointless startup stuff |
|
|
|
|
|
|
|
|
|
|
|
Like the startup screen and the echo hooey. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(inhibit-startup-screen t) |
|
|
|
|
|
'(inhibit-startup-message t) |
|
|
|
|
|
'(inhibit-startup-echo-area-message t) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** temporary files |
|
|
|
|
|
|
|
|
|
|
|
Keep temporary stuff isolated from everyone else. It infects everything otherwise. As bad as the .DS_Store files on osx. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(temporary-file-directory "/tmp") |
|
|
|
|
|
'(backup-directory-alist `((".*" . ,temporary-file-directory))) |
|
|
|
|
|
'(auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) |
|
|
|
|
|
'(create-lockfiles nil) |
|
|
|
|
|
'(make-backup-files nil) |
|
|
|
|
|
'(auto-save-default nil) |
|
|
|
|
|
'(backup-by-copying t) |
|
|
|
|
|
'(auto-save-list-file-prefix temporary-file-directory) |
|
|
|
|
|
'(backup-directory-alist `((".*" . ,temporary-file-directory))) |
|
|
|
|
|
'(auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** auto revert |
|
|
|
|
|
|
|
|
|
|
|
Update files in open buffers as they're changed on disk, freaking annoying without this on. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables '(global-auto-revert-mode t)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** dired |
|
|
|
|
|
|
|
|
|
|
|
Use dired-x. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'dired-load-hook (function (lambda () (load "dired-x")))) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** ediff |
|
|
|
|
|
|
|
|
|
|
|
For those rare times I use it, make it a bit less derp on output. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq ediff-window-setup-function 'ediff-setup-windows-plain) |
|
|
|
|
|
(setq ediff-split-window-function 'split-window-horizontally) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** always remove trailing whitespace |
|
|
|
|
|
|
|
|
|
|
|
Trailing whitespace is not normally useful. Remove it always on save in the *before-save-hook*. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'before-save-hook 'delete-trailing-whitespace) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** chmod u+x on save for scripts |
|
|
|
|
|
|
|
|
|
|
|
Because its derp to have to chmod 755 stuff after I save. Honestly, do it for me kthxbai. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** misc text related |
|
|
|
|
|
*** line wrap |
|
|
|
|
|
|
|
|
|
|
|
Line wrapping is useful. Enable it globally for a start. |
|
|
|
|
|
|
|
|
|
|
|
Need word-wrap so kill line kills the line, not the displayed line. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(global-visual-line-mode t) |
|
|
|
|
|
(custom-set-variables '(word-wrap t)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** default major mode |
|
|
|
|
|
|
|
|
|
|
|
So if we don't know, call it text-mode. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables '(default-major-mode 'text-mode)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** encoding |
|
|
|
|
|
|
|
|
|
|
|
utf8 is the best. Default to it. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables '(locale-coding-system 'utf-8)) |
|
|
|
|
|
(set-terminal-coding-system 'utf-8) |
|
|
|
|
|
(set-keyboard-coding-system 'utf-8) |
|
|
|
|
|
(set-selection-coding-system 'utf-8) |
|
|
|
|
|
(prefer-coding-system 'utf-8) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** text selection |
|
|
|
|
|
|
|
|
|
|
|
If I selected text, delete the selection, I probably meant it emacs. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(delete-selection-mode 1) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
*** line width |
|
|
|
|
|
|
|
|
|
|
|
80 char line columns not 72. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables '(fill-column 80)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** we aren't banging rocks anymore |
|
|
|
|
|
|
|
|
|
|
|
Double spacing after a line isn't needed. We aren't animals emacs, we have computers. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(set-default 'sentence-end-double-space nil) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** sentence end |
|
|
|
|
|
|
|
|
|
|
|
Semi related to the above, make the sentence endings a bit more code-ish. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(sentence-end "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*") |
|
|
|
|
|
'(sentence-end-double-space nil) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** default tab-width |
|
|
|
|
|
|
|
|
|
|
|
Two seems sensible, cause well, tabs are evil incarnate. |
|
|
|
|
|
|
|
|
|
|
|
Lets use a tab width of 2 by default. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(custom-set-variables '(default-tab-width 2)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** whitespace |
|
|
|
|
|
|
|
|
|
|
|
Customize whitespace mode to make tabs obvious as boxes, and to highlight lines over 80 characters in length. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(require 'whitespace) |
|
|
|
|
|
|
|
|
|
|
|
(setq whitespace-style '(face tabs trailing)) |
|
|
|
|
|
|
|
|
|
|
|
(set-face-attribute 'whitespace-tab nil |
|
|
|
|
|
:foreground "#2075c7" |
|
|
|
|
|
:background "lightgrey") |
|
|
|
|
|
|
|
|
|
|
|
(set-face-attribute 'whitespace-line nil |
|
|
|
|
|
:foreground "#2075c7" |
|
|
|
|
|
:background "lightgrey") |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** uncategorized |
|
|
|
|
|
|
|
|
|
|
|
I have no idea how to label these. |
|
|
|
|
|
|
|
|
|
|
|
Highlight parens. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(show-paren-mode) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
Typing out *yes* or *no* is stupid. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(fset 'yes-or-no-p 'y-or-n-p) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** osx specific |
|
|
|
|
|
|
|
|
|
|
|
**** no yes-or-no gui windows |
|
|
|
|
|
|
|
|
|
|
|
On osx, don't ever display the gui dialog box. Taken from http://superuser.com/questions/125569/how-to-fix-emacs-popup-dialogs-on-mac-os-x |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(when (and on-osx (window-system)) |
|
|
|
|
|
(defadvice yes-or-no-p (around prevent-dialog activate) |
|
|
|
|
|
"Prevent yes-or-no-p from activating a dialog" |
|
|
|
|
|
(let ((use-dialog-box nil)) |
|
|
|
|
|
ad-do-it)) |
|
|
|
|
|
(defadvice y-or-n-p (around prevent-dialog-yorn activate) |
|
|
|
|
|
"Prevent y-or-n-p from activating a dialog" |
|
|
|
|
|
(let ((use-dialog-box nil)) |
|
|
|
|
|
ad-do-it)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
**** make osx gui emacs keyboard setup match console |
|
|
|
|
|
|
|
|
|
|
|
Command should be meta on cocoa emacs like the old carbon/macports version. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(when (and on-osx (window-system)) |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(mac-command-key-is-meta t) |
|
|
|
|
|
'(mac-option-key-is-meta nil) |
|
|
|
|
|
'(mac-command-key-is-meta t) |
|
|
|
|
|
'(mac-command-modifier 'meta) |
|
|
|
|
|
'(mac-option-modifier 'none) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** global key bindings |
|
|
|
|
|
|
|
|
|
|
|
Global key bindings. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(global-set-key (kbd "C-x ,") 'kill-whole-line) |
|
|
|
|
|
(global-set-key (kbd "C-x C-m") 'compile) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** x copy/paste |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(when (and on-linux (window-system)) |
|
|
|
|
|
(progn |
|
|
|
|
|
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value) |
|
|
|
|
|
(setq x-select-enable-clipboard t) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
* appearance |
|
|
|
|
|
*** gui |
|
|
|
|
|
|
|
|
|
|
|
When i'm running in a terminal emacs, most of this junk isn't needed. For that matter gui counts for most. |
|
|
|
|
|
|
|
|
|
|
|
Basically, never show the tool bar or the scroll bar in gui or tty. In gui its ok to show the menu-bar. |
|
|
|
|
|
|
|
|
|
|
|
Also have the scratch buffer be empty instead of have the derp message I never read anyway. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(tool-bar-mode -1) |
|
|
|
|
|
(scroll-bar-mode -1) |
|
|
|
|
|
(when (not window-system) |
|
|
|
|
|
(menu-bar-mode -1)) |
|
|
|
|
|
(custom-set-variables '(initial-scratch-message nil)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** fonts |
|
|
|
|
|
|
|
|
|
|
|
List of fonts in order of preference. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(defvar my/gui-fonts |
|
|
|
|
|
'( |
|
|
|
|
|
"PragmataPro" |
|
|
|
|
|
"Pragmata Pro" ;; Seems to register differently on osx than X |
|
|
|
|
|
"Source Code Pro" |
|
|
|
|
|
"Menlo" |
|
|
|
|
|
"Monaco" |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
Set preferred font list when we're in a gui emacs session. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(with-no-warnings |
|
|
|
|
|
(when window-system |
|
|
|
|
|
(if (find-font (font-spec :name (car my/gui-fonts))) |
|
|
|
|
|
(progn (set-frame-font (car my/gui-fonts)) |
|
|
|
|
|
(set-face-attribute 'default nil :height 180)) |
|
|
|
|
|
(progn (set-gui-font (cdr my/gui-fonts)))) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** tty |
|
|
|
|
|
|
|
|
|
|
|
Enable mouse mode for the console and use the mousewheel if possible. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(unless window-system |
|
|
|
|
|
(require 'mouse) |
|
|
|
|
|
(xterm-mouse-mode t) |
|
|
|
|
|
(global-set-key [mouse-4] '(lambda () |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(scroll-down 1))) |
|
|
|
|
|
(global-set-key [mouse-5] '(lambda () |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(scroll-up 1))) |
|
|
|
|
|
(defun track-mouse (e)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
* packages |
|
|
|
|
|
|
|
|
|
|
|
All the packages I use. |
|
|
|
|
|
|
|
|
|
|
|
*** tramp |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package tramp |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config (custom-set-variables '(tramp-default-method "ssh")) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** exec-path-from-shell |
|
|
|
|
|
|
|
|
|
|
|
Turns out that someone wrote this exact thing already. Yay get to drop my own crap. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package exec-path-from-shell |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init (if on-osx (exec-path-from-shell-initialize)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** osx-clipboard-mode |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(when on-osx |
|
|
|
|
|
(use-package osx-clipboard |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(osx-clipboard-mode +1) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** smart-mode-line |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package smart-mode-line |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables '(sml/name-width 20) |
|
|
|
|
|
'(sml/mode-width 'full) |
|
|
|
|
|
'(sml/shorten-modes t) |
|
|
|
|
|
'(sml/shorten-directory t) |
|
|
|
|
|
'(sml/hidden-modes |
|
|
|
|
|
'(" GitGutter" |
|
|
|
|
|
" Fill" |
|
|
|
|
|
" $" |
|
|
|
|
|
" Wrap" |
|
|
|
|
|
" MRev" |
|
|
|
|
|
" Ind" |
|
|
|
|
|
" Projectile" |
|
|
|
|
|
" SP" |
|
|
|
|
|
" Undo-Tree" |
|
|
|
|
|
" yas" |
|
|
|
|
|
" WSC")) |
|
|
|
|
|
) |
|
|
|
|
|
(sml/toggle-shorten-modes) |
|
|
|
|
|
(add-to-list 'sml/replacer-regexp-list |
|
|
|
|
|
'("^~/src/" ":src:")) |
|
|
|
|
|
(sml/setup) |
|
|
|
|
|
(column-number-mode) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** semantic |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package semantic |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(global-semantic-decoration-mode t) |
|
|
|
|
|
'(global-semantic-highlight-func-mode t) |
|
|
|
|
|
'(global-semantic-idle-scheduler-mode t) |
|
|
|
|
|
'(global-semantic-idle-local-symbol-highlight-mode t) |
|
|
|
|
|
'(global-semantic-stickyfunc-mode f) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
:init(semantic-mode t) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** expand-region |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package expand-region :ensure t :bind ("C-]" . er/expand-region)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** helm |
|
|
|
|
|
|
|
|
|
|
|
By Helms Deep use Helm to do ALL THE THINGS. IDO is ass in comparison. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package helm |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:diminish helm-mode |
|
|
|
|
|
:bind (("M-x" . helm-M-x) |
|
|
|
|
|
("M-y" . helm-show-kill-ring) |
|
|
|
|
|
("C-x b" . helm-mini) |
|
|
|
|
|
("C-x C-b" . helm-buffers-list) |
|
|
|
|
|
("C-x C-f" . helm-find-files) |
|
|
|
|
|
("C-x C-r" . helm-recentf) |
|
|
|
|
|
("C-x c o" . helm-occur)) |
|
|
|
|
|
:init (progn |
|
|
|
|
|
(require 'helm-config) |
|
|
|
|
|
(helm-mode 1) |
|
|
|
|
|
(use-package helm-descbinds |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:bind (("C-h b" . helm-descbinds) |
|
|
|
|
|
("C-h w" . helm-descbinds)) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package helm-ag :ensure t) |
|
|
|
|
|
(use-package helm-projectile :ensure t) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** magit |
|
|
|
|
|
|
|
|
|
|
|
Make git not ass to use. At least in emacs. magit is the best git interface... in the world. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package magit |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:commands (magit-init |
|
|
|
|
|
magit-status |
|
|
|
|
|
magit-diff |
|
|
|
|
|
magit-commit) |
|
|
|
|
|
:bind ("C-x m" . magit-status) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(magit-auto-revert-mode nil) |
|
|
|
|
|
'(magit-last-seen-setup-instructions "1.4.0") |
|
|
|
|
|
) |
|
|
|
|
|
(defadvice magit-status (around magit-fullscreen activate) |
|
|
|
|
|
(window-configuration-to-register :magit-fullscreen) |
|
|
|
|
|
ad-do-it |
|
|
|
|
|
(delete-other-windows)) |
|
|
|
|
|
|
|
|
|
|
|
(defadvice magit-quit-window (around magit-restore-screen activate) |
|
|
|
|
|
ad-do-it |
|
|
|
|
|
(jump-to-register :magit-fullscreen))) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** workgroups2 |
|
|
|
|
|
|
|
|
|
|
|
Save workgroup layouts. Similar..ish to desktop-save. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp :tangle no |
|
|
|
|
|
(use-package workgroups2 |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:diminish (workgroups-mode . "") |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(wg-session-file "~/.emacs.d/workgroups") |
|
|
|
|
|
'(wg-prefix-key (kbd "C-c C-w")) |
|
|
|
|
|
'(wg-mode-line-display-on nil) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
:init (workgroups-mode 1) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** autopair |
|
|
|
|
|
|
|
|
|
|
|
Highlight matching ()'s []'s etc... |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package autopair |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn (custom-set-variables '(autopair-blink 'nil))) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** org-mode |
|
|
|
|
|
|
|
|
|
|
|
Org-mode keybindings and settings, pretty sparse really. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package org |
|
|
|
|
|
:ensure org-plus-contrib |
|
|
|
|
|
:bind (("C-c a" . org-agenda) |
|
|
|
|
|
("C-c b" . org-iswitchb) |
|
|
|
|
|
("C-c c" . org-capture) |
|
|
|
|
|
("C-c l" . org-store-link) |
|
|
|
|
|
("C-c p" . org-latex-export-to-pdf)) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(org-log-done t) |
|
|
|
|
|
'(org-hide-leading-stars t) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package org-bullets :ensure t) |
|
|
|
|
|
(org-reload) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** flycheck |
|
|
|
|
|
|
|
|
|
|
|
Flycheck for on the fly checking of code. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package flycheck |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init |
|
|
|
|
|
(custom-set-variables '(flycheck-indication-mode 'left-fringe)) |
|
|
|
|
|
:config |
|
|
|
|
|
(add-hook 'prog-mode-hook 'flycheck-mode) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
Need to vet this, used it more when I did more c. But its handy for non standard pkg-config |
|
|
|
|
|
setups. |
|
|
|
|
|
|
|
|
|
|
|
Not tangled into the config intentionally. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp :tangle=no |
|
|
|
|
|
(defun pkg-config-add-lib-cflags (pkg-config-lib) |
|
|
|
|
|
"This function will add necessary header file path of a |
|
|
|
|
|
specified by `pkg-config-lib' to `flycheck-clang-include-path', which make it |
|
|
|
|
|
completionable by auto-complete-clang" |
|
|
|
|
|
(interactive "spkg-config lib: ") |
|
|
|
|
|
(if (executable-find "pkg-config") |
|
|
|
|
|
(if (= (shell-command |
|
|
|
|
|
(format "pkg-config %s" pkg-config-lib)) |
|
|
|
|
|
0) |
|
|
|
|
|
(setq flycheck-clang-include-path |
|
|
|
|
|
(append flycheck-clang-include-path |
|
|
|
|
|
(split-string |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "pkg-config --cflags-only-I %s" |
|
|
|
|
|
pkg-config-lib))))) |
|
|
|
|
|
(message "Error, pkg-config lib %s not found." pkg-config-lib)) |
|
|
|
|
|
(message "Error: pkg-config tool not found."))) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** auto-complete |
|
|
|
|
|
|
|
|
|
|
|
Auto complete functionality is nice to have. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package auto-complete |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init (progn (require 'auto-complete-config) |
|
|
|
|
|
(ac-config-default) |
|
|
|
|
|
(global-auto-complete-mode t) |
|
|
|
|
|
)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** smartparens |
|
|
|
|
|
|
|
|
|
|
|
Helpfully inserts matching parens, can be a pita too. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package smartparens |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(add-hook 'prog-mode-hook 'smartparens-mode) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** rainbow delimiters |
|
|
|
|
|
|
|
|
|
|
|
Makes matching parens easier. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package rainbow-delimiters |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** uniquify |
|
|
|
|
|
|
|
|
|
|
|
Make buffer names unique based on their directory and not have <N> or other nonsense. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(require 'uniquify) |
|
|
|
|
|
(custom-set-variables '(uniquify-buffer-name-style 'post-forward)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** desktop-save |
|
|
|
|
|
|
|
|
|
|
|
Desktop saving of session information handy to keep the same buffers between sessions. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(require 'desktop) |
|
|
|
|
|
|
|
|
|
|
|
(desktop-save-mode 1) |
|
|
|
|
|
|
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(desktop-restore-eager 5) |
|
|
|
|
|
'(desktop-path '("~/.emacs.d")) |
|
|
|
|
|
'(desktop-dirname "~/.emacs.d") |
|
|
|
|
|
'(desktop-base-file-name "desktop") |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
(defun local-desktop-save () |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(if (eq (desktop-owner) (emacs-pid)) |
|
|
|
|
|
(desktop-save desktop-dirname))) |
|
|
|
|
|
|
|
|
|
|
|
(add-hook 'auto-save-hook 'desktop-save-in-desktop-dir) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** fic-mode |
|
|
|
|
|
|
|
|
|
|
|
Highlight TODO/FIXME type messages in comments. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package fic-mode |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init |
|
|
|
|
|
(add-hook 'prog-mode-hook 'turn-on-fic-mode) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** projectile |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package projectile |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init (projectile-global-mode) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn (require 'helm-projectile) |
|
|
|
|
|
(helm-projectile-on)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** git gutter |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package git-gutter |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn (global-git-gutter-mode t)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** clang-format |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package clang-format |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:bind (([C-M-tab] . clang-format-region)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** hideshow |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package hideshow |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:bind ("C-c s" . hs-toggle-hiding) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** ggtags |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp :tangle no |
|
|
|
|
|
(use-package ggtags :ensure t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** company-mode |
|
|
|
|
|
|
|
|
|
|
|
Completion tips. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp :tangle no |
|
|
|
|
|
(use-package company-mode |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn (add-hook 'after-init-hook 'global-company-mode)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** yaml-mode |
|
|
|
|
|
|
|
|
|
|
|
For.. yaml |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package yaml-mode :ensure t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** writegood-mode |
|
|
|
|
|
|
|
|
|
|
|
So I write gooder. Me fail English? Thats unpossible. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package writegood-mode :ensure t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** helm-gtags |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package helm-gtags :ensure t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** python-mode |
|
|
|
|
|
|
|
|
|
|
|
Compress down python configuration a bit. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package python |
|
|
|
|
|
:commands python-mode |
|
|
|
|
|
:mode ("\\.py\\'" . python-mode) |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init |
|
|
|
|
|
(progn |
|
|
|
|
|
(use-package jedi |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init |
|
|
|
|
|
(progn |
|
|
|
|
|
(jedi:install-server) |
|
|
|
|
|
) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(jedi:complete-on-dot t) |
|
|
|
|
|
'(jedi:install-imenu t) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
:bind |
|
|
|
|
|
(("M-." . jedi:goto-definition) |
|
|
|
|
|
("M-," . jedi:goto-definition-pop-marker) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package company-anaconda |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(add-to-list 'company-backends 'company-anaconda) |
|
|
|
|
|
(add-hook 'python-mode-hook 'anaconda-mode) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package pytest |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:bind ("C-c t" . pytest-one) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package pymacs :ensure t) |
|
|
|
|
|
) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(add-hook 'python-mode-hook' |
|
|
|
|
|
(lambda () |
|
|
|
|
|
(jedi:setup) |
|
|
|
|
|
(push '("lambda" . ?λ) prettify-symbols-alist) |
|
|
|
|
|
(push '("<=" . ?≤) prettify-symbols-alist) |
|
|
|
|
|
(push '(">=" . ?≥) prettify-symbols-alist) |
|
|
|
|
|
(push '("==" . ?≡) prettify-symbols-alist) |
|
|
|
|
|
(push '("/=" . ?≢) prettify-symbols-alist) |
|
|
|
|
|
(push '("&&" . ?∧) prettify-symbols-alist) |
|
|
|
|
|
(push '("||" . ?∨) prettify-symbols-alist) |
|
|
|
|
|
(push '("not" . ?¬) prettify-symbols-alist) |
|
|
|
|
|
(push '("None" . ?⊥) prettify-symbols-alist) |
|
|
|
|
|
(prettify-symbols-mode) |
|
|
|
|
|
) |
|
|
|
|
|
)) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** haskell-mode |
|
|
|
|
|
|
|
|
|
|
|
Need to make haskell source be all pretty. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package haskell-mode |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(use-package hindent |
|
|
|
|
|
:if (executable-find "hindent") |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(add-hook 'haskell-mode-hook #'hindent-mode) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package flycheck-haskell :ensure t) |
|
|
|
|
|
(use-package flycheck-hdevtools |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(add-hook 'haskell-mode-hook 'flycheck-mode) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
(use-package ghc |
|
|
|
|
|
:if (executable-find "ghc-mod") |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(progn |
|
|
|
|
|
(autoload 'ghc-init "ghc" nil t) |
|
|
|
|
|
(autoload 'ghc-debug "ghc" nil t) |
|
|
|
|
|
(add-hook 'haskell-mode-hook (lambda () |
|
|
|
|
|
(ghc-init) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
(add-hook 'haskell-mode-hook 'interactive-haskell-mode) |
|
|
|
|
|
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation) |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(haskell-program-name "ghci") |
|
|
|
|
|
'(haskell-process-type 'cabal-repl) |
|
|
|
|
|
'(haskell-tags-on-save t) |
|
|
|
|
|
) |
|
|
|
|
|
(add-to-list 'completion-ignored-extensions ".hi") |
|
|
|
|
|
(add-hook 'haskell-mode-hook' |
|
|
|
|
|
(lambda () |
|
|
|
|
|
(push '("()" . ?∅) prettify-symbols-alist) |
|
|
|
|
|
(push '("\\" . ?λ) prettify-symbols-alist) |
|
|
|
|
|
(push '("pi" . ?π) prettify-symbols-alist) |
|
|
|
|
|
(push '("=>" . ?⇒) prettify-symbols-alist) |
|
|
|
|
|
(push '("->" . ?→) prettify-symbols-alist) |
|
|
|
|
|
(push '("<-" . ?←) prettify-symbols-alist) |
|
|
|
|
|
(push '("<=" . ?≤) prettify-symbols-alist) |
|
|
|
|
|
(push '(">=" . ?≥) prettify-symbols-alist) |
|
|
|
|
|
(push '("==" . ?≡) prettify-symbols-alist) |
|
|
|
|
|
(push '("/=" . ?≢) prettify-symbols-alist) |
|
|
|
|
|
(push '("!!" . "‼") prettify-symbols-alist) |
|
|
|
|
|
(push '("&&" . ?∧) prettify-symbols-alist) |
|
|
|
|
|
(push '("||" . ?∨) prettify-symbols-alist) |
|
|
|
|
|
(push '("~>" . ?⇝) prettify-symbols-alist) |
|
|
|
|
|
(push '("-<" . ?↢) prettify-symbols-alist) |
|
|
|
|
|
(push '("not" . ?¬) prettify-symbols-alist) |
|
|
|
|
|
(push '("forall" . ?∀) prettify-symbols-alist) |
|
|
|
|
|
(push '("sqrt" . ?√) prettify-symbols-alist) |
|
|
|
|
|
(push '("undefined" . ?⊥) prettify-symbols-alist) |
|
|
|
|
|
(push '("sqrt" . ?√) prettify-symbols-alist) |
|
|
|
|
|
(prettify-symbols-mode) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** undo-tree |
|
|
|
|
|
|
|
|
|
|
|
Make undo more useful, and treelike. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package undo-tree |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:init |
|
|
|
|
|
(progn (global-undo-tree-mode)) |
|
|
|
|
|
:config |
|
|
|
|
|
(progn (defadvice undo-tree-visualize (around undo-tree-split-side-by-side activate) |
|
|
|
|
|
"Split undo-tree side-by-side" |
|
|
|
|
|
(let ((split-height-threshold nil) |
|
|
|
|
|
(split-width-threshold 0)) |
|
|
|
|
|
ad-do-it) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
:bind |
|
|
|
|
|
("C-x u" . undo-tree-visualize) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** color-identifiers-mode |
|
|
|
|
|
|
|
|
|
|
|
Color variables for easy identification, its like a rainbow puked over everything opened in prog-mode-hook. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package color-identifiers-mode |
|
|
|
|
|
:ensure t |
|
|
|
|
|
:config |
|
|
|
|
|
(add-hook 'prog-mode-hook 'color-identifiers-mode) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** nix-mode |
|
|
|
|
|
|
|
|
|
|
|
Instead of text might as well get a decent mode hook going here. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(use-package nix-mode :ensure t) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
* mode related |
|
|
|
|
|
*** common defaults |
|
|
|
|
|
|
|
|
|
|
|
Common mode defaults I think are sensible. |
|
|
|
|
|
|
|
|
|
|
|
***** prog-mode hook |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'prog-mode-hook |
|
|
|
|
|
'(lambda () |
|
|
|
|
|
(auto-complete-mode) ;; can't get this to work with use-package easily |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(hl-line-mode) |
|
|
|
|
|
(whitespace-mode) |
|
|
|
|
|
(visual-line-mode) |
|
|
|
|
|
(flyspell-prog-mode) |
|
|
|
|
|
(custom-set-variables |
|
|
|
|
|
'(indent-tabs-mode nil) |
|
|
|
|
|
'(tab-width 2) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** c |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.[chm]\\'" . c-mode)) |
|
|
|
|
|
(add-hook 'c-mode-common-hook |
|
|
|
|
|
'(lambda () |
|
|
|
|
|
(global-set-key "\C-x\C-m" 'compile) |
|
|
|
|
|
(setq flycheck-clang-language-standard "c11") |
|
|
|
|
|
(setq flycheck-idle-change-delay 2) |
|
|
|
|
|
(setq flycheck-highlighting-mode 'symbols) |
|
|
|
|
|
;; later... |
|
|
|
|
|
;; (add-hook 'before-save-hook 'clang-format-buffer nil t) |
|
|
|
|
|
(c-toggle-auto-state 1) |
|
|
|
|
|
(setq-default c-basic-offset 2 |
|
|
|
|
|
tab-width 2 |
|
|
|
|
|
indent-tabs-mode nil |
|
|
|
|
|
c-electric-flag t |
|
|
|
|
|
indent-level 2 |
|
|
|
|
|
c-default-style "bsd" |
|
|
|
|
|
backward-delete-function nil) |
|
|
|
|
|
)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** elisp |
|
|
|
|
|
|
|
|
|
|
|
TODO: fixme |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp :tangle no |
|
|
|
|
|
(add-hook 'emacs-lisp-hook |
|
|
|
|
|
(lambda () |
|
|
|
|
|
(define-key emacs-lisp-map |
|
|
|
|
|
"\C-x\C-e" 'pp-eval-last-sexp) |
|
|
|
|
|
(define-key emacs-lisp-map |
|
|
|
|
|
"\r" 'reindent-then-newline-and-indent))) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** python-mode |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'python-mode-hook |
|
|
|
|
|
'(lambda () |
|
|
|
|
|
(flycheck-select-checker 'python-flake8) |
|
|
|
|
|
(flycheck-select-checker 'python-pylint) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** shell |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(autoload 'sh--mode "sh-mode" "mode for shell stuff" t) |
|
|
|
|
|
|
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.sh$\\'" . sh-mode)) |
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.[zk]sh$\\'" . sh-mode)) |
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.bash$\\'" . sh-mode)) |
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\[.].*shrc$\\'" . sh-mode)) |
|
|
|
|
|
(add-to-list 'auto-mode-alist '("sourceme$\\'" . sh-mode)) |
|
|
|
|
|
|
|
|
|
|
|
(add-hook 'sh-mode-hook |
|
|
|
|
|
'(lambda () |
|
|
|
|
|
(setq sh-basic-offset 2 sh-indentation 4 |
|
|
|
|
|
sh-indent-for-case-label 0 sh-indent-for-case-alt '+))) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** perl |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(fset 'perl-mode 'cperl-mode) |
|
|
|
|
|
|
|
|
|
|
|
(add-hook 'cperl-mode-hook |
|
|
|
|
|
'(lambda () |
|
|
|
|
|
(setq indent-tabs-mode t) |
|
|
|
|
|
(setq tab-width 8) |
|
|
|
|
|
(setq cperl-indent-level 4) |
|
|
|
|
|
(setq tab-stop-list (number-sequence 4 200 4)) |
|
|
|
|
|
(setq cperl-tab-always-indent t) |
|
|
|
|
|
(setq cperl-indent-parens-as-block t) |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
*** auto-insert-mode new file templates |
|
|
|
|
|
|
|
|
|
|
|
Use auto-insert-mode to insert in templates for blank files. |
|
|
|
|
|
|
|
|
|
|
|
So first up, add auto-insert to *find-file-hooks* so we insert straight away. Also setup the copyright bit to minimally put in name. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(add-hook 'find-file-hooks 'auto-insert) |
|
|
|
|
|
(defvar auto-insert-copyright (user-full-name)) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
Create *auto-insert-alist* so all the mode lists are the same |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(defvar auto-insert-alist '(())) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** c |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq auto-insert-alist |
|
|
|
|
|
(append |
|
|
|
|
|
'( |
|
|
|
|
|
((c-mode . "c") |
|
|
|
|
|
nil |
|
|
|
|
|
"/*\n" |
|
|
|
|
|
"File: " (file-name-nondirectory buffer-file-name) "\n" |
|
|
|
|
|
"Copyright: " (substring (current-time-string) -4) " " auto-insert-copyright "\n" |
|
|
|
|
|
"Description: " _ "\n" |
|
|
|
|
|
"*/\n" |
|
|
|
|
|
"#include <stdio.h>\n" |
|
|
|
|
|
"#include <stdlib.h>\n\n" |
|
|
|
|
|
"int main(int argc, char **argv) {\n" |
|
|
|
|
|
" return 0;\n" |
|
|
|
|
|
"}\n" |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
auto-insert-alist) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** elisp |
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq auto-insert-alist |
|
|
|
|
|
(append |
|
|
|
|
|
'( |
|
|
|
|
|
((emacs-lisp-mode . "elisp") |
|
|
|
|
|
nil |
|
|
|
|
|
";;-*-mode: emacs-lisp; coding: utf-8;-*-\n" |
|
|
|
|
|
";; File: " (file-name-nondirectory buffer-file-name) "\n" |
|
|
|
|
|
";; Copyright: " (substring (current-time-string) -4) " " auto-insert-copyright "\n" |
|
|
|
|
|
";; Description: " _ "\n" |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
auto-insert-alist) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** python |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq auto-insert-alist |
|
|
|
|
|
(append |
|
|
|
|
|
'(((python-mode . "python") |
|
|
|
|
|
nil |
|
|
|
|
|
"#!/usr/bin/env python\n" |
|
|
|
|
|
"# -*-mode: Python; coding: utf-8;-*-\n" |
|
|
|
|
|
"# File: " (file-name-nondirectory buffer-file-name) "\n" |
|
|
|
|
|
"# Copyright: " (substring (current-time-string) -4) " " auto-insert-copyright "\n" |
|
|
|
|
|
"# Description: " _ "\n\n" |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
auto-insert-alist) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
|
|
|
|
|
|
***** shell |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq auto-insert-alist |
|
|
|
|
|
(append |
|
|
|
|
|
'( |
|
|
|
|
|
((sh-mode . "sh") |
|
|
|
|
|
nil |
|
|
|
|
|
"#!/usr/bin/env sh\n" |
|
|
|
|
|
"#-*-mode: Shell-script; coding: utf-8;-*-\n" |
|
|
|
|
|
"# File: " (file-name-nondirectory buffer-file-name) "\n" |
|
|
|
|
|
"# Copyright: " (substring (current-time-string) -4) " " auto-insert-copyright "\n" |
|
|
|
|
|
"# Description: " _ "\n" |
|
|
|
|
|
"export script=$(basename \"$0\")\n" |
|
|
|
|
|
"export dir=$(cd \"$(dirname \"$0\")\"; pwd)\n" |
|
|
|
|
|
"export iam=${dir}/${script}\n" |
|
|
|
|
|
) |
|
|
|
|
|
) |
|
|
|
|
|
auto-insert-alist) |
|
|
|
|
|
) |
|
|
|
|
|
#+END_SRC |
|
|
|
|
|
* custom |
|
|
|
|
|
|
|
|
|
|
|
Load this up last to allow for local customization if needed and to keep from custom writing to the init.el file. |
|
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp |
|
|
|
|
|
(setq custom-file "~/.emacs.d/custom.el") |
|
|
|
|
|
(load custom-file 'noerror) |
|
|
|
|
|
#+END_SRC |
|
|
|