Skip to content

Commit

Permalink
refactor space-doc, add to the FAQ.
Browse files Browse the repository at this point in the history
  • Loading branch information
JAremko authored and syl20bnr committed Jul 5, 2016
1 parent 3aaa39f commit e3c8685
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 49 deletions.
20 changes: 20 additions & 0 deletions doc/FAQ.org
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
- [[#try-spacemacs-without-modifying-my-existing-emacs-configuration][Try Spacemacs without modifying my existing Emacs configuration?]]
- [[#make-copypaste-working-with-the-mouse-in-x11-terminals][Make copy/paste working with the mouse in X11 terminals?]]
- [[#use-helm-ag-to-search-only-in-files-of-a-certain-type][Use =helm-ag= to search only in files of a certain type?]]
- [[#modify-spacemacs-documentation-look-space-doc-mode][Modify spacemacs documentation look (space-doc-mode)]]
- [[#remap-paste-key-to-be-able-to-paste-copied-text-multiple-times][Remap paste key to be able to paste copied text multiple times]]
- [[#windows][Windows]]
- [[#why-do-the-fonts-look-crappy-on-windows][Why do the fonts look crappy on Windows?]]
Expand Down Expand Up @@ -494,6 +495,25 @@ some expressions to the search input:
This is possible because =helm-ag= is treating the search input as command-line
arguments of the =ag= program.

** Modify spacemacs documentation look (space-doc-mode)
You can modify the list of visual enhancements applied by the =space-doc-mode=:
#+BEGIN_SRC emacs-lisp
(setq spacemacs-space-doc-modificators
'(spacemacs//space-doc-org-indent-mode
spacemacs//space-doc-view-mode
spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-emphasis-overlays
spacemacs//space-doc-meta-tags-overlays
spacemacs//space-doc-link-protocol
spacemacs//space-doc-org-block-line-face-remap
spacemacs//space-doc-org-kbd-face-remap
spacemacs//space-doc-resize-inline-images
spacemacs//space-doc-advice-org-do-emphasis-faces)
#+END_SRC
It's the default value of the variable with all enhancements.
Each function in the list represents some modification.
You can make a modification deferred by moving it to =spacemacs-space-doc-modificators-deferred= list.

** 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
the same text multiple times.
Expand Down
102 changes: 53 additions & 49 deletions layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el
Original file line number Diff line number Diff line change
Expand Up @@ -38,40 +38,45 @@ keeping their content visible.
:init-value nil
:lighter " SD"
(if (derived-mode-p 'org-mode)
(dolist (modificator spacemacs--space-doc-modificators)
(dolist (modificator (append '(spacemacs//space-doc-set-cache
spacemacs//space-doc-runs-deferred)
spacemacs-space-doc-modificators))
(funcall modificator space-doc-mode))
(message (format "space-doc-mode error:%s isn't an org-mode buffer"
(buffer-name)))
(setq space-doc-mode nil)))

(defvar spacemacs--space-doc-modificators
;; NOTE: Dont forget to update Spacemacs FAQ if you modify this list!
(defvar spacemacs-space-doc-modificators
'(spacemacs//space-doc-org-indent-mode
spacemacs//space-doc-view-mode
spacemacs//space-doc-set-cache
spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-modf-emphasis-overlays
spacemacs//space-doc-modf-meta-tags-overlays
spacemacs//space-doc-modf-link-protocol
spacemacs//space-doc-modf-org-block-line-face-remap
spacemacs//space-doc-modf-org-kbd-face-remap
spacemacs//space-doc-modf-resize-inline-images
spacemacs//space-doc-modf-advice-org-do-emphasis-faces
(lambda (flag) (spacemacs//space-doc-run-modfs-deferred
'()
flag )))
"List of `space-doc' modificators for `org-mode' buffers.
spacemacs//space-doc-emphasis-overlays
spacemacs//space-doc-meta-tags-overlays
spacemacs//space-doc-link-protocol
spacemacs//space-doc-org-block-line-face-remap
spacemacs//space-doc-org-kbd-face-remap
spacemacs//space-doc-resize-inline-images
spacemacs//space-doc-advice-org-do-emphasis-faces)
"List of `space-doc' modificator functions for `org-mode' buffers.
The functions work with a current buffer and accept ENABLE(flag) argument.
If the argument has non-nil value - enable the modifications introduced
by the function. Otherwise - disable.")

;; NOTE: Dont forget to update Spacemacs FAQ if you modify this list!
(defvar spacemacs-space-doc-modificators-deferred
'()
"Same as `spacemacs-space-doc-modificators' but the modificators will
be run deferred.")

(defun spacemacs//space-doc-org-indent-mode (&optional flag)
"Enable `org-indent-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'."
(org-indent-mode (if flag 1 -1)))

(defun spacemacs//space-doc-view-mode (&optional flag)
"Enable `view-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'."
(view-mode (if flag 1 -1)))

(cl-defstruct spacemacs--space-doc-cache-struct
Expand All @@ -85,7 +90,7 @@ It is set by `spacemacs//space-doc-set-cache'.")

(defun spacemacs//space-doc-set-cache (&optional flag)
"Set `spacemacs--space-doc-cache'.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(setq spacemacs--space-doc-cache
(if flag
(let* ((kbd-bg (or (face-background 'org-kbd)
Expand All @@ -105,22 +110,21 @@ This functions is aimed to be used with `spacemacs--space-doc-modificators'."
(dolist (el org-emphasis-alist)
(when (member 'org-kbd el)
(return (car el))))))

(make-spacemacs--space-doc-cache-struct
:marker-face marker-face
:btn-marker-face btn-marker-face
:kbd-marker kbd-marker)))))

(defun spacemacs//space-doc-hide-line-numbers (&optional enable)
"If ENABLE is non-nil then toggle off the line numbers.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(if enable
(spacemacs/toggle-line-numbers-off)
(when dotspacemacs-line-numbers
(spacemacs/toggle-line-numbers-on))))

(defun spacemacs//space-doc-org-do-emphasis-faces-advice (found)
"If FOUND has non-nil value - modify emphasized regions
"If FOUND has non-nil value then modify emphasized regions
appearances in the current buffer. The function uses
`match-data' set by `org-do-emphasis-faces' function."
;; `org-do-emphasis-faces' returns non-nil value when it
Expand All @@ -138,13 +142,13 @@ appearances in the current buffer. The function uses
(match-end 2)))
found)

(defun spacemacs//space-doc-modf-advice-org-do-emphasis-faces (&optional enable)
(defun spacemacs//space-doc-advice-org-do-emphasis-faces (&optional enable)
"Advise org-do-emphasis-faces.
If ENABLE is non-nil, add advice `org-do-emphasis-faces' function with
`spacemacs//space-doc-org-do-emphasis-faces-advice'.
NOTE: `org-do-emphasis-faces' is lazy and will emphasize only part of the
current buffer so piggybacking it should be pretty performant solution.
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 enable
(advice-add 'org-do-emphasis-faces
:after
Expand Down Expand Up @@ -195,30 +199,30 @@ The character should be one of the markers from `org-emphasis-alist'."
(overlay-put ending-marker-overlay
'space-doc-emphasis-overlay t)))

(defun spacemacs//space-doc-modf-emphasis-overlays (&optional enable)
(defun spacemacs//space-doc-emphasis-overlays (&optional enable)
"Emphasis overlays.
If ENABLE is non-nil, overlay regions which have already been emphasized by
`org-do-emphasis-faces'in the current buffer.
Otherwise remove all overlays with property `space-doc-emphasis-overlay'.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
;; Remove overlays.
(dolist (overlay (overlays-in (point-min) (point-max)))
(when (overlay-get overlay 'space-doc-emphasis-overlay)
(delete-overlay overlay)))
(when enable
(dolist (emphasized-region
(spacemacs//space-doc-find-regions-by-text-property
'org-emphasis t))
(spacemacs//space-doc-emphasis-region
(car emphasized-region)
(cadr emphasized-region)))))
(dolist (emphasized-region
(spacemacs//space-doc-find-regions-by-text-property
'org-emphasis t))
(spacemacs//space-doc-emphasis-region
(car emphasized-region)
(cadr emphasized-region)))))

(defun spacemacs//space-doc-modf-org-kbd-face-remap (&optional enable)
"Remove boxes for key bindings.
(defun spacemacs//space-doc-org-kbd-face-remap (&optional enable)
"Remove boxes from key bindings.
If ENABLE is non-nil, removes boxes from the `org-kbd'face in the current
`org-mode' buffer.
Otherwise, reverts them to default.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(if enable
(set (make-local-variable
'spacemacs--space-doc-org-kbd-face-remap-cookie)
Expand All @@ -227,10 +231,10 @@ This functions is aimed to be used with `spacemacs--space-doc-modificators'."
(face-remap-remove-relative
spacemacs--space-doc-org-kbd-face-remap-cookie)))

(defun spacemacs//space-doc-modf-resize-inline-images (&optional enable)
(defun spacemacs//space-doc-resize-inline-images (&optional enable)
"Resize inline images.
If ENABLE is non nil then resize inline images.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
;; resizing is always performed even when the image is smaller
;; so we don't resize in README.org buffers for now
(let ((org-image-actual-width
Expand All @@ -239,12 +243,12 @@ This functions is aimed to be used with `spacemacs--space-doc-modificators'."
600)))
(org-display-inline-images)))

(defun spacemacs//space-doc-modf-meta-tags-overlays (&optional enable)
(defun spacemacs//space-doc-meta-tags-overlays (&optional enable)
"Modify meta tag appearance.
If ENABLE is non-nil, modify `org-mode' meta tags appearance in the current
buffer.
Otherwise, disable modifcations.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(if enable
;; TODO add more types of tags or meta-line if needed.
(let* ((invisible-org-meta-tags-list
Expand Down Expand Up @@ -291,13 +295,13 @@ This functions is aimed to be used with `spacemacs--space-doc-modificators'."
(when (overlay-get overlay 'space-doc-tag-overlay)
(delete-overlay overlay)))))

(defun spacemacs//space-doc-modf-org-block-line-face-remap (&optional enable)
(defun spacemacs//space-doc-org-block-line-face-remap (&optional enable)
"Hide drawers.
If ENABLE is non-nil, hide text of the code block meta lines in the current
buffer. If the blocks have background color text won't be masked because it
makes them look ugly with some themes.
If ENABLE has nil, revert to the default.
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(if enable
(let* ((default-bg (or (face-background 'default)
'unspecified))
Expand Down Expand Up @@ -330,12 +334,12 @@ This functions is aimed to be used with `spacemacs--space-doc-modificators'."
(face-remap-remove-relative
spacemacs--space-doc-org-block-end-line-face-remap-cookie))))

(defun spacemacs//space-doc-modf-link-protocol (&optional enable)
(defun spacemacs//space-doc-link-protocol (&optional enable)
"Open HTTPS links in the curren buffer.
If ENABLE is non-nil, use `spacemacs//space-doc-open' to open HTTPS links
in the current `org-mode' buffer.
Otherwise open them in the browser(default behavior).
This functions is aimed to be used with `spacemacs--space-doc-modificators'."
This functions is aimed to be used with `spacemacs-space-doc-modificators'."
(if enable
(progn
;; Make `space-doc' https link opener buffer local
Expand Down Expand Up @@ -366,22 +370,22 @@ Open all other links with `browse-url'."
'subtree)
(browse-url (concat "https://" path)))))

(defun spacemacs//space-doc-run-modfs-deferred (modfs &optional flag)
"Run each modf function from the MODFS list in the `run-with-idle-timer'
callback. This way heavy modfs won't affect document opening time.
FLAG is passed through."
(run-with-idle-timer 0 nil (lambda (modfs flag)
(dolist (modf modfs)
(defun spacemacs//space-doc-runs-deferred (&optional flag)
"Run each modificator function from the
`spacemacs-space-doc-modificators-deferred' list
in the next command loop. This way heavy modificator functions
won't affect document opening time. FLAG is passed through."
(run-with-idle-timer 0 nil (lambda (flag)
(dolist (modf spacemacs-space-doc-modificators-deferred)
(funcall modf flag)))
modfs flag))
flag))

(defun spacemacs//space-doc-find-regions-by-text-property
(property value &optional start end)
"Return a list of pairs (region-beginning region-end) in
the current buffer. If START or END has non-nil value - use them as
boundaries.
NOTE: It can find only fontified regions."

(let ((p-min (or start (point-min)))
(p-max (or end (point-max)))
(r-end nil)
Expand Down

0 comments on commit e3c8685

Please sign in to comment.