Add extra checks, cleanup

simplify space-doc customization

rearrange defcustom groups

more checks
This commit is contained in:
JAremko 2016-07-15 17:15:14 +03:00 committed by Eivind Fonn
parent 9ba525cdde
commit 7140e8dfa8
3 changed files with 99 additions and 53 deletions

View File

@ -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

View File

@ -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)

View File

@ -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.