;;; packages.el --- Spacemacs Core Layer packages File ;; ;; Copyright (c) 2012-2016 Sylvain Benner & Contributors ;; ;; Author: Sylvain Benner ;; URL: https://github.com/syl20bnr/spacemacs ;; ;; This file is not part of GNU Emacs. ;; ;;; License: GPLv3 (setq spacemacs-base-packages '( (bookmark :location built-in) diminish (electric-indent-mode :location built-in) (ediff :location built-in) (eldoc :location built-in) evil-ediff evil-escape (evil-evilified-state :location local :step pre :protected t) evil-surround evil-visualstar exec-path-from-shell fill-column-indicator help-fns+ hl-todo (hs-minor-mode :location built-in) (holy-mode :location local :step pre) (hybrid-mode :location local :step pre) (ido :location built-in) ido-vertical-mode (package-menu :location built-in) page-break-lines popup popwin (process-menu :location built-in) projectile (recentf :location built-in) ;; request is not a built-in package ;; this is a hack to be able to configure request cache directory. (request :location built-in) restart-emacs (savehist :location built-in) (saveplace :location built-in) spacemacs-theme (subword :location built-in) undo-tree (uniquify :location built-in) (url :location built-in) (whitespace :location built-in) (winner :location built-in) ws-butler)) ;; Initialization of packages (defun spacemacs-base/init-bookmark () (use-package bookmark :defer t :init (setq bookmark-default-file (concat spacemacs-cache-directory "bookmarks") ;; autosave each change bookmark-save-flag 1))) (defun spacemacs-base/init-diminish () (use-package diminish :init (progn ;; Minor modes abbrev -------------------------------------------------------- (when (display-graphic-p) (with-eval-after-load 'eproject (diminish 'eproject-mode " eⓅ")) (with-eval-after-load 'flymake (diminish 'flymake-mode " Ⓕ2"))) ;; Minor Mode (hidden) ------------------------------------------------------ (with-eval-after-load 'elisp-slime-nav (diminish 'elisp-slime-nav-mode)) (with-eval-after-load 'hi-lock (diminish 'hi-lock-mode)) (with-eval-after-load 'abbrev (diminish 'abbrev-mode)) (with-eval-after-load 'subword (when (eval-when-compile (version< "24.3.1" emacs-version)) (diminish 'subword-mode)))))) (defun spacemacs-base/init-eldoc () (use-package eldoc :defer t :config (progn ;; enable eldoc in `eval-expression' (add-hook 'eval-expression-minibuffer-setup-hook #'eldoc-mode) ;; enable eldoc in IELM (add-hook 'ielm-mode-hook #'eldoc-mode) ;; don't display eldoc on modeline (spacemacs|hide-lighter eldoc-mode)))) (defun spacemacs-base/init-electric-indent-mode () (electric-indent-mode)) ;; notes from mijoharas ;; We currently just set a few variables to make it look nicer. ;; Here is my first attempt at evilifying the buffer, does not work correctly, help is very much welcome. ;; ``` ;; (defun ediff/setup-ediff-keymaps () ;; "setup the evil ediff keymap" ;; (progn ;; (add-to-list 'evil-emacs-state-modes 'Ediff) ;; (evilified-state-evilify ediff-mode-map) ;; (spacemacs/activate-evil-leader-for-map 'ediff-mode-map) ;; ) ;; ) ;; ;; inside the use-package function ;; (add-hook 'ediff-keymap-setup-hook 'ediff/setup-ediff-keymaps) ;; ``` (defun spacemacs-base/init-ediff () (use-package ediff :defer t :init (progn ;; first we set some sane defaults (setq-default ediff-window-setup-function 'ediff-setup-windows-plain ;; emacs is evil and decrees that vertical shall henceforth be horizontal ediff-split-window-function 'split-window-horizontally ediff-merge-split-window-function 'split-window-horizontally) ;; restore window layout when done (add-hook 'ediff-quit-hook #'winner-undo)))) (defun spacemacs-base/init-evil-ediff () (use-package evil-ediff :after (ediff) :if (memq dotspacemacs-editing-style '(hybrid vim)))) (defun spacemacs-base/init-eldoc () (use-package eldoc :defer t :config (progn ;; enable eldoc in `eval-expression' (add-hook 'eval-expression-minibuffer-setup-hook #'eldoc-mode) ;; enable eldoc in IELM (add-hook 'ielm-mode-hook #'eldoc-mode) ;; don't display eldoc on modeline (spacemacs|hide-lighter eldoc-mode)))) (defun spacemacs-base/init-evil-escape () (use-package evil-escape :init (evil-escape-mode) :config (spacemacs|hide-lighter evil-escape-mode))) (defun spacemacs-base/init-evil-evilified-state () (use-package evil-evilified-state) (define-key evil-evilified-state-map (kbd dotspacemacs-leader-key) spacemacs-default-map)) (defun spacemacs-base/init-evil-surround () (use-package evil-surround :init (progn (global-evil-surround-mode 1) ;; `s' for surround instead of `substitute' ;; see motivation for this change in the documentation (evil-define-key 'visual evil-surround-mode-map "s" 'evil-surround-region) (evil-define-key 'visual evil-surround-mode-map "S" 'evil-substitute)))) (defun spacemacs-base/init-evil-visualstar () (use-package evil-visualstar :commands (evil-visualstar/begin-search-forward evil-visualstar/begin-search-backward) :init (progn (define-key evil-visual-state-map (kbd "*") 'evil-visualstar/begin-search-forward) (define-key evil-visual-state-map (kbd "#") 'evil-visualstar/begin-search-backward)))) (defun spacemacs-base/init-exec-path-from-shell () (use-package exec-path-from-shell :init (when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize)))) (defun spacemacs-base/init-fill-column-indicator () (use-package fill-column-indicator :defer t :init (progn (setq fci-rule-width 1) (setq fci-rule-color "#D0BF8F") ;; manually register the minor mode since it does not define any ;; lighter (push '(fci-mode "") minor-mode-alist) (spacemacs|add-toggle fill-column-indicator :status fci-mode :on (turn-on-fci-mode) :off (turn-off-fci-mode) :documentation "Display the fill column indicator." :evil-leader "tf")) :config (spacemacs|hide-lighter fci-mode))) (defun spacemacs-base/init-help-fns+ () (use-package help-fns+ :commands (describe-keymap) :init (spacemacs/set-leader-keys "hdK" 'describe-keymap))) (defun spacemacs-base/init-hl-todo () (use-package hl-todo :defer t :init (spacemacs/add-to-hooks 'hl-todo-mode '(text-mode-hook prog-mode-hook)))) (defun spacemacs-base/init-hs-minor-mode () ;; required for evil folding (defun spacemacs//enable-hs-minor-mode () "Enable hs-minor-mode for code folding." (ignore-errors (hs-minor-mode) (spacemacs|hide-lighter hs-minor-mode))) (add-hook 'prog-mode-hook 'spacemacs//enable-hs-minor-mode)) (defun spacemacs-base/init-holy-mode () (use-package holy-mode :commands holy-mode :init (progn (when (eq 'emacs dotspacemacs-editing-style) (holy-mode)) (spacemacs|add-toggle holy-mode :status holy-mode :on (progn (when (bound-and-true-p hybrid-mode) (hybrid-mode -1)) (holy-mode)) :off (holy-mode -1) :documentation "Globally toggle holy mode." :evil-leader "tEe") (spacemacs|diminish holy-mode " Ⓔe" " Ee")))) (defun spacemacs-base/init-hybrid-mode () (use-package hybrid-mode :config (progn (when (eq 'hybrid dotspacemacs-editing-style) (hybrid-mode)) (spacemacs|add-toggle hybrid-mode :status hybrid-mode :on (progn (when (bound-and-true-p holy-mode) (holy-mode -1)) (hybrid-mode)) :off (hybrid-mode -1) :documentation "Globally toggle hybrid mode." :evil-leader "tEh") (spacemacs|diminish hybrid-mode " Ⓔh" " Eh")))) (defun spacemacs-base/init-ido () (ido-mode t) (setq ido-save-directory-list-file (concat spacemacs-cache-directory "ido.last") ;; enable fuzzy matching ido-enable-flex-matching t)) (defun spacemacs-base/init-package-menu () (evilified-state-evilify-map package-menu-mode-map :mode package-menu-mode)) (defun spacemacs-base/init-ido-vertical-mode () (use-package ido-vertical-mode :init (progn (ido-vertical-mode t) (defun spacemacs//ido-minibuffer-setup () "Setup the minibuffer." ;; Since ido is implemented in a while loop where each ;; iteration setup a whole new minibuffer, we have to keep ;; track of any activated ido navigation transient-state and force ;; the reactivation at each iteration. (when spacemacs--ido-navigation-ms-enabled (spacemacs/ido-navigation-micro-state))) (add-hook 'ido-minibuffer-setup-hook 'spacemacs//ido-minibuffer-setup) (defun spacemacs//ido-setup () (when spacemacs--ido-navigation-ms-face-cookie-minibuffer (face-remap-remove-relative spacemacs--ido-navigation-ms-face-cookie-minibuffer)) ;; be sure to wipe any previous transient-state flag (setq spacemacs--ido-navigation-ms-enabled nil) ;; overwrite the key bindings for ido vertical mode only (define-key ido-completion-map (kbd "C-") 'ido-select-text) ;; use M-RET in terminal (define-key ido-completion-map "\M-\r" 'ido-select-text) (define-key ido-completion-map (kbd "C-h") 'ido-delete-backward-updir) (define-key ido-completion-map (kbd "C-j") 'ido-next-match) (define-key ido-completion-map (kbd "C-k") 'ido-prev-match) (define-key ido-completion-map (kbd "C-l") 'ido-exit-minibuffer) (define-key ido-completion-map (kbd "C-n") 'ido-next-match) (define-key ido-completion-map (kbd "C-p") 'ido-prev-match) (define-key ido-completion-map (kbd "C-S-h") 'ido-prev-match-dir) (define-key ido-completion-map (kbd "C-S-j") 'next-history-element) (define-key ido-completion-map (kbd "C-S-k") 'previous-history-element) (define-key ido-completion-map (kbd "C-S-l") 'ido-next-match-dir) (define-key ido-completion-map (kbd "C-S-n") 'next-history-element) (define-key ido-completion-map (kbd "C-S-p") 'previous-history-element) ;; ido-other window maps (define-key ido-completion-map (kbd "C-o") 'spacemacs/ido-invoke-in-other-window) (define-key ido-completion-map (kbd "C-s") 'spacemacs/ido-invoke-in-vertical-split) (define-key ido-completion-map (kbd "C-t") 'spacemacs/ido-invoke-in-new-frame) (define-key ido-completion-map (kbd "C-v") 'spacemacs/ido-invoke-in-horizontal-split) ;; more natural navigation keys: up, down to change current item ;; left to go up dir ;; right to open the selected item (define-key ido-completion-map (kbd "") 'ido-prev-match) (define-key ido-completion-map (kbd "") 'ido-next-match) (define-key ido-completion-map (kbd "") 'ido-delete-backward-updir) (define-key ido-completion-map (kbd "") 'ido-exit-minibuffer) ;; initiate transient-state (define-key ido-completion-map (kbd "M-SPC") 'spacemacs/ido-navigation-micro-state) (define-key ido-completion-map (kbd "s-M-SPC") 'spacemacs/ido-navigation-micro-state) ) (add-hook 'ido-setup-hook 'spacemacs//ido-setup) (defun spacemacs/ido-invoke-in-other-window () "signals ido mode to switch to (or create) another window after exiting" (interactive) (setq ido-exit-minibuffer-target-window 'other) (ido-exit-minibuffer)) (defun spacemacs/ido-invoke-in-horizontal-split () "signals ido mode to split horizontally and switch after exiting" (interactive) (setq ido-exit-minibuffer-target-window 'horizontal) (ido-exit-minibuffer)) (defun spacemacs/ido-invoke-in-vertical-split () "signals ido mode to split vertically and switch after exiting" (interactive) (setq ido-exit-minibuffer-target-window 'vertical) (ido-exit-minibuffer)) (defun spacemacs/ido-invoke-in-new-frame () "signals ido mode to create a new frame after exiting" (interactive) (setq ido-exit-minibuffer-target-window 'frame) (ido-exit-minibuffer)) (defadvice ido-read-internal (around ido-read-internal-with-minibuffer-other-window activate) (let* (ido-exit-minibuffer-target-window (this-buffer (current-buffer)) (result ad-do-it)) (cond ((equal ido-exit-minibuffer-target-window 'other) (if (= 1 (count-windows)) (spacemacs/split-window-horizontally-and-switch) (other-window 1))) ((equal ido-exit-minibuffer-target-window 'horizontal) (spacemacs/split-window-horizontally-and-switch)) ((equal ido-exit-minibuffer-target-window 'vertical) (spacemacs/split-window-vertically-and-switch)) ((equal ido-exit-minibuffer-target-window 'frame) (make-frame))) ;; why? Some ido commands, such as textmate.el's ;; textmate-goto-symbol don't switch the current buffer (switch-to-buffer this-buffer) result)) (defvar spacemacs--ido-navigation-ms-enabled nil "Flag which is non nil when ido navigation transient-state is enabled.") (defvar spacemacs--ido-navigation-ms-face-cookie-minibuffer nil "Cookie pointing to the local face remapping.") (defface spacemacs-ido-navigation-ms-face `((t :background ,(face-attribute 'error :foreground) :foreground "black" :weight bold)) "Face for ido minibuffer prompt when ido transient-state is activated." :group 'spacemacs) (defun spacemacs//ido-navigation-ms-set-face () "Set faces for ido navigation transient-state." (setq spacemacs--ido-navigation-ms-face-cookie-minibuffer (face-remap-add-relative 'minibuffer-prompt 'spacemacs-ido-navigation-ms-face))) (defun spacemacs//ido-navigation-ms-on-enter () "Initialization of ido transient-state." (setq spacemacs--ido-navigation-ms-enabled t) (spacemacs//ido-navigation-ms-set-face)) (defun spacemacs//ido-navigation-ms-on-exit () "Action to perform when exiting ido transient-state." (face-remap-remove-relative spacemacs--ido-navigation-ms-face-cookie-minibuffer)) (defun spacemacs//ido-navigation-ms-full-doc () "Full documentation for ido navigation transient-state." " [?] display this help [e] enter dired [j] [k] next/previous match [J] [K] sub/parent directory [h] delete backward or parent directory [l] select match [n] [p] next/previous directory in history [o] open in other window [s] open in a new horizontal split [t] open in other frame [v] open in a new vertical split [q] quit") (spacemacs|define-transient-state ido-navigation :title "ido Transient State" :foreign-keys run :on-enter (spacemacs//ido-navigation-ms-on-enter) :on-exit (spacemacs//ido-navigation-ms-on-exit) :bindings ;;("?" nil (spacemacs//ido-navigation-ms-full-doc)) ("" ido-exit-minibuffer :exit t) ("" nil :exit t) ("e" ido-select-text :exit t) ("h" ido-delete-backward-updir) ("j" ido-next-match) ("J" ido-next-match-dir) ("k" ido-prev-match) ("K" ido-prev-match-dir) ("l" ido-exit-minibuffer :exit t) ("n" ido-next-match-dir) ("o" spacemacs/ido-invoke-in-other-window :exit t) ("p" ido-prev-match-dir) ("q" nil :exit t) ("s" spacemacs/ido-invoke-in-vertical-split :exit t) ("t" spacemacs/ido-invoke-in-new-frame :exit t) ("v" spacemacs/ido-invoke-in-horizontal-split :exit t))))) (defun spacemacs-base/init-page-break-lines () (use-package page-break-lines :init (global-page-break-lines-mode t) (spacemacs|hide-lighter page-break-lines-mode))) (defun spacemacs-base/init-popup () (use-package popup :defer t)) (defun spacemacs-base/init-popwin () (use-package popwin :config (progn (popwin-mode 1) (spacemacs/set-leader-keys "wpm" 'popwin:messages) (spacemacs/set-leader-keys "wpp" 'popwin:close-popup-window) ;; don't use default value but manage it ourselves (setq popwin:special-display-config nil) ;; buffers that we manage (push '("*Help*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) popwin:special-display-config) (push '("*compilation*" :dedicated t :position bottom :stick t :noselect t :height 0.4) popwin:special-display-config) (push '("*Shell Command Output*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) (push '("*Async Shell Command*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) (push '(" *undo-tree*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) popwin:special-display-config) (push '("*ert*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) (push '("*grep*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) (push '("*nosetests*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) (push '("^\*WoMan.+\*$" :regexp t :position bottom ) popwin:special-display-config) (defun spacemacs/remove-popwin-display-config (str) "Removes the popwin display configurations that matches the passed STR" (setq popwin:special-display-config (-remove (lambda (x) (if (and (listp x) (stringp (car x))) (string-match str (car x)))) popwin:special-display-config)))))) (defun spacemacs-base/init-process-menu () (evilified-state-evilify process-menu-mode process-menu-mode-map)) (defun spacemacs-base/init-projectile () (use-package projectile :commands (projectile-ack projectile-ag projectile-compile-project projectile-dired projectile-find-dir projectile-find-file projectile-find-tag projectile-find-test-file projectile-grep projectile-invalidate-cache projectile-kill-buffers projectile-multi-occur projectile-project-p projectile-project-root projectile-recentf projectile-regenerate-tags projectile-replace projectile-run-async-shell-command-in-root projectile-run-shell-command-in-root projectile-switch-project projectile-switch-to-buffer projectile-vc) :init (progn ;; note for Windows: GNU find or Cygwin find must be in path to enable ;; fast indexing (when (and (spacemacs/system-is-mswindows) (executable-find "find")) (setq projectile-indexing-method 'alien projectile-generic-command "find . -type f")) (setq projectile-sort-order 'recentf projectile-cache-file (concat spacemacs-cache-directory "projectile.cache") projectile-known-projects-file (concat spacemacs-cache-directory "projectile-bookmarks.eld")) (unless (configuration-layer/package-usedp 'helm-projectile) (spacemacs/set-leader-keys "pb" 'projectile-switch-to-buffer "pd" 'projectile-find-dir "pf" 'projectile-find-file "pF" 'projectile-find-file-dwim "ph" 'helm-projectile "pr" 'projectile-recentf "ps" 'projectile-switch-project)) (spacemacs/set-leader-keys "p!" 'projectile-run-shell-command-in-root "p&" 'projectile-run-async-shell-command-in-root "pa" 'projectile-toggle-between-implementation-and-test "pc" 'projectile-compile-project "pD" 'projectile-dired "pG" 'projectile-regenerate-tags "pI" 'projectile-invalidate-cache "pk" 'projectile-kill-buffers "po" 'projectile-multi-occur "pR" 'projectile-replace "pT" 'projectile-find-test-file "py" 'projectile-find-tag)) :config (progn (projectile-global-mode) (spacemacs|hide-lighter projectile-mode)))) (defun spacemacs-base/init-recentf () (use-package recentf :defer t :init (progn ;; lazy load recentf (add-hook 'find-file-hook (lambda () (unless recentf-mode (recentf-mode) (recentf-track-opened-file)))) (setq recentf-save-file (concat spacemacs-cache-directory "recentf") recentf-max-saved-items 1000 recentf-auto-cleanup 'never recentf-auto-save-timer (run-with-idle-timer 600 t 'recentf-save-list))) :config (progn (add-to-list 'recentf-exclude (expand-file-name spacemacs-cache-directory)) (add-to-list 'recentf-exclude (expand-file-name package-user-dir)) (add-to-list 'recentf-exclude "COMMIT_EDITMSG\\'")))) (defun spacemacs-base/init-request () (setq request-storage-directory (concat spacemacs-cache-directory "request/"))) (defun spacemacs-base/init-restart-emacs() (use-package restart-emacs :defer t :init (defun spacemacs/restart-emacs (&optional args) "Restart emacs." (interactive) (setq spacemacs-really-kill-emacs t) (restart-emacs args)) (defun spacemacs/restart-emacs-resume-layouts (&optional args) "Restart emacs and resume layouts." (interactive) (spacemacs/restart-emacs (cons "--resume-layouts" args))) (defun spacemacs/restart-emacs-debug-init (&optional args) "Restart emacs and enable debug-init." (interactive) (spacemacs/restart-emacs (cons "--debug-init" args))) (defun spacemacs/restart-stock-emacs-with-packages (packages &optional args) "Restart emacs without the spacemacs configuration, enable debug-init and load the given list of packages." (interactive (progn (unless package--initialized (package-initialize t)) (let ((packages (append (mapcar 'car package-alist) (mapcar 'car package-archive-contents) (mapcar 'car package--builtins)))) (setq packages (mapcar 'symbol-name packages)) (let ((val (completing-read-multiple "Packages to load (comma separated): " packages nil t))) `(,val))))) (let ((load-packages-string (mapconcat (lambda (pkg) (format "(use-package %s)" pkg)) packages " "))) (spacemacs/restart-emacs-debug-init (append (list "-q" "--execute" (concat "(progn (package-initialize) " "(require 'use-package)" load-packages-string ")")) args)))) (spacemacs/set-leader-keys "qd" 'spacemacs/restart-emacs-debug-init "qD" 'spacemacs/restart-stock-emacs-with-packages "qr" 'spacemacs/restart-emacs-resume-layouts "qR" 'spacemacs/restart-emacs))) (defun spacemacs-base/init-savehist () (use-package savehist :init (progn ;; Minibuffer history (setq savehist-file (concat spacemacs-cache-directory "savehist") enable-recursive-minibuffers t ; Allow commands in minibuffers history-length 1000 savehist-additional-variables '(mark-ring global-mark-ring search-ring regexp-search-ring extended-command-history) savehist-autosave-interval 60) (savehist-mode t)))) (defun spacemacs-base/init-saveplace () (use-package saveplace :init (progn (if (fboundp 'save-place-mode) ;; Emacs 25 has a proper mode for `save-place' (save-place-mode) (setq save-place t)) ;; Save point position between sessions (setq save-place-file (concat spacemacs-cache-directory "places"))))) (defun spacemacs-base/init-spacemacs-theme () (use-package spacemacs-theme :defer t :init (progn (setq spacemacs-theme-comment-bg t) (setq spacemacs-theme-org-height t)))) (defun spacemacs-base/init-subword () (unless (version< emacs-version "24.4") (use-package subword :defer t :init (progn (unless (category-docstring ?U) (define-category ?U "Uppercase") (define-category ?u "Lowercase")) (modify-category-entry (cons ?A ?Z) ?U) (modify-category-entry (cons ?a ?z) ?u) (make-variable-buffer-local 'evil-cjk-word-separating-categories) (defun spacemacs//subword-enable-camel-case () "Add support for camel case to subword." (if subword-mode (push '(?u . ?U) evil-cjk-word-separating-categories) (setq evil-cjk-word-separating-categories (default-value 'evil-cjk-word-separating-categories)))) (add-hook 'subword-mode-hook 'spacemacs//subword-enable-camel-case) (spacemacs|add-toggle camel-case-motion :status subword-mode :on (subword-mode +1) :off (subword-mode -1) :documentation "Toggle CamelCase motions." :evil-leader "tc") (spacemacs|add-toggle camel-case-motion-globally :status subword-mode :on (global-subword-mode +1) :off (global-subword-mode -1) :documentation "Globally toggle CamelCase motions." :evil-leader "t C-c")) :config (spacemacs|diminish subword-mode " ⓒ" " c")))) (defun spacemacs-base/init-undo-tree () (use-package undo-tree :init (global-undo-tree-mode) (setq undo-tree-visualizer-timestamps t) (setq undo-tree-visualizer-diff t) :config (spacemacs|hide-lighter undo-tree-mode))) (defun spacemacs-base/init-uniquify () (require 'uniquify) ;; When having windows with repeated filenames, uniquify them ;; by the folder they are in rather those annoying <2>,<3>,.. etc (setq uniquify-buffer-name-style 'post-forward-angle-brackets ;; don't screw special buffers uniquify-ignore-buffers-re "^\\*")) (defun spacemacs-base/init-url () ;; gravatars from magit use this to store their cache (setq url-configuration-directory (concat spacemacs-cache-directory "url/"))) (defun spacemacs-base/init-whitespace () (use-package whitespace :defer t :init (progn (setq spacemacs-show-trailing-whitespace t) (defun spacemacs//show-trailing-whitespace () (when spacemacs-show-trailing-whitespace (set-face-attribute 'trailing-whitespace nil :background (face-attribute 'font-lock-comment-face :foreground)) (setq show-trailing-whitespace 1))) (add-hook 'prog-mode-hook 'spacemacs//show-trailing-whitespace) (spacemacs|add-toggle whitespace :status whitespace-mode :on (whitespace-mode) :off (whitespace-mode -1) :documentation "Display whitespace." :evil-leader "tw") (spacemacs|add-toggle whitespace-globally :status global-whitespace-mode :on (global-whitespace-mode) :off (global-whitespace-mode -1) :documentation "Display whitespace globally." :evil-leader "t C-w") (defun spacemacs//set-whitespace-style-for-diff () "Whitespace configuration for `diff-mode'" (setq-local whitespace-style '(face tabs tab-mark spaces space-mark trailing indentation::space indentation::tab newline newline-mark))) (add-hook 'diff-mode-hook 'whitespace-mode) (add-hook 'diff-mode-hook 'spacemacs//set-whitespace-style-for-diff)) :config (progn (set-face-attribute 'whitespace-space nil :background nil :foreground (face-attribute 'font-lock-warning-face :foreground)) (set-face-attribute 'whitespace-tab nil :background nil) (set-face-attribute 'whitespace-indentation nil :background nil) (spacemacs|diminish whitespace-mode " ⓦ" " w") (spacemacs|diminish global-whitespace-mode " Ⓦ" " W")))) (defun spacemacs-base/init-ws-butler () (use-package ws-butler :if (eq 'changed dotspacemacs-whitespace-cleanup) :config (progn (ws-butler-global-mode 1) (spacemacs|hide-lighter ws-butler-mode)))) (defun spacemacs-base/init-winner () (use-package winner :init (progn (winner-mode t) (setq spacemacs/winner-boring-buffers '("*Completions*" "*Compile-Log*" "*inferior-lisp*" "*Fuzzy Completions*" "*Apropos*" "*Help*" "*cvs*" "*Buffer List*" "*Ibuffer*" "*esh command on file*" )) (setq winner-boring-buffers (append winner-boring-buffers spacemacs/winner-boring-buffers)) (winner-mode t))))