浏览代码

added auto-complete, spell check, evil hotkeys, added some config options from vim config

Josh Bicking 8 年之前
父节点
当前提交
cc90c3ed80
共有 1 个文件被更改,包括 121 次插入38 次删除
  1. 121 38
      emacs

+ 121 - 38
emacs

@@ -1,3 +1,25 @@
+;; Disable beep
+(setq visible-bell 1)
+
+;; All yes or no prompts are y or n
+(defalias 'yes-or-no-p 'y-or-n-p)
+
+;; Never follow symlinks
+(setq vc-follow-symlinks nil)
+
+;; Leave the OS clipboard alone (use evil's "+ and "* instead)
+(setq x-select-enable-clipboard nil)
+
+;; Text and Notes
+(setq sentence-end-double-space nil)
+
+;; Save minibar history
+(savehist-mode 1)
+(setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
+
+;;;; Packages
+
+;; Package installation
 (require 'package)
 
 (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
@@ -7,10 +29,8 @@
 (setq package-enable-at-startup nil)
 (package-initialize)
 
+;; Function to ensure every package in installed, and ask if it isn't.
 (defun ensure-package-installed (&rest packages)
-  "Assure every package is installed, ask for installation if it’s not.
-
-Return a list of installed packages or nil for every skipped package."
   (mapcar
    (lambda (package)
 	 (if (package-installed-p package)
@@ -20,7 +40,7 @@ Return a list of installed packages or nil for every skipped package."
 		 package)))
    packages))
 
-;; make sure to have downloaded archive description.
+;; Make sure to have downloaded archive description.
 (or (file-exists-p package-user-dir)
 	(package-refresh-contents))
 
@@ -35,44 +55,56 @@ Return a list of installed packages or nil for every skipped package."
  'evil
  'evil-leader
  'evil-tabs
- 'zenburn-theme
  'powerline-evil
+ 'zenburn-theme
+ 'auto-complete
+ 'fuzzy
+ 'general
+ 'relative-line-numbers
  )
 
-;; Evil
+
+;;;; Evil
 
 ;; Evil leader is Space
-;; (global-evil-leader-mode)
-;; (evil-leader/set-leader "<SPC>")
+(global-evil-leader-mode)
+(evil-leader/set-leader "<SPC>")
 
 ;; Evil tabs
-;; (global-evil-tabs-mode t)
+(global-evil-tabs-mode t)
 
 ;; Default to evil mode
-;; (require 'evil)
-;; (evil-mode t)
+(evil-mode t)
 
 ;; Leader keybinds
-;; (evil-leader/set-key
-;;   "u" 'undo-tree-visualize
-;;   "m" 'recentf-open-files)
+(evil-leader/set-key
+ "u" 'undo-tree-visualize
+ "m" 'recentf-open-files
+ "l" 'auto-fill-mode
+ "s" 'flyspell-mode)
+
+;; Move all elements of evil-emacs-state-modes to evil-motion-state-modes
+(setq evil-motion-state-modes (append evil-emacs-state-modes evil-motion-state-modes))
+(setq evil-emacs-state-modes nil)
 
 ;; Delete info bindings for evil to take over
-;; (define-key Info-mode-map "g" nil)
-;; (define-key Info-mode-map "n" nil)
-;; (define-key Info-mode-map "p" nil)
+(define-key Info-mode-map "g" nil)
+(define-key Info-mode-map "n" nil)
+(define-key Info-mode-map "p" nil)
+
+
+;;;; Files
 
 ;; Disable file backup
 (setq make-backup-files nil)
 
-;; Save undo history under .emacs.d/undo
+;; Instead save undo history under .emacs.d/undo
 (setq undo-tree-auto-save-history t
          undo-tree-history-directory-alist
          `(("." . ,(concat user-emacs-directory "undo"))))
    (unless (file-exists-p (concat user-emacs-directory "undo"))
 (make-directory (concat user-emacs-directory "undo")))
 
-
 ;; Powerline
 (require 'powerline)
 (powerline-vim-theme)
@@ -81,23 +113,76 @@ Return a list of installed packages or nil for every skipped package."
 (require 'recentf)
 (recentf-mode 1)
 (setq recentf-max-menu-items 25)
-(global-set-key "\C-x\ \C-r" 'recentf-open-files)
-
-
-;; Leave the clipboard alone
-(setq x-select-enable-clipboard nil)
-
-;; All yes or no prompts are y or n
-(defalias 'yes-or-no-p 'y-or-n-p)
 
-;; Never follow symlinks
-(setq vc-follow-symlinks nil)
-
-;; Text and Notes
-(setq sentence-end-double-space nil)
-;; Save minibar history
-(savehist-mode 1)
-(setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
+;; Autocomplete
+(require 'auto-complete)
+(ac-config-default)
+(define-key ac-mode-map (kbd "TAB") 'auto-complete)
+(setq ac-auto-start nil)
+(global-set-key (kbd "<backtab>") 'ac-previous)
+
+;; Spelling
+;; TODO Mess with how I want spelling to be done. Maybe enable spelling on auto-fill mode?
+
+;; map ]s and [s to next and previously wrong word
+(require 'general)
+(general-evil-setup)
+(general-nmap "]"
+	      (general-key-dispatch 'evil-change
+				    "s" 'flyspell-goto-next-error
+				    ))
+(general-vmap "]" 'evil-change)
+
+;; move point to previous error
+;; based on code by hatschipuh at
+;; http://emacs.stackexchange.com/a/14912/2017
+(defun flyspell-goto-previous-error (arg)
+  "Go to arg previous spelling error."
+  (interactive "p")
+  (while (not (= 0 arg))
+    (let ((pos (point))
+          (min (point-min)))
+      (if (and (eq (current-buffer) flyspell-old-buffer-error)
+               (eq pos flyspell-old-pos-error))
+          (progn
+            (if (= flyspell-old-pos-error min)
+                ;; goto beginning of buffer
+                (progn
+                  (message "Restarting from end of buffer")
+                  (goto-char (point-max)))
+              (backward-word 1))
+            (setq pos (point))))
+      ;; seek the next error
+      (while (and (> pos min)
+                  (let ((ovs (overlays-at pos))
+                        (r '()))
+                    (while (and (not r) (consp ovs))
+                      (if (flyspell-overlay-p (car ovs))
+                          (setq r t)
+                        (setq ovs (cdr ovs))))
+                    (not r)))
+        (backward-word 1)
+        (setq pos (point)))
+      ;; save the current location for next invocation
+      (setq arg (1- arg))
+      (setq flyspell-old-pos-error pos)
+      (setq flyspell-old-buffer-error (current-buffer))
+      (goto-char pos)
+      (if (= pos min)
+          (progn
+            (message "No more miss-spelled word!")
+            (setq arg 0))
+        (forward-word)))))
+
+(general-nmap "["
+	      (general-key-dispatch 'evil-change
+				    "s" 'flyspell-goto-previous-error
+				    ))
+(general-vmap "[" 'evil-change)
+
+;; Relative line numbers
+(require 'relative-line-numbers)
+(global-relative-line-numbers-mode)
 
 ;; TODO:
 ;; Go through the tutorials, skim the manuals
@@ -110,8 +195,6 @@ Return a list of installed packages or nil for every skipped package."
 ;; magit bindings
 
 
-
-
 (custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
@@ -130,7 +213,7 @@ Return a list of installed packages or nil for every skipped package."
 ")
  '(package-selected-packages
    (quote
-    (evil-tabs powerline-evil zenburn-theme magit iedit evil-leader))))
+    (relative-line-numbers general fuzzy auto-complete evil-tabs powerline-evil zenburn-theme magit iedit evil-leader))))
 (custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.