Ver Fonte

replace requires to make plugins optional, plugin installs are asked

Josh Bicking há 8 anos atrás
pai
commit
e7f2755168
1 ficheiros alterados com 226 adições e 206 exclusões
  1. 226 206
      emacs

+ 226 - 206
emacs

@@ -1,13 +1,14 @@
 ;; TODO:
 ;; Easier undo tree traversal
-;; troubleshoot spelling navigation and test it some more
+;; Test easing spelling navigation, map ]s and [s to next and previously wrong word
+;; Replace evil-leader with general
 
 
 ;;;; Base
 
 ;; Disable beep & flash
  (setq ring-bell-function 'ignore)
- 
+
 ;; All yes or no prompts are y or n
 (defalias 'yes-or-no-p 'y-or-n-p)
 
@@ -44,225 +45,238 @@
   (tool-bar-mode -1)
   )
 
+;;; Spelling
+(when (require 'flyspell nil 'noerror)
+  ;; 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)))))
+
+  (global-set-key (kbd "C-=") 'flyspell-goto-next-error)
+  (global-set-key (kbd "M-=") 'flyspell-goto-previous-error)
+  )
 
-;;;; Packages
-
-;; Package installation
-(require 'package)
-
-(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
-(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
-(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/"))
-
-(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)
-  (mapcar
-   (lambda (package)
-	 (if (package-installed-p package)
-		 nil
-	   (if (y-or-n-p (format "Package %s is missing. Install it? " package))
-		   (package-install package)
-		 package)))
-   packages))
-
-;; Make sure to have downloaded archive description.
-(or (file-exists-p package-user-dir)
-	(package-refresh-contents))
-
-;; Activate installed packages
-(package-initialize)
-
-;; Check that all packages are installed
-(ensure-package-installed
- 'iedit
- 'magit
- 'evil-magit
- 'undo-tree
- 'evil
- 'evil-leader
- 'evil-tabs
- 'powerline-evil
- 'monokai-theme
- 'auto-complete
- 'ac-html
- 'fuzzy
- 'general
- 'linum-relative
- 'web-mode
- 'multi-term
- 'relative-line-numbers
- 'flymd
- 'markdown-mode
- )
-
-;;; Evil
-
-;; No C-i jump
-(setq evil-want-C-i-jump nil)
-
-;; Evil tabs
-(global-evil-tabs-mode t)
+;; Recent Files
+(when (require 'recentf nil 'noerror)
+  (recentf-mode 1)
+  (setq recentf-max-menu-items 25)
+  )
 
-;; Default to evil mode
-(evil-mode t)
 
-;; 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)
+;;;; Packages
 
-;; 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)
+;; Package installation
+(when (require 'package nil 'noerror)
+
+  (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
+  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
+  (add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/"))
+
+  (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)
+    (mapcar
+     (lambda (package)
+  	 (if (package-installed-p package)
+  		 nil
+  	   (if (y-or-n-p (format "Package %s is missing. Install it? " package))
+  		   (package-install package)
+  		 package)))
+     packages))
+
+  ;; Make sure to have downloaded archive description.
+  (or (file-exists-p package-user-dir)
+  	(package-refresh-contents))
+
+  ;;; Activate installed packages
+  ;(package-initialize)
+
+  ;; Check that all packages are installed
+  (defun install-packages ()
+    (interactive)
+    (ensure-package-installed
+     'iedit
+     'undo-tree
+     'monokai-theme
+     'auto-complete
+     'ac-html
+     'linum-relative
+     'relative-line-numbers
+     'web-mode
+     'flymd
+     'evil
+     'evil-leader
+     'evil-tabs
+     'powerline-evil
+     'magit
+     'evil-magit
+     'multi-term
+     'markdown-mode
+     )
+    )
+  )
 
-;; Vim removing of windows
-(define-key evil-window-map (kbd "q") 'delete-window)
-(define-key evil-window-map (kbd "C-q") 'delete-window)
 
 ;;; undo-tree
-
-;; 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-evil-center-color-theme)
-(custom-set-faces
- ;; custom-set-faces was added by Custom.
- ;; If you edit it by hand, you could mess it up, so be careful.
- ;; Your init file should contain only one such instance.
- ;; If there is more than one, they won't work right.
- '(powerline-evil-normal-face ((t (:background "#859900")))))
-
-;;; Recent Files
-
-(require 'recentf)
-(recentf-mode 1)
-(setq recentf-max-menu-items 25)
-
-;;; Web mode
-
-(require 'web-mode)
-
-;; 2 spaces for an indent
-(defun my-web-mode-hook ()
-  "Hooks for Web mode."
-  (setq web-mode-markup-indent-offset 2)
-)
-(add-hook 'web-mode-hook  'my-web-mode-hook)
-
-;; Auto-enable web-mode when opening relevent files
-(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
-(add-to-list 'auto-mode-alist '("\\.hbs\\'" . web-mode))
-(add-to-list 'auto-mode-alist '("\\.handlebars\\'" . web-mode))
+(when (require 'undo-tree nil 'noerror)
+  ;; 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")))
+     )
 
 ;;; Autocomplete
-
-(require 'auto-complete)
-(eval-and-compile
-  (require 'auto-complete nil 'noerror))
-(ac-config-default)
-(setq ac-auto-start t)
-(global-set-key (kbd "<backtab>") 'ac-previous)
-(require 'ac-html)
-(setq web-mode-ac-sources-alist
-  '(("css" . (ac-source-css-property))
-    ("html" . (ac-source-words-in-buffer ac-source-abbrev))))
-(ac-linum-workaround)
-
-;;; Spelling
-
-;; map ]s and [s to next and previously wrong word
-
-;; 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)))))
-
-(global-set-key (kbd "C-=") 'flyspell-goto-next-error)
-(global-set-key (kbd "M-=") 'flyspell-goto-previous-error)
+(when (require 'auto-complete nil 'noerror)
+  (eval-and-compile
+    (require 'auto-complete nil 'noerror))
+  (ac-config-default)
+  (setq ac-auto-start t)
+  (global-set-key (kbd "<backtab>") 'ac-previous)
+
+  (when (require 'ac-html nil 'noerror)
+    (setq web-mode-ac-sources-alist
+      '(("css" . (ac-source-css-property))
+        ("html" . (ac-source-words-in-buffer ac-source-abbrev))))
+    (ac-linum-workaround)
+    )
+  )
 
 ;;; Relative line numbers
+(when (require 'linum-relative nil 'noerror)
+  (setq linum-relative-current-symbol "")
+  (linum-mode)
+  (linum-relative-global-mode)
+  )
 
-(require 'linum-relative)
-(setq linum-relative-current-symbol "")
-(linum-mode)
-(linum-relative-global-mode)
+;;; Web mode
+(when (require 'web-mode nil 'noerror)
+  ;; 2 spaces for an indent
+  (defun my-web-mode-hook ()
+    "Hooks for Web mode."
+    (setq web-mode-markup-indent-offset 2)
+  )
+  (add-hook 'web-mode-hook  'my-web-mode-hook)
+
+  ;; Auto-enable web-mode when opening relevent files
+  (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
+  (add-to-list 'auto-mode-alist '("\\.hbs\\'" . web-mode))
+  (add-to-list 'auto-mode-alist '("\\.handlebars\\'" . web-mode))
+  )
 
 ;;; flymd
+(when (require 'flymd nil 'noerror)
+  ; flymd.md and flymd.html are deleted upon markdown buffer killed
+  (setq flymd-close-buffer-delete-temp-files t)
+  )
 
-; flymd.md and flymd.html are deleted upon markdown buffer killed
-(setq flymd-close-buffer-delete-temp-files t)
-
-;;; evil-leader
-
-;; Evil leader is Space
-(global-evil-leader-mode)
-(evil-leader/set-leader "<SPC>")
-
-;; Leader keybinds
-(evil-leader/set-key
- "d" 'diff-buffer-with-file
- "b" 'buffer-menu
- "f" '(lambda ()  (interactive) (dired '"./"))
- "u" 'undo-tree-visualize
- "m" 'recentf-open-files
- "l" 'auto-fill-mode
- "s" '(lambda () (interactive) (if flyspell-mode (funcall-interactively 'flyspell-mode '0) (flyspell-mode) (flyspell-buffer)))
- "a" 'auto-complete-mode
- "g" 'magit-status
- "M-g" 'magit-dispatch-popup
- )
+;;; Evil
+(when (require 'evil nil 'noerror)
+  ;; Default to evil mode
+  (evil-mode t)
+
+  ;; No C-i jump
+  (setq evil-want-C-i-jump nil)
+
+  ;; 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)
+
+  ;; Vim removing of windows
+  (define-key evil-window-map (kbd "q") 'delete-window)
+  (define-key evil-window-map (kbd "C-q") 'delete-window)
+
+  ;; Evil tabs
+  (when (require 'evil-tabs nil 'noerror)
+    (global-evil-tabs-mode t)
+    )
+
+  ;;; powerline-evil
+  (when (require 'powerline-evil nil 'noerror)
+    (powerline-evil-center-color-theme)
+    (custom-set-faces
+     ;; custom-set-faces was added by Custom.
+     ;; If you edit it by hand, you could mess it up, so be careful.
+     ;; Your init file should contain only one such instance.
+     ;; If there is more than one, they won't work right.
+     '(powerline-evil-normal-face ((t (:background "#859900")))))
+    )
+
+  ;;; Magit & evil-magit
+  (when (require 'magit nil 'noerror)
+    (when (require 'evil-magit nil 'noerror)
+      (setq evil-magit-state 'normal)
+      (global-magit-file-mode)
+      )
+    )
+
+  ;;; evil-leader
+  (when (require 'evil-leader nil 'noerror)
+    ;; Evil leader is Space
+    (global-evil-leader-mode)
+    (evil-leader/set-leader "<SPC>")
+
+    ;; Leader keybinds
+    (evil-leader/set-key
+     "d" 'diff-buffer-with-file
+     "b" 'buffer-menu
+     "f" '(lambda ()  (interactive) (dired '"./"))
+     "u" 'undo-tree-visualize
+     "m" 'recentf-open-files
+     "l" 'auto-fill-mode
+     "s" '(lambda () (interactive) (if flyspell-mode (funcall-interactively 'flyspell-mode '0) (flyspell-mode) (flyspell-buffer)))
+     "a" 'auto-complete-mode
+     "g" 'magit-status
+     "M-g" 'magit-dispatch-popup
+     )
+    )
+
+  )
 
-;; Magit
-(require 'magit)
-(setq evil-magit-state 'normal)
-(require 'evil-magit)
-(global-magit-file-mode)
 
 ;;;; System-specific configs
 
@@ -299,5 +313,11 @@
  '(initial-scratch-message "")
  '(package-selected-packages
    (quote
-    (flymd relative-line-numbers multi-term ac-html web-mode evil-magit linum-relative general fuzzy auto-complete evil-tabs powerline-evil magit iedit evil-leader))))
+    (monokai-theme undo-tree flymd relative-line-numbers multi-term ac-html web-mode evil-magit linum-relative general fuzzy auto-complete evil-tabs powerline-evil 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.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ )