|
@@ -28,160 +28,30 @@
|
|
|
(eval-when-compile
|
|
|
(require 'use-package))
|
|
|
|
|
|
-;; Keep track of whether or not we need to refresh package contents
|
|
|
-(setq packages-installed-this-session 0)
|
|
|
-
|
|
|
-;; Function to ensure every package in installed, and ask if it isn't.
|
|
|
-(defun ensure-package-installed (prompt &rest packages)
|
|
|
- (mapcar
|
|
|
- (lambda (package)
|
|
|
- (if (package-installed-p package)
|
|
|
- nil
|
|
|
- (if (or prompt (y-or-n-p (format "Package %s is missing. Install it? " package)))
|
|
|
- ;; If this is the 1st install this session, update before install
|
|
|
- (cond ((eq packages-installed-this-session 0)
|
|
|
- (package-refresh-contents)
|
|
|
- (setq packages-installed-this-session 1)
|
|
|
- (package-install package))
|
|
|
- (t (package-install package))
|
|
|
- nil)
|
|
|
- package)))
|
|
|
- packages))
|
|
|
-
|
|
|
-;; List of packages to install on all systems
|
|
|
-(setq required-packages
|
|
|
- '(
|
|
|
- use-package
|
|
|
- bind-key
|
|
|
- iedit
|
|
|
- magit
|
|
|
- evil-magit
|
|
|
- magithub
|
|
|
- undo-tree
|
|
|
- evil
|
|
|
- evil-leader
|
|
|
- powerline-evil
|
|
|
- monokai-theme
|
|
|
- challenger-deep-theme
|
|
|
- linum-relative
|
|
|
- multi-term
|
|
|
- neotree
|
|
|
- evil-numbers
|
|
|
- editorconfig
|
|
|
- company
|
|
|
- ivy
|
|
|
- flx
|
|
|
- flycheck
|
|
|
- flycheck-pos-tip
|
|
|
- evil-surround
|
|
|
- diminish
|
|
|
- dtrt-indent
|
|
|
- undohist
|
|
|
- evil-ediff
|
|
|
- rainbow-delimiters
|
|
|
- rainbow-identifiers
|
|
|
- rainbow-mode
|
|
|
- hydra
|
|
|
- ))
|
|
|
-
|
|
|
-;; List of optional packages
|
|
|
-(setq optional-packages
|
|
|
- '(
|
|
|
- flymd
|
|
|
- markdown-mode
|
|
|
- latex-preview-pane
|
|
|
- tide
|
|
|
- web-mode
|
|
|
- racket-mode
|
|
|
- haskell-mode
|
|
|
- realgud
|
|
|
- emojify
|
|
|
- ))
|
|
|
|
|
|
|
|
|
-;; Check that all packages are installed
|
|
|
-(apply 'ensure-package-installed t required-packages)
|
|
|
+;;;; Required packages
|
|
|
|
|
|
-;; Declare function for optional packages
|
|
|
-(defun optional-packages-install ()
|
|
|
- (interactive)
|
|
|
- (apply 'ensure-package-installed nil optional-packages))
|
|
|
+(use-package diminish
|
|
|
+ :ensure t)
|
|
|
|
|
|
-
|
|
|
-(require 'diminish)
|
|
|
(diminish 'visual-line-mode)
|
|
|
(diminish 'abbrev-mode)
|
|
|
|
|
|
-;;; Flyspell
|
|
|
-
|
|
|
-;; 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))
|
|
|
- ))))
|
|
|
-
|
|
|
-;; Add folds to programming modes
|
|
|
-(add-hook 'prog-mode-hook
|
|
|
- 'hs-minor-mode)
|
|
|
-(add-hook 'hs-minor-mode-hook
|
|
|
- (lambda ()
|
|
|
- (diminish 'hs-minor-mode)))
|
|
|
-
|
|
|
-
|
|
|
(use-package autorevert
|
|
|
:diminish auto-revert-mode)
|
|
|
|
|
|
+(use-package bind-key
|
|
|
+ :ensure t)
|
|
|
|
|
|
-(use-package recentf
|
|
|
- :config
|
|
|
- (recentf-mode 1)
|
|
|
- (setq recentf-max-saved-items 200
|
|
|
- recentf-max-menu-items 15))
|
|
|
-
|
|
|
-
|
|
|
-(defun hail (x)
|
|
|
- (use-package x))
|
|
|
-(hail 'hydra)
|
|
|
+(use-package iedit
|
|
|
+ :ensure t)
|
|
|
|
|
|
+(use-package hydra
|
|
|
+ :ensure t)
|
|
|
|
|
|
(use-package evil
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(evil-mode t)
|
|
|
(setq evil-want-C-i-jump nil)
|
|
@@ -258,8 +128,8 @@
|
|
|
:map evil-operator-state-map
|
|
|
("lw" . evil-little-word)))
|
|
|
|
|
|
-
|
|
|
(use-package evil-numbers
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
;; Increment and decrement (evil-numbers)
|
|
|
(defhydra hydra-numbers (global-map "C-x")
|
|
@@ -267,12 +137,12 @@
|
|
|
("a" evil-numbers/inc-at-pt "increment")
|
|
|
("x" evil-numbers/dec-at-pt "decrement")))
|
|
|
|
|
|
-
|
|
|
(use-package undo-tree
|
|
|
+ :ensure t
|
|
|
:diminish undo-tree-mode)
|
|
|
|
|
|
-
|
|
|
(use-package undohist
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
;; Save undo history under .emacs.d/undohist
|
|
|
(setq undohist-directory "~/.emacs.d/undohist")
|
|
@@ -281,7 +151,6 @@
|
|
|
|
|
|
(undohist-initialize))
|
|
|
|
|
|
-
|
|
|
(if (display-graphic-p)
|
|
|
;; pretty powerline in X
|
|
|
(require 'init-powerline)
|
|
@@ -295,21 +164,8 @@
|
|
|
(use-package powerline-evil
|
|
|
:ensure t))
|
|
|
|
|
|
-(use-package web-mode
|
|
|
- :config
|
|
|
- ;; 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)))
|
|
|
-
|
|
|
-
|
|
|
(use-package linum-relative
|
|
|
+ :ensure t
|
|
|
:diminish linum-relative-mode
|
|
|
:config
|
|
|
(setq linum-relative-current-symbol "")
|
|
@@ -317,39 +173,20 @@
|
|
|
(linum-relative-global-mode)
|
|
|
(defun linum-update-window-scale-fix (win)
|
|
|
"fix linum for scaled text"
|
|
|
- (set-window-margins win
|
|
|
- (ceiling (* (if (boundp 'text-scale-mode-step)
|
|
|
- (expt text-scale-mode-step
|
|
|
- text-scale-mode-amount) 1)
|
|
|
- (if (car (window-margins))
|
|
|
- (car (window-margins)) 1)
|
|
|
- ))))
|
|
|
- (advice-add #'linum-update-window :after #'linum-update-window-scale-fix))
|
|
|
-
|
|
|
-
|
|
|
-(use-package flymd
|
|
|
- :config
|
|
|
- (setq flymd-close-buffer-delete-temp-files t))
|
|
|
-
|
|
|
-(defun flyspell-toggle-correct-mode ()
|
|
|
- "Decide whether to use flyspell-mode or flyspell-prog-mode, then properly toggle."
|
|
|
- (interactive)
|
|
|
- ;; use flyspell-mode when in text buffers
|
|
|
- ;; otherwise use flyspell-prog-mode
|
|
|
- (let* ((current-mode
|
|
|
- (buffer-local-value 'major-mode (current-buffer)))
|
|
|
- (flyspell-mode-to-call
|
|
|
- (if (or (string= current-mode "text-mode") (string= current-mode "markdown-mode"))
|
|
|
- 'flyspell-mode
|
|
|
- 'flyspell-prog-mode)))
|
|
|
- ;; toggle the current flyspell mode, and
|
|
|
- ;; eval the buffer if we turned it on
|
|
|
- (if flyspell-mode
|
|
|
- (funcall 'flyspell-mode '0)
|
|
|
- (funcall flyspell-mode-to-call)
|
|
|
- (flyspell-buffer))))
|
|
|
+ (set-window-margins
|
|
|
+ win
|
|
|
+ (ceiling (* (if (boundp 'text-scale-mode-step)
|
|
|
+ (expt text-scale-mode-step
|
|
|
+ text-scale-mode-amount) 1)
|
|
|
+ (if (car (window-margins))
|
|
|
+ (car (window-margins)) 1)
|
|
|
+ ))))
|
|
|
+
|
|
|
+ (advice-add #'linum-update-window
|
|
|
+ :after #'linum-update-window-scale-fix))
|
|
|
|
|
|
(use-package evil-leader
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(global-evil-leader-mode)
|
|
|
(evil-leader/set-leader "<SPC>")
|
|
@@ -367,7 +204,8 @@
|
|
|
"l" 'auto-fill-mode
|
|
|
"s" 'flyspell-toggle-correct-mode
|
|
|
"a" 'company-mode
|
|
|
- "g" '(lambda () (interactive) (evil-magit-init) (magit-status))
|
|
|
+ ;"g" '(lambda () (interactive) (evil-magit-init) (magit-status))
|
|
|
+ "g" 'magit-status
|
|
|
"M-g" 'magit-dispatch-popup
|
|
|
"c" 'flycheck-mode
|
|
|
"w" '(lambda () (interactive)
|
|
@@ -376,20 +214,8 @@
|
|
|
(flyspell-toggle-correct-mode))
|
|
|
))
|
|
|
|
|
|
-
|
|
|
-(if (not (eq system-type 'windows-nt))
|
|
|
- (lambda ()
|
|
|
- ((use-package magit
|
|
|
- :diminish magit-auto-revert-mode)
|
|
|
-
|
|
|
- (use-package evil-magit)
|
|
|
-
|
|
|
- (use-package magithub
|
|
|
- :config
|
|
|
- (magithub-feature-autoinject t)))))
|
|
|
-
|
|
|
-
|
|
|
(use-package neotree
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
;; Set vi-like bindings in neotree-mode that don't conflict with evil
|
|
|
(evil-define-key 'normal neotree-mode-map
|
|
@@ -404,34 +230,15 @@
|
|
|
;; List of files to hide
|
|
|
(setq neo-hidden-regexp-list '("^\\." "\\.pyc$" "~$" "^#.*#$" "\\.elc$" "\\.class")))
|
|
|
|
|
|
-
|
|
|
-;; tide/typescript
|
|
|
-(setq typescript-indent-level 2)
|
|
|
-
|
|
|
-
|
|
|
-;; JavaScript
|
|
|
-(setq js-indent-level 2)
|
|
|
-
|
|
|
-
|
|
|
-(use-package racket-mode
|
|
|
- :config
|
|
|
- (add-to-list 'auto-mode-alist '("\\.scm\\'" . racket-mode))
|
|
|
-
|
|
|
- ;; C-w prefix in racket-REPL
|
|
|
- (add-hook 'racket-repl-mode-hook 'racket-repl-evil-hook)
|
|
|
-
|
|
|
- (defun racket-repl-evil-hook ()
|
|
|
- (define-key racket-repl-mode-map "\C-w" 'evil-window-map)
|
|
|
- (global-set-key (kbd "C-w") 'racket-repl-mode-map)))
|
|
|
-
|
|
|
-
|
|
|
(use-package editorconfig
|
|
|
+ :ensure t
|
|
|
:diminish editorconfig-mode
|
|
|
:config
|
|
|
(editorconfig-mode 1))
|
|
|
|
|
|
|
|
|
(use-package ivy
|
|
|
+ :ensure t
|
|
|
:diminish ivy-mode
|
|
|
:config
|
|
|
(ivy-mode)
|
|
@@ -439,15 +246,16 @@
|
|
|
|
|
|
|
|
|
(use-package flx
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(setq ivy-re-builders-alist '((t . ivy--regex-fuzzy))))
|
|
|
|
|
|
-
|
|
|
(use-package company
|
|
|
+ :ensure t
|
|
|
:diminish company-mode)
|
|
|
|
|
|
-
|
|
|
(use-package flycheck
|
|
|
+ :ensure t
|
|
|
:diminish flycheck-mode
|
|
|
:config
|
|
|
(add-hook 'after-init-hook #'global-flycheck-mode)
|
|
@@ -459,62 +267,243 @@
|
|
|
|
|
|
(global-flycheck-mode t))
|
|
|
|
|
|
-
|
|
|
(use-package flycheck-pos-tip
|
|
|
+ :ensure t
|
|
|
:after flycheck
|
|
|
:config
|
|
|
(flycheck-pos-tip-mode))
|
|
|
|
|
|
|
|
|
(use-package evil-surround
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(global-evil-surround-mode 1))
|
|
|
|
|
|
|
|
|
(use-package dtrt-indent
|
|
|
+ :ensure t
|
|
|
:diminish dtrt-indent-mode
|
|
|
:config
|
|
|
(dtrt-indent-mode 1))
|
|
|
|
|
|
-
|
|
|
-(use-package org)
|
|
|
-
|
|
|
-
|
|
|
-(use-package haskell-mode
|
|
|
- :config
|
|
|
- (setq haskell-interactive-popup-errors nil)
|
|
|
- (define-key haskell-mode-map (kbd "C-c C-c") 'inferior-haskell-load-file))
|
|
|
-
|
|
|
+(use-package org
|
|
|
+ :ensure t)
|
|
|
|
|
|
(use-package evil-ediff
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(add-hook 'ediff-load-hook 'evil-ediff-init))
|
|
|
|
|
|
-
|
|
|
(use-package rainbow-delimiters
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
|
|
|
|
|
|
-
|
|
|
(use-package rainbow-identifiers
|
|
|
+ :ensure t
|
|
|
:config
|
|
|
(add-hook 'prog-mode-hook #'rainbow-identifiers-mode))
|
|
|
|
|
|
-
|
|
|
(use-package rainbow-mode
|
|
|
+ :ensure t
|
|
|
:diminish rainbow-mode
|
|
|
:config
|
|
|
(add-hook 'prog-mode-hook #'rainbow-mode))
|
|
|
|
|
|
+(use-package eyebrowse
|
|
|
+ :ensure t
|
|
|
+ :config
|
|
|
+ (eyebrowse-mode t)
|
|
|
+ (eyebrowse-setup-evil-keys)
|
|
|
+ (setq eyebrowse-new-workspace t))
|
|
|
+
|
|
|
+(use-package monokai-theme
|
|
|
+ :ensure t)
|
|
|
+
|
|
|
+;; OS specific
|
|
|
+(use-package magit
|
|
|
+ :if (not (eq system-type 'windows-nt))
|
|
|
+ :ensure t
|
|
|
+ :diminish magit-auto-revert-mode)
|
|
|
+
|
|
|
+(use-package evil-magit
|
|
|
+ :if (not (eq system-type 'windows-nt))
|
|
|
+ :ensure t
|
|
|
+ :demand
|
|
|
+ :config
|
|
|
+ (evil-magit-init))
|
|
|
+
|
|
|
+(use-package magithub
|
|
|
+ :if (not (eq system-type 'windows-nt))
|
|
|
+ :ensure t
|
|
|
+ :demand
|
|
|
+ (magithub-feature-autoinject t))
|
|
|
+
|
|
|
+(use-package multi-term
|
|
|
+ :if (not (eq system-type 'windows-nt))
|
|
|
+ :ensure t)
|
|
|
+
|
|
|
+
|
|
|
+;;;; Optional packages
|
|
|
+
|
|
|
+(use-package flymd
|
|
|
+ :config
|
|
|
+ (setq flymd-close-buffer-delete-temp-files t))
|
|
|
+
|
|
|
+(use-package web-mode
|
|
|
+ :config
|
|
|
+ ;; 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)))
|
|
|
+
|
|
|
+(use-package js
|
|
|
+ :config
|
|
|
+ (setq js-indent-level 2))
|
|
|
+
|
|
|
+(use-package tide
|
|
|
+ :config
|
|
|
+ (setq typescript-indent-level 2))
|
|
|
+
|
|
|
+(use-package racket-mode
|
|
|
+ :config
|
|
|
+ (add-to-list 'auto-mode-alist '("\\.scm\\'" . racket-mode))
|
|
|
+
|
|
|
+ ;; C-w prefix in racket-REPL
|
|
|
+ (add-hook 'racket-repl-mode-hook 'racket-repl-evil-hook)
|
|
|
+
|
|
|
+ (defun racket-repl-evil-hook ()
|
|
|
+ (define-key racket-repl-mode-map "\C-w" 'evil-window-map)
|
|
|
+ (global-set-key (kbd "C-w") 'racket-repl-mode-map)))
|
|
|
+
|
|
|
+(use-package haskell-mode
|
|
|
+ :config
|
|
|
+ (setq haskell-interactive-popup-errors nil)
|
|
|
+ (define-key haskell-mode-map (kbd "C-c C-c") 'inferior-haskell-load-file))
|
|
|
|
|
|
(use-package emojify
|
|
|
:config
|
|
|
(add-hook 'after-init-hook #'global-emojify-mode))
|
|
|
|
|
|
-(use-package eyebrowse
|
|
|
+(use-package latex-preview-pane)
|
|
|
+
|
|
|
+(use-package realgud)
|
|
|
+
|
|
|
+;; List of optional packages
|
|
|
+(defvar optional-packages
|
|
|
+ '(
|
|
|
+ flymd
|
|
|
+ markdown-mode
|
|
|
+ latex-preview-pane
|
|
|
+ tide
|
|
|
+ web-mode
|
|
|
+ racket-mode
|
|
|
+ haskell-mode
|
|
|
+ realgud
|
|
|
+ emojify
|
|
|
+ ))
|
|
|
+
|
|
|
+(defvar packages-installed-this-session 0)
|
|
|
+(defun ensure-package-installed (prompt package)
|
|
|
+ "Ensure a package is installed, and (optionally) ask if it isn't."
|
|
|
+ (if (package-installed-p package)
|
|
|
+ nil
|
|
|
+ (if (or prompt (y-or-n-p (format "Package %s is missing. Install it? " package)))
|
|
|
+ ;; If this is the 1st install this session, update before install
|
|
|
+ (cond ((eq packages-installed-this-session 0)
|
|
|
+ (package-refresh-contents)
|
|
|
+ (setq packages-installed-this-session 1)
|
|
|
+ (package-install package))
|
|
|
+ (t (package-install package))
|
|
|
+ nil)
|
|
|
+ package)))
|
|
|
+
|
|
|
+(defun optional-packages-install ()
|
|
|
+ "Ask to install any optional packages."
|
|
|
+ (interactive)
|
|
|
+ (mapcar (lambda (package) (ensure-package-installed nil package)) optional-packages))
|
|
|
+
|
|
|
+
|
|
|
+;;;; Builtin configs
|
|
|
+
|
|
|
+(use-package flyspell
|
|
|
:config
|
|
|
- (eyebrowse-mode t)
|
|
|
- (eyebrowse-setup-evil-keys)
|
|
|
- (setq eyebrowse-new-workspace t))
|
|
|
+ ;; 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))))))
|
|
|
+
|
|
|
+ (defun flyspell-toggle-correct-mode ()
|
|
|
+ "Decide whether to use flyspell-mode or flyspell-prog-mode, then properly toggle."
|
|
|
+ (interactive)
|
|
|
+ ;; use flyspell-mode when in text buffers
|
|
|
+ ;; otherwise use flyspell-prog-mode
|
|
|
+ (let* ((current-mode
|
|
|
+ (buffer-local-value 'major-mode (current-buffer)))
|
|
|
+ (flyspell-mode-to-call
|
|
|
+ (if (or (string= current-mode "text-mode") (string= current-mode "markdown-mode"))
|
|
|
+ 'flyspell-mode
|
|
|
+ 'flyspell-prog-mode)))
|
|
|
+ ;; toggle the current flyspell mode, and
|
|
|
+ ;; eval the buffer if we turned it on
|
|
|
+ (if flyspell-mode
|
|
|
+ (funcall 'flyspell-mode '0)
|
|
|
+ (funcall flyspell-mode-to-call)
|
|
|
+ (flyspell-buffer)))))
|
|
|
+
|
|
|
+(use-package hideshow
|
|
|
+ :config
|
|
|
+ (add-hook 'prog-mode-hook
|
|
|
+ 'hs-minor-mode)
|
|
|
+ (add-hook 'hs-minor-mode-hook
|
|
|
+ (lambda ()
|
|
|
+ (diminish 'hs-minor-mode))))
|
|
|
+
|
|
|
+(use-package recentf
|
|
|
+ :config
|
|
|
+ (recentf-mode 1)
|
|
|
+ (setq recentf-max-saved-items 200
|
|
|
+ recentf-max-menu-items 15))
|
|
|
|
|
|
(provide 'packages)
|