Gee, what're we gonna do tonight, Brain?
This commit is contained in:
parent
4df3c32a8d
commit
3a79705475
44 changed files with 1806 additions and 1237 deletions
|
@ -2,134 +2,112 @@
|
|||
|
||||
;;;; Editor behavior ;;;;;;;;;;;;;;;;
|
||||
(setq sentence-end-double-space nil)
|
||||
(setq require-final-newline t)
|
||||
;; (setq require-final-newline nil)
|
||||
;; (setq mode-require-final-newline nil)
|
||||
(setq-default fill-column 80)
|
||||
(electric-indent-mode -1) ; In case of emacs 24.4
|
||||
(setq-default tab-width 4
|
||||
tab-always-indent nil
|
||||
indent-tabs-mode nil) ; spaces instead of tabs
|
||||
|
||||
(setq-default tab-width 4)
|
||||
(setq-default indent-tabs-mode nil)
|
||||
(setq-default tab-always-indent nil)
|
||||
|
||||
;; In case of emacs 24.4
|
||||
(electric-indent-mode -1)
|
||||
|
||||
;; Remember undo history
|
||||
(setq undo-tree-auto-save-history t)
|
||||
(setq undo-tree-history-directory-alist `((".*" . ,*tmp-dir-undo)))
|
||||
|
||||
;; Save cursor location across sessions
|
||||
(require 'saveplace)
|
||||
(setq-default save-place t)
|
||||
(setq save-place-file (f-expand "saveplace" *tmp-dir))
|
||||
|
||||
;; Save history across sessions
|
||||
(setq savehist-additional-variables
|
||||
;; search entries
|
||||
'(search ring regexp-search-ring)
|
||||
;; keep the home clean
|
||||
savehist-file (f-expand "savehist" *tmp-dir))
|
||||
(savehist-mode 1)
|
||||
;; Show tab characters
|
||||
(global-whitespace-mode 1)
|
||||
(setq whitespace-style '(face tabs tab-mark) ; needs to be re-set in every buffer
|
||||
whitespace-display-mappings
|
||||
'((tab-mark ?\t [?| ?\t] [?\\ ?\t])
|
||||
(newline-mark 10 [36 10])))
|
||||
|
||||
;;;; Modes 'n hooks ;;;;;;;;;;;;;;;;;
|
||||
(associate-mode "\\.plist$" nxml-mode)
|
||||
(associate-mode "zsh\\(env\\|rc\\)?$" shell-script-mode)
|
||||
(associate-mode "z\\(profile\\|login\\|logout\\)?$" shell-script-mode)
|
||||
(associate-mode "zsh/" shell-script-mode)
|
||||
(associate-mode "\\.applescript$" applescript-mode)
|
||||
(associate-mode "Cask$" emacs-lisp-mode)
|
||||
(associate-mode "\\.el\\.gz$" emacs-lisp-mode)
|
||||
(associate-mode "/LICENSE[^/]*$" 'text-mode)
|
||||
(associate-mode "zsh\\(env\\|rc\\)?$" 'sh-mode)
|
||||
(associate-mode "z\\(profile\\|login\\|logout\\)?$" 'sh-mode)
|
||||
(associate-mode "zsh/" 'sh-mode)
|
||||
(associate-mode "\\.applescript$" 'applescript-mode)
|
||||
(associate-mode "Cask$" 'emacs-lisp-mode)
|
||||
(associate-mode "\\.el\\.gz$" 'emacs-lisp-mode)
|
||||
(associate-mode "/Makefile$" 'makefile-gmake-mode)
|
||||
(associate-mode "\\.plist$" 'nxml-mode)
|
||||
|
||||
(add-hook 'text-mode-hook 'enable-hard-wrap)
|
||||
(add-hook 'prog-mode-hook 'enable-comment-hard-wrap)
|
||||
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
||||
;; Kill special (\\*.+\\*) buffers that are buried
|
||||
(run-with-idle-timer 10 t 'my:kill-other-buffers)
|
||||
|
||||
;;;; Evil-mode ;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;;; Evil ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(use-package evil
|
||||
:diminish undo-tree-mode
|
||||
:config
|
||||
:pre-load (defvar evil-want-C-u-scroll t)
|
||||
:init
|
||||
(progn
|
||||
(evil-mode 1)
|
||||
|
||||
(setq evil-want-visual-char-semi-exclusive t
|
||||
evil-search-module 'evil-search
|
||||
evil-magic 'very-magic
|
||||
|
||||
;; Color-coded state cursors
|
||||
evil-normal-state-cursor '("white" box)
|
||||
evil-visual-state-cursor '("cyan" box)
|
||||
evil-god-state-cursor '("orange" box))
|
||||
|
||||
;; Fixes C-i's synonymity with TAB
|
||||
(keyboard-translate ?\C-i ?\H-i)
|
||||
|
||||
(add-hook! 'find-file-hook (setq evil-shift-width tab-width))
|
||||
|
||||
(setq evil-search-module 'evil-search)
|
||||
(setq evil-magic 'very-magic)
|
||||
;; Color-coded state cursors
|
||||
(setq evil-normal-state-cursor '("white" box))
|
||||
(setq evil-visual-state-cursor '("cyan" box))
|
||||
(setq evil-god-state-cursor '("orange" box))
|
||||
|
||||
(evil-set-initial-state 'comint-mode 'insert)
|
||||
;; modes to map to different default states
|
||||
(dolist (mode-map '((cider-repl-mode . emacs)
|
||||
(comint-mode . emacs)
|
||||
(eshell-mode . emacs)
|
||||
(fundamental-mode . normal)
|
||||
(git-commit-mode . insert)
|
||||
(git-rebase-mode . emacs)
|
||||
(help-mode . normal)
|
||||
(term-mode . emacs)))
|
||||
(evil-set-initial-state `,(car mode-map) `,(cdr mode-map)))
|
||||
|
||||
(use-package evil-ex-registers)
|
||||
(use-package evil-exchange)
|
||||
(use-package evil-indent-textobject)
|
||||
(use-package evil-indent-textobject) ; vii/vai/vaI
|
||||
(use-package evil-numbers)
|
||||
(use-package evil-visualstar)
|
||||
|
||||
(use-package evil-nerd-commenter
|
||||
:pre-load (setq evilnc-hotkey-comment-operator "g/"))
|
||||
|
||||
(use-package evil-nerd-commenter :pre-load (setq evilnc-hotkey-comment-operator "g/"))
|
||||
(use-package evil-space :init (evil-space-default-setup))
|
||||
(use-package evil-matchit :init (global-evil-matchit-mode 1))
|
||||
(use-package evil-surround :init (global-evil-surround-mode 1))
|
||||
(use-package evil-god-state)
|
||||
(use-package evil-jumper
|
||||
:pre-load
|
||||
(defvar evil-jumper-file (expand-file-name "jumplist" *tmp-dir))
|
||||
:config
|
||||
(setq evil-jumper-auto-center t
|
||||
evil-jumper-auto-save-interval 3600))
|
||||
|
||||
(use-package evil-space
|
||||
:init (evil-space-default-setup))
|
||||
(use-package evil-matchit
|
||||
:init (global-evil-matchit-mode 1))
|
||||
(use-package evil-surround
|
||||
:init (global-evil-surround-mode 1)
|
||||
:pre-load (defvar evil-jumper-file (expand-file-name "jumplist" *tmp-dir))
|
||||
:config
|
||||
(progn
|
||||
;; Adds escaped delimiters to evil-surround
|
||||
(defun my.evil-surround-escaped-pair ()
|
||||
"Evil-surround function to allow escaped delimiters. e.g. \"...\""
|
||||
(let* ((input (format "\\%s" (char-to-string (read-char "\\")))))
|
||||
;; Type \\ to simply surround in single backslashes
|
||||
(if (= input "\\\\")
|
||||
(cons "\\" "\\")
|
||||
(cons input input))))
|
||||
(setq-default evil-surround-pairs-alist (cons '(?\\ . my.evil-surround-escaped-pair) evil-surround-pairs-alist))))
|
||||
(setq evil-jumper-auto-center t
|
||||
evil-jumper-auto-save-interval 3600)
|
||||
|
||||
(use-package god-mode)
|
||||
(use-package evil-god-state :diminish god-local-mode)
|
||||
|
||||
(defmap evil-ex-completion-map
|
||||
(kbd "C-r") #'evil-ex-paste-from-register ; registers in ex-mode
|
||||
(kbd "C-a") 'move-beginning-of-line
|
||||
(kbd "<s-left>") 'move-beginning-of-line
|
||||
(kbd "<s-right>") 'move-beginning-of-line
|
||||
(kbd "<s-backspace>") 'evil-delete-whole-line)
|
||||
(define-key evil-motion-state-map (kbd "H-i") 'evil-jumper/forward)))
|
||||
|
||||
;;;; ace-jump ;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Enable half-cursor blink when using ace-jump
|
||||
(defadvice evil-ace-jump-char-mode (before evil-ace-jump-char-mode-operator-mode activate)
|
||||
(evil-half-cursor))
|
||||
(defadvice evil-ace-jump-word-mode (before evil-ace-jump-word-mode-operator-mode activate)
|
||||
(evil-half-cursor))
|
||||
(defadvice evil-ace-jump-char-mode (before evil-ace-jump-char-mode-op activate) (evil-half-cursor))
|
||||
(defadvice evil-ace-jump-word-mode (before evil-ace-jump-word-mode-op activate) (evil-half-cursor))
|
||||
(setq ace-jump-mode-scope 'global) ; limit ace-jump to current window
|
||||
(setq ace-jump-mode-move-keys ; use a-z, 0-9
|
||||
(nconc (loop for i from ?a to ?z collect i)
|
||||
(loop for i from ?A to ?Z collect i)))
|
||||
;; (setq ace-jump-mode-move-keys ; use a-z
|
||||
;; (loop for i from ?a to ?z collect i))
|
||||
|
||||
;; Exit evil-exchange mode with <Esc> (silently) -- and close
|
||||
;; minibuffer remotely if it happens to be left open
|
||||
(defadvice evil-force-normal-state (before evil-esc-quit-exchange activate)
|
||||
(shut-up (evil-exchange-cancel)
|
||||
(if (minibufferp)
|
||||
(if (minibuffer-window-active-p (minibuffer-window))
|
||||
(my:minibuffer-quit))))
|
||||
|
||||
;; Shut up beginning/end of buffer/line messages in minibuffer
|
||||
(defun my.minibuffer-bolp ()
|
||||
"Return t if (point) is truly at the beginning of the
|
||||
minibuffer/evil-ex (first character after the prompt), otherwise
|
||||
returns nil."
|
||||
(<= (- (point) (minibuffer-prompt-end)) 0))
|
||||
(defadvice left-char (around left-char-move-on-edges activate)
|
||||
(if (minibufferp)
|
||||
(unless (my.minibuffer-bolp) ad-do-it)
|
||||
ad-do-it))
|
||||
(defadvice right-char (around right-char-move-on-edges activate)
|
||||
(if (minibufferp)
|
||||
(unless (eolp) ad-do-it)
|
||||
ad-do-it))
|
||||
(defadvice evil-visual-line (before spc-for-line-jump activate)
|
||||
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-line-mode))
|
||||
(defadvice evil-visual-char (before spc-for-char-jump activate)
|
||||
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-char-mode))
|
||||
(defadvice evil-visual-block (before spc-for-char-jump activate)
|
||||
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-char-mode))
|
||||
|
||||
;; Switch to new splits after splitting
|
||||
(defadvice evil-window-split (after evil-window-split-then-switch activate)
|
||||
|
@ -174,69 +152,12 @@ returns nil."
|
|||
"\\1" file-name t)))
|
||||
file-name)))
|
||||
|
||||
;;;; Keymap Fixes ;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; This section is dedicated to keymaps that "fix" certain keys to
|
||||
;; behave to be more like vim (or how I like it).
|
||||
|
||||
;; Restores "dumb" indentation to the tab key. This rustles a lot of
|
||||
;; peoples' jimmies, apparently, but it's how I like it.
|
||||
(-imap (kbd "TAB") 'my.dumb-indent)
|
||||
;; Except for lisp
|
||||
(imap lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command)
|
||||
(imap emacs-lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command)
|
||||
|
||||
;; Highjacks backspace and space to:
|
||||
;; a) expand spaces between delimiters intelligently: (|) -> ( | )
|
||||
;; b) the reverse of A: ( | ) -> (|)
|
||||
;; c) allow backspace to delete indented blocks intelligently
|
||||
;; d) and not do any of this magic when inside a string
|
||||
(-imap (kbd "SPC") 'my.inflate-space-maybe
|
||||
[remap backward-delete-char-untabify] 'my.deflate-space-maybe
|
||||
[remap newline] 'my.newline-and-indent
|
||||
|
||||
;; Smarter move-to-beginning-of-line
|
||||
[remap move-beginning-of-line] 'my.move-to-bol
|
||||
|
||||
;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist
|
||||
"\C-e" 'my.move-to-eol
|
||||
"\C-u" 'my.backward-kill-to-bol-and-indent
|
||||
|
||||
;; Fix osx keymappings
|
||||
(kbd "<s-left>") 'my.move-to-bol
|
||||
(kbd "<s-right>") 'my.move-to-eol
|
||||
(kbd "<s-backspace>") 'my.backward-kill-to-bol-and-indent
|
||||
|
||||
;; Fixes delete
|
||||
(kbd "<kp-delete>") 'delete-char
|
||||
|
||||
;; Textmate-esque insert-line before/after
|
||||
(kbd "<s-return>") 'evil-open-below
|
||||
(kbd "<S-s-return>") 'evil-open-above)
|
||||
|
||||
(add-hook! 'ido-setup-hook
|
||||
(defmap ido-completion-map
|
||||
(kbd "<backspace>") 'ido-delete-backward-updir
|
||||
"\C-w" 'ido-delete-backward-word-updir))
|
||||
|
||||
;; Make ESC quit all the things
|
||||
(global-set-key [escape] 'keyboard-escape-quit)
|
||||
(mapc (lambda (map)
|
||||
(defmap map [escape] 'my:minibuffer-quit))
|
||||
(list minibuffer-local-map
|
||||
minibuffer-local-ns-map
|
||||
minibuffer-local-completion-map
|
||||
minibuffer-local-must-match-map
|
||||
minibuffer-local-isearch-map))
|
||||
(defmap isearch-mode-map [escape] 'isearch-abort)
|
||||
(defmap evil-god-state-map [escape] 'evil-god-state-bail)
|
||||
(defmap evil-ex-search-keymap [escape] 'evil-ex-search-exit)
|
||||
;; Close help/compilation windows with escape
|
||||
(defmap help-mode-map [escape] 'kill-buffer-and-window)
|
||||
(defmap compilation-mode-map [escape] 'kill-buffer-and-window)
|
||||
(emap debugger-mode-map [remap evil-exit-emacs-state] 'kill-buffer-and-window)
|
||||
|
||||
;;;; Editing plugins ;;;;;;;;;;;;;;;;;;;
|
||||
(use-package expand-region)
|
||||
(use-package anzu :init (global-anzu-mode))
|
||||
(use-package expand-region :commands (er/expand-region er/contract-region))
|
||||
(use-package rotate-text :commands (rotate-word-at-point rotate-region))
|
||||
(use-package smart-forward)
|
||||
|
||||
(use-package smartparens
|
||||
:config
|
||||
|
@ -255,49 +176,82 @@ returns nil."
|
|||
(sp-with-modes '(emacs-lisp-mode lisp-mode)
|
||||
(sp-local-pair "[" nil :post-handlers '(("|" "RET"))))
|
||||
|
||||
(sp-pair "[" nil :unless '(sp-point-before-word-p))
|
||||
(sp-pair "(" nil :unless '(sp-point-before-word-p))
|
||||
(sp-pair "\"" nil :unless '(sp-point-after-word-p sp-point-before-word-p))
|
||||
(sp-pair "'" nil :unless '(sp-point-after-word-p sp-point-before-word-p))
|
||||
(sp-pair "[" nil :unless '(sp-point-before-word-p sp-point-before-same-p))
|
||||
(sp-pair "(" nil :unless '(sp-point-before-word-p sp-point-before-same-p))
|
||||
(sp-pair "\"" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p))
|
||||
(sp-pair "'" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p))
|
||||
(sp-pair "\"" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p))
|
||||
|
||||
(after yasnippet
|
||||
(defadvice yas-expand (before advice-for-yas-expand activate)
|
||||
(sp-remove-active-pair-overlay)))))
|
||||
|
||||
(use-package anzu
|
||||
:diminish anzu-mode
|
||||
:init
|
||||
(global-anzu-mode))
|
||||
|
||||
;;;; Utility plugins ;;;;;;;;;;;;;;;;;;
|
||||
(use-package key-chord
|
||||
:init
|
||||
(progn (key-chord-mode 1)
|
||||
(setq key-chord-two-keys-delay 0.5)))
|
||||
;;;; Keymap Fixes ;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; This section is dedicated to keymaps that "fix" certain keys so
|
||||
;; that they behave more like vim (or how I like it).
|
||||
|
||||
(use-package smex
|
||||
:commands (smex smex-major-mode-commands)
|
||||
:config
|
||||
(progn (smex-initialize)
|
||||
;; Hook up smex to auto-update, rather than update on every run
|
||||
(defun smex-update-after-load (unused)
|
||||
(when (boundp 'smex-cache) (smex-update)))
|
||||
(add-hook 'after-load-functions 'smex-update-after-load)))
|
||||
;; Restores "dumb" indentation to the tab key. This rustles a lot of
|
||||
;; peoples' jimmies, apparently, but it's how I like it.
|
||||
(bind 'insert (kbd "TAB") 'my.dumb-indent)
|
||||
;; Except for lisp
|
||||
(bind 'insert lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command)
|
||||
(bind 'insert emacs-lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command)
|
||||
|
||||
(use-package recentf
|
||||
:init
|
||||
(progn (recentf-mode 1)
|
||||
(setq recentf-max-menu-items 0
|
||||
recentf-max-saved-items 100
|
||||
recentf-auto-cleanup 'never
|
||||
recentf-exclude '("/tmp/" "/ssh:" "\\.ido\\.last\\'" "\\.revive\\'", "TAGS", "GEMTAGS"))))
|
||||
;; Highjacks backspace and space to:
|
||||
;; a) expand spaces between delimiters intelligently: (|) -> ( | )
|
||||
;; b) the reverse of A: ( | ) -> (|)
|
||||
;; c) allow backspace to delete indented blocks intelligently
|
||||
;; d) and not do any of this magic when inside a string
|
||||
(bind 'insert
|
||||
(kbd "SPC") 'my.inflate-space-maybe
|
||||
[remap backward-delete-char-untabify] 'my.deflate-space-maybe
|
||||
[remap newline] 'my.newline-and-indent
|
||||
|
||||
(use-package re-builder
|
||||
:defer t
|
||||
:config
|
||||
(progn (setq reb-re-syntax 'string)
|
||||
(defadvice evil-force-normal-state (before evil-esc-quit-reb-mode activate)
|
||||
(when (eq 'reb-mode major-mode)
|
||||
(if reb-subexp-mode
|
||||
(reb-quit-subexp-mode)
|
||||
(reb-quit))))))
|
||||
;; Smarter move-to-beginning-of-line
|
||||
[remap move-beginning-of-line] 'my.move-to-bol
|
||||
|
||||
;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist
|
||||
"\C-e" 'my.move-to-eol
|
||||
"\C-u" 'my.backward-kill-to-bol-and-indent
|
||||
|
||||
;; Fixes delete
|
||||
(kbd "<kp-delete>") 'delete-char
|
||||
|
||||
;; Textmate-esque insert-line before/after
|
||||
(kbd "<s-return>") 'evil-open-below
|
||||
(kbd "<S-s-return>") 'evil-open-above)
|
||||
|
||||
;; Fix osx keymappings and then some
|
||||
(bind (kbd "<s-left>") 'my.move-to-bol
|
||||
(kbd "<s-right>") 'my.move-to-eol
|
||||
(kbd "<s-up>") 'smart-up
|
||||
(kbd "<s-down>") 'smart-down
|
||||
(kbd "<s-backspace>") 'my.backward-kill-to-bol-and-indent)
|
||||
|
||||
(add-hook! 'ido-setup-hook
|
||||
(bind ido-completion-map
|
||||
(kbd "<backspace>") 'ido-delete-backward-updir
|
||||
"\C-w" 'ido-delete-backward-word-updir))
|
||||
|
||||
;; Make ESC quit all the things
|
||||
(bind [escape] 'keyboard-escape-quit)
|
||||
(bind (list minibuffer-local-map
|
||||
minibuffer-local-ns-map
|
||||
minibuffer-local-completion-map
|
||||
minibuffer-local-must-match-map
|
||||
minibuffer-local-isearch-map) [escape] 'my:minibuffer-quit)
|
||||
|
||||
(bind 'god [escape] 'evil-god-state-bail)
|
||||
(bind 'normal special-mode-map [escape] 'popwin:close-popup-window)
|
||||
(bind isearch-mode-map "\C-w" 'isearch-abort)
|
||||
;; Close help/compilation windows with escape
|
||||
(bind messages-buffer-mode-map [escape] 'kill-this-buffer)
|
||||
(bind special-mode-map [escape] 'popwin:close-popup-window)
|
||||
;;(bind 'normal diff-mode-map
|
||||
;; [escape] 'kill-this-buffer
|
||||
;; "q" 'kill-this-buffer)
|
||||
; (bind 'normal c
|
||||
; scope-minor-mode-keymap
|
||||
; [escape] 'kill-this-buffer
|
||||
; "q" 'kill-this-buffer)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue