#+TITLE: nav-flash layer

#+TAGS: layer|misc

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#installation][Installation]]
- [[#customization][Customization]]
  - [[#custom-trigger-of-nav-flash][Custom Trigger of =nav-flash=]]
  - [[#exclusion-rules][Exclusion Rules]]
- [[#credit][Credit]]

* Description
This layer adds [[https://github.com/rolandwalker/nav-flash][nav-flash]] package which temporarily highlights the line
containing the point, which is sometimes useful for orientation after a
navigation command.

** Features:
- Fancy flashing line on navigation.

* Installation
To use this configuration layer, add =nav-flash= to the existing
=dotspacemacs-configuration-layers= list in your =~/.spacemacs=.

#+BEGIN_SRC emacs-lisp
  (setq-default dotspacemacs-configuration-layers
                '(nav-flash))
#+END_SRC

* Customization
** Custom Trigger of =nav-flash=
=nav-flash= layer works around the following functions:
- =nav-flash/blink-cursor-maybe= blinks the line containing the point unless
  current major mode or current command is excluded, or if =so-long-minor-mode=
  is on.
- =nav-flash/delayed-blink-cursor-h= blinks after a short pause, which is useful
  to wait for the point moving to the correct window.

They are added to [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks.html][hooks]] or [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html][after advices]] of various functions. You can trigger
=nav-flash= in more context viaa =dotspacemacs/user-config=, for example:

#+BEGIN_SRC emacs-lisp
  ;; blink after triggering evil-window-left/right/up/down
  (advice-add #'evil-window-left  :after #'nav-flash/blink-cursor-maybe)
  (advice-add #'evil-window-right :after #'nav-flash/blink-cursor-maybe)
  (advice-add #'evil-window-up    :after #'nav-flash/blink-cursor-maybe)
  (advice-add #'evil-window-down  :after #'nav-flash/blink-cursor-maybe)

  ;; blink after a delay in after projectile-switch-project
  (spacemacs/add-to-hooks #'nav-flash/delayed-blink-cursor-h
                          '(projectile-after-switch-project-hook)
                          t)
#+END_SRC

** Exclusion Rules
=nav-flash/blink-cursor-maybe= is configured not to flash the line when either
the command or the major mode is excluded, which can be customized via variables
=nav-flash-exclude-commands= and =nav-flash-exlude-modes= in your
=dotspacemacs/user-config=. For example,

#+BEGIN_SRC emacs-lisp
  ;; don't trigger in dired-mode
  (add-to-list 'nav-flash-exclude-modes 'dired-mode )
  ;; don't trigger for spacemacs/alternate-buffer (SPC TAB)
  (add-to-list 'nav-flash-exclude-commands 'spacemacs/alternate-buffer)
#+END_SRC

* Credit
This layer is ported from [[https://github.com/doomemacs/doomemacs][Doom Emacs]].
