|
@@ -45,238 +45,225 @@
|
|
|
(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)
|
|
|
- )
|
|
|
-
|
|
|
-;; Recent Files
|
|
|
-(when (require 'recentf nil 'noerror)
|
|
|
- (recentf-mode 1)
|
|
|
- (setq recentf-max-menu-items 25)
|
|
|
- )
|
|
|
-
|
|
|
|
|
|
;;;; Packages
|
|
|
|
|
|
;; 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
|
|
|
- )
|
|
|
- )
|
|
|
- )
|
|
|
+(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)
|
|
|
+
|
|
|
+;; 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)
|
|
|
|
|
|
+;; 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)
|
|
|
|
|
|
;;; undo-tree
|
|
|
-(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
|
|
|
-(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)
|
|
|
- )
|
|
|
- )
|
|
|
+;; 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")))
|
|
|
|
|
|
-;;; Relative line numbers
|
|
|
-(when (require 'linum-relative nil 'noerror)
|
|
|
- (setq linum-relative-current-symbol "")
|
|
|
- (linum-mode)
|
|
|
- (linum-relative-global-mode)
|
|
|
- )
|
|
|
+;;; 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
|
|
|
-(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))
|
|
|
- )
|
|
|
+(require '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)
|
|
|
- )
|
|
|
+;; 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)
|
|
|
|
|
|
-;;; 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
|
|
|
- )
|
|
|
- )
|
|
|
+;; 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))
|
|
|
|
|
|
- )
|
|
|
+;;; 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)
|
|
|
|
|
|
+;;; Relative line numbers
|
|
|
+
|
|
|
+(require 'linum-relative)
|
|
|
+(setq linum-relative-current-symbol "")
|
|
|
+(linum-mode)
|
|
|
+(linum-relative-global-mode)
|
|
|
+
|
|
|
+;;; flymd
|
|
|
+
|
|
|
+; 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
|
|
|
+ )
|
|
|
+
|
|
|
+;; Magit
|
|
|
+(require 'magit)
|
|
|
+(setq evil-magit-state 'normal)
|
|
|
+(require 'evil-magit)
|
|
|
+(global-magit-file-mode)
|
|
|
|
|
|
;;;; System-specific configs
|
|
|
|
|
@@ -313,11 +300,5 @@
|
|
|
'(initial-scratch-message "")
|
|
|
'(package-selected-packages
|
|
|
(quote
|
|
|
- (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))))
|
|
|
+ (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.
|
|
|
- )
|