Add eclim, omnisharp, and cpp support

This commit is contained in:
Henrik Lissner 2014-08-09 19:25:06 -04:00
parent 48e4d30534
commit bdba39ddf9
25 changed files with 963 additions and 466 deletions

View file

@ -1,23 +1,24 @@
(mapc 'my/install-package
'(evil
evil-leader
evil-nerd-commenter ; auto commenting made easy
evil-matchit ; jumping between block delimiters
evil-surround ; surround-with delimiters
evil-numbers ; increment/decrement numbers
evil-exchange ; exchanging two text objects (gx/gX)
evil-space ; mimics ; and , for f, F, t, T w/ space
evil-visualstar ; visual-based * and #
autopair ; delimiter auto-closing
rainbow-delimiters ; colored matching parenthesis
saveplace ; restore cursor position on buffer load
anzu ; display current + total matches searching
smex ; less M-x cruft
recentf ; access to list of recent files
key-chord ; for mapping key chords in insert mode
multiple-cursors ; cursors, of the numerous variety
ediff
))
;; (mapc 'my/install-package
;; '(evil
;; evil-leader
;; evil-nerd-commenter ; auto commenting made easy
;; evil-matchit ; jumping between block delimiters
;; evil-surround ; surround-with delimiters
;; evil-numbers ; increment/decrement numbers
;; evil-exchange ; exchanging two text objects (gx/gX)
;; evil-space ; mimics ; and , for f, F, t, T w/ space
;; evil-visualstar ; visual-based * and #
;; autopair ; delimiter auto-closing
;; rainbow-delimiters ; colored matching parenthesis
;; saveplace ; restore cursor position on buffer load
;; anzu ; display current + total matches searching
;; smex ; less M-x cruft
;; recentf ; access to list of recent files
;; key-chord ; for mapping key chords in insert mode
;; multiple-cursors ; cursors, of the numerous variety
;; ediff
;; deferred
;; ))
;;;; Editor behavior ;;;;;;;;;;;;;;;;
@ -38,7 +39,10 @@
;;;; Plugins ;;;;;;;;;;;;;;;;;;;;;;;;
(use-package evil
(use-package deferred :ensure t :defer t)
(use-package ediff :ensure t :defer t)
(use-package evil :ensure t
:diminish undo-tree-mode
:config
(progn
@ -47,30 +51,31 @@
(evil-mode 1)
(use-package evil-leader)
(use-package evil-nerd-commenter)
(use-package evil-matchit)
(use-package evil-surround)
(use-package evil-numbers)
(use-package evil-exchange)
(use-package evil-space)
(use-package evil-visualstar)
(use-package evil-leader :ensure t)
(use-package evil-nerd-commenter :ensure t)
(use-package evil-matchit :ensure t)
(use-package evil-surround :ensure t)
(use-package evil-numbers :ensure t)
(use-package evil-exchange :ensure t)
(use-package evil-space :ensure t)
(use-package evil-visualstar :ensure t)
(use-package evil-ex-registers)
;; To get evil-leader mappings to work in the messages buffer...
(kill-buffer "*Messages*")
(setq evil-leader/in-all-states t)
(global-evil-leader-mode 1)
(global-evil-matchit-mode 1)
(global-evil-surround-mode 1)
(evil-exchange-install)
(evil-space-setup "t" ";" ",") ; Repeat t with space
(evil-space-setup "f" ";" ",") ; Repeat f with space
(evil-space-setup "T" "," ";") ; Repeat T with space
(evil-space-setup "F" "," ";") ; Repeat F with space
(evil-space-setup "t" ";" ",") ; Repeat t with space
(evil-space-setup "f" ";" ",") ; Repeat f with space
(evil-space-setup "T" "," ";") ; Repeat T with space
(evil-space-setup "F" "," ";") ; Repeat F with space
(evil-define-operator evil-destroy (beg end type register yank-handler)
(evil-delete beg end type ?_ yank-handler))
@ -79,76 +84,77 @@
;; Enable registers in ex-mode
(define-key evil-ex-completion-map (kbd "C-r") #'evil-ex-paste-from-register)))
(use-package rainbow-mode :defer t)
(use-package rainbow-delimiters
:commands rainbow-delimiters-mode
:init
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode))
(use-package rainbow-mode :ensure t :defer t)
(use-package rainbow-delimiters :ensure t
:commands rainbow-delimiters-mode
:init
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode))
(use-package rotate-text :commands (rotate-word-at-point rotate-region))
;;;; Init plugins ;;;;;;;;;;;;;;;;;;;
(use-package autopair
:diminish autopair-mode
:init
(progn (autopair-global-mode)
(setq autopair-blink nil)
;; disable blink-matching-paren
(setq blink-matching-paren nil)))
(use-package autopair :ensure t
:diminish autopair-mode
:init
(progn (autopair-global-mode)
(setq autopair-blink nil)
;; disable blink-matching-paren
(setq blink-matching-paren nil)))
(use-package anzu
:diminish anzu-mode
:init (global-anzu-mode))
(use-package anzu :ensure t
:diminish anzu-mode
:init (global-anzu-mode))
(use-package key-chord
:init
(progn (key-chord-mode 1)
(setq key-chord-two-keys-delay 0.5)))
(use-package key-chord :ensure t
:init
(progn (key-chord-mode 1)
(setq key-chord-two-keys-delay 0.5)))
(use-package saveplace
:idle
(progn (setq-default save-place t)
(setq save-place-file (expand-file-name "saveplace" my/tmp-dir))))
(use-package saveplace :ensure t
:idle
(progn (setq-default save-place t)
(setq save-place-file (expand-file-name "saveplace" my/tmp-dir))))
(use-package savehist
:init
(progn (setq savehist-additional-variables
;; search entries
'(search ring regexp-search-ring)
;; save every 5 minutes
savehist-autosave-interval 300
;; keep the home clean
savehist-file (expand-file-name "savehist" my/tmp-dir))
(savehist-mode 1)))
:init
(progn (setq savehist-additional-variables
;; search entries
'(search ring regexp-search-ring)
;; save every 5 minutes
savehist-autosave-interval 300
;; keep the home clean
savehist-file (expand-file-name "savehist" my/tmp-dir))
(savehist-mode 1)))
(use-package multiple-cursors
:commands (mc/mark-next-like-this mc/mark-previous-like-this mc/mark-all-like-this)
:config
(progn
;; I do it this way because hooking mc/keyboard-quit to insert mode's exit
;; hook breaks multiple-cursors!
(defadvice keyboard-quit (around mc-and-keyboard-quit activate)
(mc/keyboard-quit) ad-do-it)))
(use-package multiple-cursors :ensure t
:commands (mc/mark-next-like-this mc/mark-previous-like-this mc/mark-all-like-this)
:config
(progn
;; I do it this way because hooking mc/keyboard-quit to insert mode's exit
;; hook breaks multiple-cursors!
(defadvice keyboard-quit (around mc-and-keyboard-quit activate)
(mc/keyboard-quit) ad-do-it)))
(use-package smex
:bind (("M-x" . smex)
("M-X" . 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)))
(use-package smex :ensure t
:bind (("M-x" . smex)
("M-X" . 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)))
(use-package recentf
:idle
(progn (recentf-mode 1)
(add-to-list 'recentf-exclude "\\.ido\\.last\\'")
(add-to-list 'recentf-exclude "\\.revive\\'")
(setq recentf-max-menu-items 10)
(setq recentf-auto-cleanup 'never)))
(use-package recentf :ensure t
:commands recentf-mode
:idle
(progn (recentf-mode 1)
(add-to-list 'recentf-exclude "\\.ido\\.last\\'")
(add-to-list 'recentf-exclude "\\.revive\\'")
(setq recentf-max-menu-items 10)
(setq recentf-auto-cleanup 'never)))
;;
(provide 'core-editor)

View file

@ -4,33 +4,18 @@
(global-set-key (kbd "C-c C-p") 'package-list-packages)
(when is-mac
;; Send current file to OSX apps
(defun open-file-with (path &optional appName)
(if (not (string= "" appName))
(setq appName (concat "-a " appName ".app")))
(shell-command (concat "open " appName " " path)))
(defun open-with (appName)
(interactive)
(open-file-with (buffer-file-name) appName))
(defun send-to-transmit () (interactive) (open-with "Transmit"))
(defun send-to-launchbar () (interactive) (open-with "LaunchBar"))
(defun send-dir-to-launchbar () (interactive) (open-file-with default-directory "LaunchBar"))
(defun send-dir-to-finder () (interactive) (open-file-with default-directory "Finder"))
(nmap my/mode-map
(kbd "C-c o") 'send-dir-to-finder
(kbd "C-c u") 'send-to-transmit
(kbd "C-c l") 'send-to-launchbar
(kbd "C-c L") 'send-dir-to-launchbar
;; TODO: Open in tmux
(kbd "C-c t") (lambda() (interactive) (shell))
;; (kbd "C-c t") (λ (shell))
)
;; Evaluating elisp
(nmap my/mode-map (kbd "C-c x") 'eval-buffer)
(vmap my/mode-map (kbd "C-c x") 'eval-region)
(nmap my/mode-map (kbd "C-c x") 'eval-buffer)
(vmap my/mode-map (kbd "C-c x") 'eval-region)
(when window-system
(global-set-key (kbd "s-+") 'text-scale-increase)
@ -91,8 +76,8 @@
";" 'helm-imenu
"," 'ido-switch-buffer
"=" 'align-regexp
"x" 'kill-other-buffers
"X" 'kill-all-buffers
"x" 'my/kill-other-buffers
"X" 'my/kill-all-buffers
(kbd "RET") 'org-capture
)
@ -107,9 +92,7 @@
"X" 'evil-destroy ; Delete without yanking
;; copy to end of line
"Y" (lambda()
(interactive)
(evil-yank (point) (point-at-eol)))
"Y" (λ (evil-yank (point) (point-at-eol)))
"zz" 'kill-this-buffer ; Close buffer
"]b" 'previous-buffer
@ -126,15 +109,11 @@
(vmap my/mode-map
; vnoremap < <gv
"<" (lambda ()
(interactive)
(evil-shift-left (region-beginning) (region-end))
"<" (λ (evil-shift-left (region-beginning) (region-end))
(evil-normal-state)
(evil-visual-restore))
; vnoremap > >gv
">" (lambda ()
(interactive)
(evil-shift-right (region-beginning) (region-end))
">" (λ (evil-shift-right (region-beginning) (region-end))
(evil-normal-state)
(evil-visual-restore))
)
@ -161,12 +140,16 @@
;; Preserve buffer-movement in emacs mode
(emap my/mode-map
(kbd "C-w h") 'evil-window-left
(kbd "C-w l") 'evil-window-right
(kbd "C-w j") 'evil-window-down
(kbd "C-w k") 'evil-window-up
(kbd "s-j") "5j"
(kbd "s-k") "5k")
"j" 'evil-next-line
"k" 'evil-previous-line
(kbd "C-w h") 'evil-window-left
(kbd "C-w l") 'evil-window-right
(kbd "C-w j") 'evil-window-down
(kbd "C-w k") 'evil-window-up
(kbd "s-j") "5j"
(kbd "s-k") "5k")
;;;; Ex Commands ;;;;;;;;;;;;;;;;
@ -230,15 +213,5 @@
(when (get-buffer "*Completions*") (delete-windows-on "*Completions*"))
(abort-recursive-edit)))
(defun kill-other-buffers ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer))))
(message "All other buffers killed"))
(defun kill-all-buffers ()
(interactive)
(mapc 'kill-buffer (buffer-list))
(message "All buffers killed"))
;;
(provide 'core-keymaps)

View file

@ -6,8 +6,8 @@
;; Don't open files from the workspace in a new frame
(setq ns-pop-up-frames nil)
(my/install-package 'exec-path-from-shell) ; fix emacs PATH on OSX
(use-package exec-path-from-shell
;; fix emacs PATH on OSX
(use-package exec-path-from-shell :ensure t
:if window-system
:init (exec-path-from-shell-initialize))

View file

@ -2,31 +2,36 @@
;; (require 'cl)
;; Package management bootstrap
(setq package-user-dir (expand-file-name "vendor" my/dir))
(setq package-enable-at-startup nil)
(setq package-archives '(("melpa" . "http://melpa.milkbox.net/packages/")
("org" . "http://orgmode.org/elpa/")
("marmalade" . "http://marmalade-repo.org/packages/")
("gnu" . "http://elpa.gnu.org/packages/")))
(setq package-enable-at-startup nil
package-archives
'(("melpa" . "http://melpa.milkbox.net/packages/")
("org" . "http://orgmode.org/elpa/")
("marmalade" . "http://marmalade-repo.org/packages/")
("gnu" . "http://elpa.gnu.org/packages/"))
package-archive-exclude-alist
'(("melpa" org-trello)
("melpa" org)
("marmalade" org)
("gnu" org))
)
(let ((default-directory my/elisp-dir))
(normal-top-level-add-to-load-path '("."))
(normal-top-level-add-subdirs-to-load-path))
(package-initialize)
(eval-and-compile
(package-initialize)
(require 'use-package))
;; Check if a package is installed; if load is t, load it too.
;; Works for packages bundled with emacs too!
(defun my/install-package (package)
(unless skip-installs
(message "=> checking: %s" package)
(unless (package-installed-p package)
(unless (assoc package package-archive-contents)
(package-refresh-contents))
(message "=> installing: %s" package)
(package-install package))))
(package-install package)))
(require 'use-package)
(use-package diminish :ensure t)
;;
(provide 'core-packages)

View file

@ -1,11 +1,5 @@
(my/install-package 'diminish)
(global-linum-mode t) ; line numbers for everybody!
;; Sane scroll settings
(setq scroll-margin 3
scroll-conservatively 100000
scroll-preserve-screen-position 1)
;; Show line/col-no in mode-line
(line-number-mode t)
(column-number-mode t)

View file

@ -4,21 +4,37 @@
;; Emacs under-the-hood
(prefer-coding-system 'utf-8)
(global-auto-revert-mode 1) ; revert buffers for changed files
(setq-default load-prefer-newer t) ; load newer .el over older .elc
(setq redisplay-dont-pause t)
(setq-default gc-cons-threshold 50000000) ; avoid garbage collection (default is 400k)
(setq make-backup-files nil ; Don't want any backup files
auto-save-list-file-name nil ; Don't want any .saves files
auto-save-default nil) ; Don't want any auto saving
(fset 'yes-or-no-p 'y-or-n-p) ; y/n instead of yes/no
(setq inhibit-startup-screen t) ; don't show EMACs start screen
(setq confirm-kill-emacs nil)
;; If I ever enable bkacups/autosaves, then change where they go
;; Sane scroll settings
(setq scroll-margin 3
scroll-conservatively 100000
scroll-preserve-screen-position 1)
(setq inhibit-startup-screen t ; don't show EMACs start screen
inhibit-splash-screen t
inhibit-startup-buffer-menu t
inhibit-startup-echo-area-message t
initial-major-mode 'text-mode
initial-scratch-message nil)
(setq-default use-dialog-box nil)
(setq-default enable-recursive-minibuffers nil)
(setq-default visible-bell nil)
(setq sentence-end-double-space nil)
;; If I ever enable backups/autosaves, then change where they go
(setq backup-directory-alist `((".*" . ,my/tmp-dir)))
(setq auto-save-file-name-transforms `((".*" ,my/tmp-dir t)))
;; Always revert buffers if the files were changed
(global-auto-revert-mode 1)
;; window layout undo/redo, keymaps in core-keymaps.el
(when (fboundp 'winner-mode) (winner-mode 1))
@ -29,25 +45,7 @@
(eq system-type 'gnu/linux)
"Is this running on Linux?")
;;;; Macros ;;;;;;;;;;;;;;;;;;;;;;;;
;; Vimmish keymapping shortcuts
(defmacro nmap (map &rest body)
`(evil-define-key 'normal ,map ,@body))
(defmacro vmap (map &rest body)
`(evil-define-key 'visual ,map ,@body))
(defmacro imap (map &rest body)
`(evil-define-key 'insert ,map ,@body))
(defmacro emap (map &rest body)
`(evil-define-key 'emacs ,map ,@body))
;; insert-mode key-chord mapping
(defmacro ichmap (key command)
`(key-chord-define evil-insert-state-map ,key ,command))
;;;; Advice ;;;;;;;;;;;;;;;;;;;;;;;;
;; Make next/previous-buffer skip special buffers
(defadvice next-buffer (after avoid-messages-buffer-in-next-buffer)
"Advice around `next-buffer' to avoid going into the *Messages* buffer."
@ -58,65 +56,16 @@
(when (string= "*Messages*" (buffer-name))
(previous-buffer)))
;; Prevent prompts when trying to close window. If I'm closing the window,
;; I likely want it to close!
(when window-system
(defadvice save-buffers-kill-emacs (around no-y-or-n activate)
(flet ((yes-or-no-p (&rest args) t)
(y-or-n-p (&rest args) t))
ad-do-it)))
;; Prevent GUI dialog boxes, they make emacs hang
(defadvice yes-or-no-p (around prevent-dialog activate)
(let ((use-dialog-box nil)) ad-do-it))
(defadvice y-or-n-p (around prevent-dialog-yorn activate)
(let ((use-dialog-box nil)) ad-do-it))
;;;; My personal minor mode ;;;;;;;;
(defvar my/mode-map (make-sparse-keymap))
(define-minor-mode my/mode :keymap my/mode-map :global t)
;;;; Commands ;;;;;;;;;;;;;;;;;;;;;;
;; File navigation defuns
(defun my/initfiles ()
(interactive)
(ido-find-file-in-dir my/dir))
(defun my/open-scratch ()
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(text-mode))
(defun my/expand-space ()
(interactive)
(save-excursion (insert " ")))
(defun my/expand-backspace ()
(interactive)
(save-excursion (delete-char 1))
(delete-backward-char 1))
(defun my/enable-hard-wrap()
(interactive)
(auto-fill-mode 1))
(defun my/byte-recompile ()
(interactive)
(byte-recompile-file (expand-file-name "init.el" my/dir))
(byte-recompile-directory my/init-dir 0)
(byte-recompile-directory my/elisp-dir 0))
;;;; Load the rest ;;;;;;;;;;;;;;;;;;
(require 'core-packages)
(require 'core-ui)
(require 'core-editor)
(use-package core-osx :if is-mac)
(when is-mac (require 'core-osx))
(add-hook 'after-init-hook (lambda() (require 'core-keymaps)))
;;

View file

@ -1,46 +1,42 @@
(my/install-package 'auto-complete)
(defun my/ac-path-completion-enable()
(add-to-list 'ac-sources 'ac-source-filename)
(add-to-list 'ac-sources 'ac-source-files-in-current-dir))
(use-package auto-complete
(use-package auto-complete :ensure t
:diminish auto-complete-mode
:init
(progn (require 'auto-complete-config)
(progn
(require 'auto-complete-config)
;; Use more vim-like keymappings
(add-hook 'change-major-mode-hook
(lambda () (imap ac-mode-map (kbd "C-SPC") 'auto-complete)))
(setq ac-auto-start nil)
(setq ac-auto-show-menu t ; Suggestions box must be invoked manually (see core-keymaps.el)
ac-use-menu-map t ; Enable ac-menu-map map when menu is open
ac-use-quick-help nil ; Don't show tooltips unless invoked (see core-keymaps.el)
ac-use-fuzzy nil
ac-candidate-limit 25)
;; (setq ac-auto-start 2)
;; (setq ac-auto-show-menu nil ; Suggestions box must be invoked manually (see core-keymaps.el)
;; ac-use-menu-map t ; Enable ac-menu-map map when menu is open
;; ac-us-quick-help nil ; Don't show tooltips unless invoked (see core-keymaps.el)
;; ac-fuzzy-cursor-color nil)
(setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))
(add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)
(add-hook 'css-mode-hook 'ac-css-mode-setup)
(add-hook 'shell-script-mode-hook 'my/ac-files-setup)
;; (add-hook 'auto-complete-mode-hook 'ac-common-setup)
(global-auto-complete-mode t)
;; Keep auto-complete quiet until it's needed
(setq ac-auto-start nil)
(ac-config-default)
(ac-linum-workaround) ; Fix line number flux bug
;; (ac-flyspell-workaround) ; Compatibility with flyspell/make
)
;; Fix line number flux bug
(ac-linum-workaround))
:config
(progn (add-to-list 'ac-dictionary-files "~/.emacs.d/ac-dict/global")
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(progn
(add-to-list 'ac-dictionary-files "~/.emacs.d/ac-dict/global")
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(imap ac-mode-map (kbd "C-S-SPC") 'auto-complete)
(define-key ac-completing-map (kbd "<tab>") 'ac-expand)
(define-key ac-completing-map (kbd "C-n") 'ac-next)
(define-key ac-completing-map (kbd "C-p") 'ac-previous)
(define-key ac-completing-map (kbd "<F1>") 'ac-quick-help)
(define-key ac-completing-map (kbd "ESC") 'ac-stop)
(define-key ac-completing-map [return] nil)
(imap ac-mode-map (kbd "C-SPC") 'auto-complete)
;; (imap ac-mode-map (kbd "C-S-SPC") 'auto-complete)
(define-key ac-completing-map (kbd "<tab>") 'ac-expand)
(define-key ac-completing-map (kbd "C-n") 'ac-next)
(define-key ac-completing-map (kbd "C-p") 'ac-previous)
(define-key ac-completing-map (kbd "<F1>") 'ac-quick-help)
(define-key ac-completing-map (kbd "ESC") 'ac-stop)
(define-key ac-completing-map [return] nil)
;; Tell ido not to care about case
(setq completion-ignore-case t)
))
;; Tell ido not to care about case
(setq completion-ignore-case t)
))
;;
(provide 'init-ac)

View file

@ -1,6 +1,4 @@
(mapc 'my/install-package '(flycheck flyspell))
(use-package flycheck
(use-package flycheck :ensure t
:commands global-flycheck-mode
:diminish (flycheck-mode . " !")
:init (add-hook 'after-init-hook #'global-flycheck-mode)
@ -11,7 +9,7 @@
(setq flycheck-indication-mode 'right-fringe)
(setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))))
(use-package flyspell
(use-package flyspell :ensure t
:commands flyspell-mode
:diminish (flyspell-mode . " @")
:config

View file

@ -1,51 +1,44 @@
(mapc 'my/install-package
'(git-commit-mode
git-rebase-mode
gitconfig-mode
gitignore-mode
git-gutter-fringe))
(use-package git-commit-mode :ensure t
:mode (("/COMMIT_EDITMSG\\'" . git-commit-mode)
("/NOTES_EDITMSG\\'" . git-commit-mode)
("/MERGE_MSG\\'" . git-commit-mode)
("/TAG_EDITMSG\\'" . git-commit-mode)
("/PULLREQ_EDITMSG\\'" . git-commit-mode)))
(use-package git-commit-mode
:mode (("/COMMIT_EDITMSG\\'" . git-commit-mode)
("/NOTES_EDITMSG\\'" . git-commit-mode)
("/MERGE_MSG\\'" . git-commit-mode)
("/TAG_EDITMSG\\'" . git-commit-mode)
("/PULLREQ_EDITMSG\\'" . git-commit-mode)))
(use-package git-rebase-mode :ensure t
:mode ("/git-rebase-todo\\'" . git-rebase-mode))
(use-package git-rebase-mode
:mode ("/git-rebase-todo\\'" . git-rebase-mode))
(use-package gitconfig-mode :ensure t
:mode (("/\\.gitconfig\\'" . gitconfig-mode)
("/\\.git/config\\'" . gitconfig-mode)
("/git/config\\'" . gitconfig-mode)
("/\\.gitmodules\\'" . gitconfig-mode))
:config (add-hook 'gitconfig-mode-hook 'flyspell-mode))
(use-package gitconfig-mode
:mode (("/\\.gitconfig\\'" . gitconfig-mode)
("/\\.git/config\\'" . gitconfig-mode)
("/git/config\\'" . gitconfig-mode)
("/\\.gitmodules\\'" . gitconfig-mode))
:config (add-hook 'gitconfig-mode-hook 'flyspell-mode))
(use-package gitignore-mode :ensure t
:mode (("/\\.gitignore\\'" . gitignore-mode)
("/\\.git/info/exclude\\'" . gitignore-mode)
("/git/ignore\\'" . gitignore-mode)))
(use-package gitignore-mode
:mode (("/\\.gitignore\\'" . gitignore-mode)
("/\\.git/info/exclude\\'" . gitignore-mode)
("/git/ignore\\'" . gitignore-mode)))
(use-package git-gutter-fringe :ensure t
:diminish git-gutter-mode
:init
(progn
(global-git-gutter-mode t)
(add-hook 'git-gutter-mode-on-hook
(lambda() (fringe-mode '(4 . 8)))))
:config
(progn
(custom-set-variables '(git-gutter:lighter " !"))
(custom-set-variables '(git-gutter:verbosity 0))
(use-package git-gutter-fringe
:diminish git-gutter-mode
:init
(progn
(global-git-gutter-mode t)
(add-hook 'git-gutter-mode-on-hook
(lambda() (fringe-mode '(4 . 8)))))
:config
(progn
(custom-set-variables '(git-gutter:lighter " !"))
(custom-set-variables '(git-gutter:verbosity 0))
(set-face-foreground 'git-gutter-fr:modified "#555555")
(set-face-background 'git-gutter-fr:modified "#444444")
(set-face-foreground 'git-gutter-fr:deleted "#995555")
(set-face-background 'git-gutter-fr:deleted "#884444")
(set-face-foreground 'git-gutter-fr:added "#559955")
(set-face-background 'git-gutter-fr:added "#448844")
))
(set-face-foreground 'git-gutter-fr:modified "#555555")
(set-face-background 'git-gutter-fr:modified "#444444")
(set-face-foreground 'git-gutter-fr:deleted "#995555")
(set-face-background 'git-gutter-fr:deleted "#884444")
(set-face-foreground 'git-gutter-fr:added "#559955")
(set-face-background 'git-gutter-fr:added "#448844")
))

View file

@ -1,36 +1,28 @@
(mapc 'my/install-package
'(ido-ubiquitous ; enhances ido-everywhere
ido-vertical-mode ; vertical listing for ido completion
flx-ido ; enhances ido's flex matching
projectile ; project search (like ctrlp)
helm ; augments search of, well, anything
grizzl ; better searching engine for projectile
ag ; the_silver_searcher support
dired+
))
(setq dired-recursive-deletes 'always
dired-recursive-copies 'always
(add-hook 'dired-load-hook
(lambda()
(use-package dired+ :ensure t :config
(setq dired-recursive-deletes 'always
dired-recursive-copies 'always
;; if there is a dired buffer displayed in the next window, use its
;; current subdir, instead of the current subdir of this dired buffer
dired-dwim-target t)
;; if there is a dired buffer displayed in the next window, use its
;; current subdir, instead of the current subdir of this dired buffer
dired-dwim-target t))))
(add-hook 'dired-load-hook (lambda() (use-package dired+)))
(use-package ag :defer t)
(use-package helm :defer t)
(use-package ag :ensure t :defer t)
(use-package helm :ensure t :defer t)
(use-package grizzl :ensure t :defer t)
(use-package neotree :commands (neotree-show neotree-hide neotree-toggle))
(use-package projectile
:diminish projectile-mode
:config
(progn (projectile-global-mode)
(setq projectile-completion-system 'grizzl
projectile-enable-caching t)))
(use-package projectile :ensure t
:diminish projectile-mode
:config
(progn (projectile-global-mode)
(setq projectile-completion-system 'grizzl
projectile-enable-caching t)))
(use-package ido
:init
:pre-load
(progn
;; ido remaps its keys every time it's invoked, this screws with
;; custom mappings. So we've gotta neuter ido.
@ -47,14 +39,14 @@
(set-keymap-parent ido-buffer-completion-map ido-common-completion-map))
:config
(progn
(use-package ido-ubiquitous)
(use-package ido-vertical-mode)
(ido-mode 1)
(ido-vertical-mode 1)
(use-package ido-ubiquitous :ensure t)
(use-package ido-vertical-mode :ensure t :config (ido-vertical-mode 1))
(ido-everywhere 1)
(use-package flx-ido :init (flx-ido-mode 1))
(use-package flx-ido :ensure t :config (flx-ido-mode 1))
(add-to-list 'ido-ignore-files "\\`.DS_Store\\'")
(setq ido-use-faces nil

View file

@ -1,6 +1,4 @@
(my/install-package 'yasnippet)
(use-package yasnippet
(use-package yasnippet :ensure t
:diminish (yas-minor-mode . " $")
:mode (("emacs.+/snippets/" . snippet-mode))
:pre-load (progn

View file

@ -1,16 +1,21 @@
(mapc 'my/install-package '(auto-complete-clang auto-complete-c-headers))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
(add-hook 'c-mode-common-hook
(lambda()
(use-package auto-complete-clang)
(use-package auto-complete-c-headers)
(lambda()
(use-package auto-complete-clang :ensure t)
(use-package auto-complete-c-headers :ensure t)
(setq ac-sources '(ac-source-clang ac-source-c-headers ac-source-yasnippet))))
(setq ac-sources
'(ac-source-clang
ac-source-c-headers
ac-source-yasnippet
ac-source-words-in-same-mode-buffers
))))
;; TODO Better SFML & build settings
(use-package glsl-mode :ensure t
:mode (("\\.glsl\\'" . glsl-mode)
("\\.vert\\'" . glsl-mode)
("\\.frag\\'" . glsl-mode)
("\\.geom\\'" . glsl-mode)))
;;
(provide 'mod-cpp)

23
init/mod-csharp.el Normal file
View file

@ -0,0 +1,23 @@
;; TODO Make more Unity-friendly
(use-package omnisharp :ensure t :defer t
:config
(progn
;; (setq flycheck-idle-change-delay 2)
(setq omnisharp-server-executable-path "/Users/hlissner/Omni/OmniSharpServer/OmniSharp/bin/Debug/OmniSharp.exe")))
(use-package shaderlab-mode :defer t
:mode "\\.shader")
(use-package csharp-mode :ensure t
:mode "\\.cs\\'"
:config
(progn
(diminish 'abbrev-mode)
(imap csharp-mode-map (kbd "C-SPC") 'omnisharp-auto-complete))
:init
(progn
(setq csharp-want-imenu nil)
(add-hook 'csharp-mode-hook (lambda() (omnisharp-mode t) (flycheck-mode t)))))
(provide 'mod-csharp)

View file

@ -1,25 +1,14 @@
(mapc 'my/install-package
'(yaml-mode
jedi
python-mode
inf-ruby
ac-inf-ruby
rbenv
json-mode
))
(use-package yaml-mode :mode "\\.yaml\\'")
(use-package json-mode
(use-package yaml-mode :ensure t :mode "\\.yaml\\'")
(use-package json-mode :ensure t
:mode (("\\.json\\'" . json-mode)
("\\.jshintrc\\'" . json-mode)))
(use-package python
(use-package python :ensure python-mode
:mode ("\\.py\\'" . python-mode)
:interpreter ("python" . python-mode)
:config
(progn
(use-package jedi
(use-package jedi :ensure t
:init
(if (not (file-directory-p "~/.emacs.d/.python-environments/default/"))
(jedi:install-server)))
@ -31,16 +20,7 @@
;; Don't remap backspace. Leave it to autopair, please.
(define-key python-mode-map [backspace] nil)
(nmap python-mode-map (kbd "s-r")
(lambda()
(interactive)
(shell-command-on-region (point-min) (point-max) "python")))
(vmap python-mode-map (kbd "s-r")
(lambda()
(interactive)
(shell-command-on-region (region-beginning) (region-end) "python")))
)
(my/setup-run-code python-mode-map "python"))
:init
(add-hook 'python-mode-hook 'jedi:ac-setup)
;; (evil-define-key 'insert ac-mode-map (kbd "C-SPC") 'jedi:complete)
@ -53,21 +33,27 @@
:interpreter "ruby"
:config
(progn
(require 'ruby-mode-indent-fix)
(evil-set-initial-state 'inf-ruby-mode 'insert)
(my/setup-run-code ruby-mode-map "ruby")
(require 'ruby-mode-indent-fix)
(setq ruby-indent-level 4)
(setq ruby-deep-indent-paren nil)
(use-package rbenv)
(use-package inf-ruby
(setq rsense-home "/usr/local/Cellar/rsense/0.3/libexec")
(when (file-directory-p rsense-home)
(add-to-list 'load-path (concat rsense-home "/etc"))
(require 'rsense)
(add-hook 'ruby-mode-hook 'my/ac-ruby-setup))
(use-package rbenv :ensure t)
(use-package inf-ruby :ensure t
:config
(evil-set-initial-state 'inf-ruby-mode 'insert)
:init
(add-to-list 'ac-modes 'inf-ruby-mode))
(use-package ac-inf-ruby
(use-package ac-inf-ruby :ensure t
:init
(add-hook 'inf-ruby-mode-hook 'ac-inf-ruby-enable)))
)
(add-hook 'inf-ruby-mode-hook 'ac-inf-ruby-enable))))
;;
(provide 'mod-dev)

View file

@ -1,5 +1,25 @@
(use-package eclim :ensure emacs-eclim
:commands (eclim-mode global-eclim-mode)
:init
(progn
(setq eclim-eclipse-dirs '("~/.opt/eclipse")
eclim-executable "~/.opt/eclipse/eclim")
(add-hook 'java-mode-hook 'eclim-mode))
:config
(progn
;; (use-package eclim-ant)
;; (use-package eclim-maven)
(use-package eclim-problems)
(use-package eclim-project)
(use-package eclimd)
;; TODO Eclim stuff
(require 'ac-emacs-eclim-source)
(ac-emacs-eclim-java-setup)
(setq help-at-pt-display-when-idle t)
(setq help-at-pt-timer-delay 0.1)
(help-at-pt-set-timer)
))
;;
(provide 'mod-eclim)

View file

@ -1,7 +1,4 @@
(mapc 'my/install-package '(lua-mode))
(use-package lua-mode
(use-package lua-mode :ensure t
:mode "\\.lua\\'"
:interpreter "lua"
:init
@ -14,7 +11,7 @@
:group lua)
(define-key love-mode-map (kbd "s-b")
(lambda() (interactive) (shell-command (concat "open -a love.app " default-directory))))
(λ (shell-command (concat "open -a love.app " default-directory))))
(add-hook 'lua-mode-hook
(lambda()

View file

@ -1,5 +1,3 @@
(mapc 'my/install-package '(org))
;; Ex-commands
(evil-ex-define-cmd "gtd" 'open-gtd)
(evil-ex-define-cmd "notes" 'open-notes)
@ -18,18 +16,8 @@
(funcall fun)
(evil-append nil))
(defun my/gtd()
"Load up my notes folder in dropbox"
(interactive)
(find-file "~/Dropbox/notes/gtd.org"))
(defun my/notes()
"Load up my notes folder in dropbox"
(interactive)
(ido-find-file-in-dir "~/Dropbox/notes"))
;;
(use-package org
(use-package org :ensure t
:mode ("\\.org\\'" . org-mode)
:init
(progn
@ -48,7 +36,7 @@
(setq org-hide-leading-stars t)
(setq org-export-backends '(ascii html latex md))
(setq org-todo-keywords
'((sequence "TODO" "DOING" "VERIFY" "WAITING" "|" "DONE" "DELEGATED")))
'((sequence "TODO" "DOING" "VERIFY" "WAITING" "|" "DONE" "DELEGATED" "CANCELLED")))
(setq org-tag-alist '(("@work" . ?b)
("@home" . ?h)
@ -59,7 +47,7 @@
("@phone" . ?p)
("@reading" . ?r)
("@computer" . ?l)
("quantified" . ?q)
("projects" . ?q)
("lowenergy" . ?0)
("highenergy" . ?1)))
@ -74,6 +62,20 @@
("e" "Excerpt" entry (file (concat org-directory "/excerpts.org")) "* %?")
))
(setq org-agenda-custom-commands
'(("x" agenda)
("y" agenda*)
("w" todo "WAITING")
("W" todo-tree "WAITING")
("tp" tags "+Projects")
("tg" tags-todo "+gamedev")
("tw" tags-tree "+webdev")
("f" occur-tree "\\<FIXME\\>")
("h" . "HOME+Name tags searches") ; description for "h" prefix
("hl" tags "+home+Lisa")
("hp" tags "+home+Peter")
("hk" tags "+home+Kim")))
(define-minor-mode evil-org-mode
"Buffer local minor mode for evil-org"
:init-value nil
@ -82,6 +84,9 @@
:group 'evil-org)
;; Keymaps
;; (emap org-agenda-mode-map
;; ...)
(imap evil-org-mode-map
(kbd "<s-return>") 'org-insert-heading-after-current)
@ -90,11 +95,14 @@
)
(nmap evil-org-mode-map
",l" 'org-insert-link
",s" 'org-schedule
",a" 'org-attach
",A" 'org-agenda
",t" 'org-todo
",T" 'org-show-todo-tree
",\\" 'org-match-sparse-tree
",+" 'org-align-all-tags
"gh" 'outline-up-heading
"gj" (if (fboundp 'org-forward-same-level) ;to be backward compatible with older org version
'org-forward-same-level
@ -112,7 +120,9 @@
"<" 'org-metaleft
">" 'org-metaright
"-" 'org-cycle-list-bullet
(kbd "RET") (lambda() (interactive) (org-insert-heading-after-current) (evil-insert-state))
(kbd "SPC") 'org-todo
(kbd "M-SPC") (lambda() (interactive) (org-todo "DONE"))
(kbd "TAB") 'org-cycle
)

28
init/mod-shell.el Normal file
View file

@ -0,0 +1,28 @@
(setq shell-file-name "zsh")
(setq comint-process-echoes t)
(setq comint-prompt-regexp "^$ ")
(setq comint-input-ignoredups t)
(setq comint-completion-addsuffix t)
(setq comint-prompt-read-only t)
(setq comint-get-old-input (lambda () ""))
;; Setup auto-complete-esque path completion
(add-to-list 'ac-modes 'shell-mode)
(add-hook 'shell-mode-hook (lambda ()
(linum-mode 0)
(yas-minor-mode -1)
(enable-path-completion)
;; I want ac to silently offer completion, but leave
;; the actual tab-work to the underlying shell (ZSH is
;; powerful enough!)
(local-unset-key [tab])
(evil-define-key 'normal shell-mode-map "j" nil)
(evil-define-key 'normal shell-mode-map "k" nil)
))
;;
(provide 'mod-shell)

View file

@ -1,8 +1,6 @@
(mapc 'my/install-package '(markdown-mode))
(add-hook 'text-mode-hook 'my/enable-hard-wrap)
(use-package markdown-mode
(use-package markdown-mode :ensure t
:mode (("\\.md\\'" . markdown-mode)
("/README\\'" . markdown-mode))
:init

View file

@ -1,55 +1,55 @@
(mapc 'my/install-package
'(emmet-mode
scss-mode
web-mode
haml-mode
tern
tern-auto-complete
php-mode
rainbow-mode ; highlight color codes
))
(use-package rainbow-mode
(use-package rainbow-mode :ensure t
:defer t
:init (add-hook 'scss-mode 'rainbow-mode))
(use-package scss-mode :mode "\\.scss\\'")
(use-package haml-mode :mode "\\.haml\\'")
(use-package web-mode
:mode (("\\.\\(p\\)?htm\\(l\\)?\\'" . web-mode)
("\\.tpl\\(\\.php\\)?\\'" . web-mode)
("\\.erb\\'" . web-mode)))
(use-package scss-mode :ensure t
:mode "\\.scss\\'"
:config
(add-hook 'scss-mode-hook (lambda() (add-to-list 'ac-sources 'ac-css-mode-setup))))
(use-package php-mode
:mode "\\.php\\'"
(use-package haml-mode :ensure t :mode "\\.haml\\'")
(use-package web-mode :ensure t
:mode (("\\.\\(p\\)?htm\\(l\\)?\\'" . web-mode)
("\\.tpl\\(\\.php\\)?\\'" . web-mode)
("\\.erb\\'" . web-mode)))
(use-package php-mode :ensure t
:mode (("\\.php\\'" . php-mode)
("\\.inc\\'" . php-mode))
:interpreter "php"
:config
(setq php-template-compatibility nil))
(progn
(my/setup-run-code php-mode-map "php")
(setq php-template-compatibility nil)))
(use-package tern
:commands (tern-mode tern-ac-complete tern-ac-setup)
:config
(progn (use-package tern-auto-complete)
(setq tern-ac-on-dot nil))
(use-package js-mode
:mode "\\.js\\'"
:interpreter "node")
:init
;; replace auto-complete with tern-ac-complete only in js-mode
(add-hook 'js-mode-hook
(lambda ()
(imap ac-mode-map (kbd "C-SPC") 'tern-ac-complete)
(tern-mode t)
(tern-ac-setup))))
(use-package tern :ensure t
:commands tern-mode
:config
(progn
(my/setup-run-code js-mode-map "node")
(use-package tern-auto-complete :ensure t
:config (setq tern-ac-on-dot nil)))
:init
;; replace auto-complete with tern-ac-complete only in js-mode
(add-hook 'js-mode-hook
(lambda ()
(tern-mode t)
(imap js-mode-map (kbd "C-SPC") 'tern-ac-complete)
(tern-ac-setup))))
(use-package emmet-mode
:defer t
:config
(progn
(imap 'emmet-mode-map (kbd "s-e") 'emmet-expand-line)
(add-hook 'scss-mode-hook 'emmet-mode)
(add-hook 'web-mode-hook 'emmet-mode)
(add-hook 'nxml-mode-hook 'emmet-mode))
)
(use-package emmet-mode :ensure t
:defer t
:config
(imap 'emmet-mode-map (kbd "s-e") 'emmet-expand-line)
:init
(progn
(add-hook 'scss-mode-hook 'emmet-mode)
(add-hook 'web-mode-hook 'emmet-mode)
(add-hook 'nxml-mode-hook 'emmet-mode)))
;;
(provide 'mod-webdev)

100
init/my-defuns.el Normal file
View file

@ -0,0 +1,100 @@
;;;; Macros ;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro λ (&rest body)
`(lambda () (interactive) ,@body))
;; vimmish keymapping shortcuts
(defmacro nmap (map &rest body)
`(evil-define-key 'normal ,map ,@body))
(defmacro vmap (map &rest body)
`(evil-define-key 'visual ,map ,@body))
(defmacro imap (map &rest body)
`(evil-define-key 'insert ,map ,@body))
(defmacro emap (map &rest body)
`(evil-define-key 'emacs ,map ,@body))
;; insert-mode key-chord mapping
(defmacro ichmap (key command)
`(key-chord-define evil-insert-state-map ,key ,command))
;;;; Commands ;;;;;;;;;;;;;;;;;;;;;;
;; File navigation defuns
(defun my/initfiles ()
(interactive)
(ido-find-file-in-dir my/dir))
(defun my/open-scratch ()
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(text-mode))
(defun my/expand-space ()
(interactive)
(save-excursion (insert " ")))
(defun my/expand-backspace ()
(interactive)
(save-excursion (delete-char 1))
(delete-backward-char 1))
(defun my/enable-hard-wrap()
(interactive)
(auto-fill-mode 1))
(defun my/byte-recompile ()
(interactive)
(byte-recompile-file (expand-file-name "init.el" my/dir))
(byte-recompile-directory my/init-dir 0)
(byte-recompile-directory my/elisp-dir 0))
(defun my/notes()
"Load up my notes folder in dropbox"
(interactive)
(ido-find-file-in-dir "~/Dropbox/notes"))
(defun my/kill-all-buffers ()
(interactive)
(mapc 'kill-buffer (buffer-list))
(message "All buffers killed"))
(defun my/kill-other-buffers ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer))))
(message "All other buffers killed"))
(defun my/kill-non-project-buffers ()) ; TODO Implement this
;;;; Ac-setup Defuns ;;;;;;;;;;;;;;
(defun my/ac-ruby-setup()
"Set up RSense and ac-sources"
(setq ac-sources (append '(ac-source-rsense ac-source-yasnippet) ac-sources)))
(defun my/ac-files-setup()
"Set up filepath completion sources"
(setq ac-sources (append '(ac-source-filename ac-source-files-in-current-dir) ac-sources)))
(defun my/setup-run-code(mode interpreter)
(interactive)
(nmap mode (kbd "s-r")
(λ (shell-command-on-region (point-min) (point-max) interpreter)))
(vmap mode (kbd "s-r")
(λ (shell-command-on-region (region-beginning) (region-end) interpreter))))
;;;; Mac-specific Defuns ;;;;;;;;;
(when is-mac
;; Send current file to OSX apps
(defun open-file-with (path &optional appName)
(if (not (string= "" appName))
(setq appName (concat "-a " appName ".app")))
(shell-command (concat "open " appName " " path)))
(defun open-with (appName)
(interactive)
(open-file-with (buffer-file-name) appName))
(defun send-to-transmit () (interactive) (open-with "Transmit"))
(defun send-to-launchbar () (interactive) (open-with "LaunchBar"))
(defun send-dir-to-launchbar () (interactive) (open-file-with default-directory "LaunchBar"))
(defun send-dir-to-finder () (interactive) (open-file-with default-directory "Finder")))
;;
(provide 'my-defuns)