Add extra checks, cleanup
simplify space-doc customization rearrange defcustom groups more checks
This commit is contained in:
parent
9ba525cdde
commit
7140e8dfa8
24
doc/FAQ.org
24
doc/FAQ.org
|
@ -517,21 +517,19 @@ arguments of the =ag= program.
|
||||||
You can modify the list of visual enhancements applied by the =space-doc-mode=:
|
You can modify the list of visual enhancements applied by the =space-doc-mode=:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(setq spacemacs-space-doc-modificators
|
(setq spacemacs-space-doc-modificators
|
||||||
'(spacemacs//space-doc-center-buffer-mode
|
'(center-buffer-mode
|
||||||
spacemacs//space-doc-org-indent-mode
|
org-indent-mode
|
||||||
spacemacs//space-doc-view-mode
|
view-mode
|
||||||
spacemacs//space-doc-hide-line-numbers
|
hide-line-numbers
|
||||||
spacemacs//space-doc-emphasis-overlays
|
emphasis-overlays
|
||||||
spacemacs//space-doc-meta-tags-overlays
|
meta-tags-overlays
|
||||||
spacemacs//space-doc-link-protocol
|
link-protocol
|
||||||
spacemacs//space-doc-org-block-line-face-remap
|
org-block-line-face-remap
|
||||||
spacemacs//space-doc-org-kbd-face-remap
|
org-kbd-face-remap
|
||||||
spacemacs//space-doc-resize-inline-images
|
resize-inline-images
|
||||||
spacemacs//space-doc-advice-org-do-emphasis-faces))
|
advice-org-do-emphasis-faces))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
It's the default value of the variable with all enhancements.
|
It's the default value of the variable with all enhancements.
|
||||||
Each function in the list represents some modification.
|
|
||||||
Some of them might be order dependant so don't shuffle the list!
|
|
||||||
|
|
||||||
** Remap paste key to be able to paste copied text multiple times
|
** Remap paste key to be able to paste copied text multiple times
|
||||||
In vim and evil, pasting over a text would cause it to be copied, hence making it impossible to paste
|
In vim and evil, pasting over a text would cause it to be copied, hence making it impossible to paste
|
||||||
|
|
|
@ -27,21 +27,24 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
(require 'face-remap)
|
(require 'face-remap)
|
||||||
|
|
||||||
|
(defgroup spacemacs-centered-buffer-mode nil "Minor mode to center buffer in its window."
|
||||||
|
:group 'convenience)
|
||||||
|
|
||||||
(defcustom spacemacs-centered-buffer-mode-min-fringe-width 50
|
(defcustom spacemacs-centered-buffer-mode-min-fringe-width 50
|
||||||
"Minimal fringe width."
|
"Minimal fringe width."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
:group 'editing-basics)
|
:group 'spacemacs-centered-buffer-mode)
|
||||||
|
|
||||||
(defcustom spacemacs-centered-buffer-mode-safety-gap-width 20
|
(defcustom spacemacs-centered-buffer-mode-safety-gap-width 20
|
||||||
"Add extra width to the modified buffer to make sure
|
"Add extra width to the modified buffer to make sure
|
||||||
that differed modifications won't cause an overflow."
|
that differed modifications won't cause an overflow."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
:group 'editing-basics)
|
:group 'spacemacs-centered-buffer-mode)
|
||||||
|
|
||||||
(defcustom spacemacs-centered-buffer-mode-fringe-color "black"
|
(defcustom spacemacs-centered-buffer-mode-fringe-color "black"
|
||||||
"Color of the fringes."
|
"Color of the fringes."
|
||||||
:type 'color
|
:type 'color
|
||||||
:group 'editing-basics)
|
:group 'spacemacs-centered-buffer-mode)
|
||||||
|
|
||||||
(defvar-local spacemacs--centered-buffer-mode-origin-buffer nil)
|
(defvar-local spacemacs--centered-buffer-mode-origin-buffer nil)
|
||||||
(defvar-local spacemacs--centered-buffer-mode-indirect-buffer nil)
|
(defvar-local spacemacs--centered-buffer-mode-indirect-buffer nil)
|
||||||
|
@ -52,7 +55,7 @@ that differed modifications won't cause an overflow."
|
||||||
(define-minor-mode spacemacs-centered-buffer-mode
|
(define-minor-mode spacemacs-centered-buffer-mode
|
||||||
"Minor mode to center buffer in its window."
|
"Minor mode to center buffer in its window."
|
||||||
:init-value nil
|
:init-value nil
|
||||||
:group 'editing-basics
|
:group 'spacemacs-centered-buffer-mode
|
||||||
(if spacemacs-centered-buffer-mode
|
(if spacemacs-centered-buffer-mode
|
||||||
(if (not (window-dedicated-p))
|
(if (not (window-dedicated-p))
|
||||||
(spacemacs//centered-buffer-mode-enable-branch (called-interactively-p 'any))
|
(spacemacs//centered-buffer-mode-enable-branch (called-interactively-p 'any))
|
||||||
|
@ -80,7 +83,10 @@ Assume to be called interactively when INTERACT has non nil value."
|
||||||
origin-buffer)
|
origin-buffer)
|
||||||
t)))))
|
t)))))
|
||||||
(spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer t)
|
(spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer t)
|
||||||
(setq spacemacs--centered-buffer-mode-indirect-buffer indirect-buffer)
|
(setq spacemacs--centered-buffer-mode-indirect-buffer
|
||||||
|
indirect-buffer
|
||||||
|
spacemacs-centered-buffer-mode-default-fringe-color
|
||||||
|
(face-background 'fringe))
|
||||||
(when (derived-mode-p 'org-mode)
|
(when (derived-mode-p 'org-mode)
|
||||||
(setq-local org-startup-folded nil)
|
(setq-local org-startup-folded nil)
|
||||||
(outline-show-all))
|
(outline-show-all))
|
||||||
|
@ -203,17 +209,19 @@ if the buffer hasn't at least one live window. Disables `centered-buffer-mode' h
|
||||||
and advices if `spacemacs--centered-buffer-mode-indirect-buffers' has no elements left to
|
and advices if `spacemacs--centered-buffer-mode-indirect-buffers' has no elements left to
|
||||||
minimize the performance hit when the mode isn't used."
|
minimize the performance hit when the mode isn't used."
|
||||||
(dolist (buffer spacemacs--centered-buffer-mode-indirect-buffers)
|
(dolist (buffer spacemacs--centered-buffer-mode-indirect-buffers)
|
||||||
(unless (and (buffer-live-p buffer)
|
(unless (or (and (buffer-live-p buffer)
|
||||||
(window-live-p (get-buffer-window buffer t)))
|
(window-live-p (get-buffer-window buffer t)))
|
||||||
(delete buffer 'spacemacs--centered-buffer-mode-indirect-buffers)
|
(not spacemacs--centered-buffer-mode-indirect-buffers))
|
||||||
(let ((origin-buffer (buffer-local-value
|
(let ((origin-buffer (buffer-local-value
|
||||||
'spacemacs--centered-buffer-mode-origin-buffer
|
'spacemacs--centered-buffer-mode-origin-buffer
|
||||||
buffer)))
|
buffer)))
|
||||||
(when (buffer-live-p origin-buffer)
|
(when (ignore-errors (kill-buffer buffer))
|
||||||
(spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer nil)
|
(delete buffer 'spacemacs--centered-buffer-mode-indirect-buffers)
|
||||||
(with-current-buffer origin-buffer
|
(when (buffer-live-p origin-buffer)
|
||||||
(setq spacemacs--centered-buffer-mode-indirect-buffers nil))))
|
(spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer nil)
|
||||||
(kill-buffer buffer)))
|
(with-current-buffer origin-buffer
|
||||||
|
(setq spacemacs--centered-buffer-mode-indirect-buffers nil)))))))
|
||||||
|
;; Remove hooks and advices when they are not needed anymore.
|
||||||
(unless spacemacs--centered-buffer-mode-indirect-buffers
|
(unless spacemacs--centered-buffer-mode-indirect-buffers
|
||||||
(advice-remove 'spacemacs/previous-useful-buffer
|
(advice-remove 'spacemacs/previous-useful-buffer
|
||||||
#'spacemacs//centered-buffer-mode-prev-next-useful-buffer-advice)
|
#'spacemacs//centered-buffer-mode-prev-next-useful-buffer-advice)
|
||||||
|
|
|
@ -29,8 +29,11 @@
|
||||||
(require 'org)
|
(require 'org)
|
||||||
(require 'centered-buffer-mode)
|
(require 'centered-buffer-mode)
|
||||||
|
|
||||||
|
(defgroup space-doc nil "Minor mode for viewing Spacemacs documentation files."
|
||||||
|
:group 'convenience)
|
||||||
|
|
||||||
(define-minor-mode space-doc-mode
|
(define-minor-mode space-doc-mode
|
||||||
"Buffer local minor mode for Spacemacs documentation files.
|
"Buffer local minor mode for viewing Spacemacs documentation files.
|
||||||
This mode:
|
This mode:
|
||||||
- hides `org-mode' meta tags like #+TITLE: while
|
- hides `org-mode' meta tags like #+TITLE: while
|
||||||
keeping their content visible.
|
keeping their content visible.
|
||||||
|
@ -41,38 +44,74 @@ keeping their content visible.
|
||||||
================================================="
|
================================================="
|
||||||
:init-value nil
|
:init-value nil
|
||||||
:lighter " SD"
|
:lighter " SD"
|
||||||
;; Trans-buffer local minor mode...
|
:group 'space-doc
|
||||||
(let ((old-flag space-doc-mode))
|
(spacemacs//space-doc-centered-buffer-mode-goto-origin space-doc-mode)
|
||||||
(spacemacs-centered-buffer-mode -1)
|
|
||||||
(setq space-doc-mode old-flag))
|
|
||||||
(if (derived-mode-p 'org-mode)
|
(if (derived-mode-p 'org-mode)
|
||||||
(dolist (modificator (append (list 'spacemacs//space-doc-set-cache)
|
(progn
|
||||||
spacemacs-space-doc-modificators))
|
(spacemacs//space-doc-set-cache space-doc-mode)
|
||||||
(funcall modificator space-doc-mode))
|
(dolist (modificator spacemacs-space-doc-modificators-functions)
|
||||||
|
(when (member (car modificator)
|
||||||
|
spacemacs-space-doc-modificators)
|
||||||
|
(funcall (cdr modificator) space-doc-mode))))
|
||||||
(message (format "space-doc-mode error:%s isn't an org-mode buffer"
|
(message (format "space-doc-mode error:%s isn't an org-mode buffer"
|
||||||
(buffer-name)))
|
(buffer-name)))
|
||||||
(setq space-doc-mode nil)))
|
(setq space-doc-mode nil)))
|
||||||
|
|
||||||
;; NOTE: Dont forget to update Spacemacs FAQ if you modify this list!
|
;; NOTE: Dont forget to update Spacemacs FAQ if you modify this list!
|
||||||
(defvar spacemacs-space-doc-modificators
|
(defcustom spacemacs-space-doc-modificators
|
||||||
'(spacemacs//space-doc-center-buffer-mode
|
'(center-buffer-mode
|
||||||
spacemacs//space-doc-org-indent-mode
|
org-indent-mode
|
||||||
spacemacs//space-doc-view-mode
|
view-mode
|
||||||
spacemacs//space-doc-hide-line-numbers
|
hide-line-numbers
|
||||||
spacemacs//space-doc-emphasis-overlays
|
emphasis-overlays
|
||||||
spacemacs//space-doc-meta-tags-overlays
|
meta-tags-overlays
|
||||||
spacemacs//space-doc-link-protocol
|
link-protocol
|
||||||
spacemacs//space-doc-org-block-line-face-remap
|
org-block-line-face-remap
|
||||||
spacemacs//space-doc-org-kbd-face-remap
|
org-kbd-face-remap
|
||||||
spacemacs//space-doc-resize-inline-images
|
resize-inline-images
|
||||||
spacemacs//space-doc-advice-org-do-emphasis-faces)
|
advice-org-do-emphasis-faces)
|
||||||
"List of `space-doc' modificator functions for `org-mode' buffers.
|
"List of `space-doc' modificators."
|
||||||
|
:type '(set (const center-buffer-mode)
|
||||||
|
(const org-indent-mode)
|
||||||
|
(const view-mode)
|
||||||
|
(const hide-line-numbers)
|
||||||
|
(const emphasis-overlays)
|
||||||
|
(const meta-tags-overlays)
|
||||||
|
(const link-protocol)
|
||||||
|
(const org-block-line-face-remap)
|
||||||
|
(const org-kbd-face-remap)
|
||||||
|
(const resize-inline-images)
|
||||||
|
(const advice-org-do-emphasis-faces))
|
||||||
|
:group 'space-doc)
|
||||||
|
|
||||||
|
(defvar spacemacs-space-doc-modificators-functions
|
||||||
|
'((center-buffer-mode . spacemacs//space-doc-center-buffer-mode)
|
||||||
|
(org-indent-mode . spacemacs//space-doc-org-indent-mode)
|
||||||
|
(view-mode . spacemacs//space-doc-view-mode)
|
||||||
|
(hide-line-numbers . spacemacs//space-doc-hide-line-numbers)
|
||||||
|
(emphasis-overlays . spacemacs//space-doc-emphasis-overlays)
|
||||||
|
(meta-tags-overlays . spacemacs//space-doc-meta-tags-overlays)
|
||||||
|
(link-protocol . spacemacs//space-doc-link-protocol)
|
||||||
|
(org-block-line-face-remap . spacemacs//space-doc-org-block-line-face-remap)
|
||||||
|
(org-kbd-face-remap . spacemacs//space-doc-org-kbd-face-remap)
|
||||||
|
(resize-inline-images . spacemacs//space-doc-resize-inline-images)
|
||||||
|
(advice-org-do-emphasis-faces . spacemacs//space-doc-advice-org-do-emphasis-faces))
|
||||||
|
"alist of `space-doc' modificator (tag . function) for `org-mode' buffers.
|
||||||
The functions work with a current buffer and accept ENABLE(flag) argument.
|
The functions work with a current buffer and accept ENABLE(flag) argument.
|
||||||
If the argument has non-nil value - enable the modifications introduced
|
If the argument has non-nil value - enable the modifications introduced
|
||||||
by the function. Otherwise - disable.")
|
by the function. Otherwise - disable. The tags used in `spacemacs-space-doc-modificators'")
|
||||||
|
|
||||||
|
(defun spacemacs//space-doc-centered-buffer-mode-goto-origin (flag)
|
||||||
|
"Switch to the origin buffer if `spacemacs-centere-buffer-mode' is
|
||||||
|
enabled. Set the value of `space-doc-mode' variable in the origin
|
||||||
|
buffer to FLAG."
|
||||||
|
(when spacemacs-centered-buffer-mode
|
||||||
|
(let ((old-flag space-doc-mode))
|
||||||
|
(spacemacs-centered-buffer-mode -1)
|
||||||
|
(setq space-doc-mode old-flag))))
|
||||||
|
|
||||||
(defun spacemacs//space-doc-centered-buffer-mode-hook ()
|
(defun spacemacs//space-doc-centered-buffer-mode-hook ()
|
||||||
"Applies `spacemacs//space-doc-emphasis-overlays' to the
|
"Apply `spacemacs//space-doc-emphasis-overlays' to the
|
||||||
indirect buffer (because overlays aren't copied from the original one).
|
indirect buffer (because overlays aren't copied from the original one).
|
||||||
And calculates `spacemacs//space-doc-set-cache' (it's buffer local)."
|
And calculates `spacemacs//space-doc-set-cache' (it's buffer local)."
|
||||||
(when space-doc-mode
|
(when space-doc-mode
|
||||||
|
@ -89,10 +128,11 @@ And calculates `spacemacs//space-doc-set-cache' (it's buffer local)."
|
||||||
(defun spacemacs//space-doc-center-buffer-mode (&optional flag)
|
(defun spacemacs//space-doc-center-buffer-mode (&optional flag)
|
||||||
"Enable `spacemacs-centered-buffer-mode' if flag is non nil, disable it otherwise.
|
"Enable `spacemacs-centered-buffer-mode' if flag is non nil, disable it otherwise.
|
||||||
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
|
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
|
||||||
(when (and flag (not spacemacs-centered-buffer-mode))
|
(if (and flag (not spacemacs-centered-buffer-mode))
|
||||||
;; `spacemacs-centered-buffer-mode' is heavy so it's better to make if deferred.
|
;; `spacemacs-centered-buffer-mode' is heavy so it's better to make if deferred.
|
||||||
;; Also it has to be run when the `window-body-width' is properly calculated.
|
;; Also it has to be run when the `window-body-width' is properly calculated.
|
||||||
(run-with-idle-timer 0 nil 'spacemacs-centered-buffer-mode)))
|
(run-with-idle-timer 0 nil 'spacemacs-centered-buffer-mode))
|
||||||
|
(spacemacs-centered-buffer-mode -1))
|
||||||
|
|
||||||
(defun spacemacs//space-doc-org-indent-mode (&optional flag)
|
(defun spacemacs//space-doc-org-indent-mode (&optional flag)
|
||||||
"Enable `org-indent-mode' if flag is non nil, disable it otherwise.
|
"Enable `org-indent-mode' if flag is non nil, disable it otherwise.
|
||||||
|
|
Loading…
Reference in New Issue