Integrate centered-buffer-mode and space-doc-mode.

This commit is contained in:
JAremko 2016-07-06 02:36:15 +03:00 committed by syl20bnr
parent 070d59af13
commit f9a846d2ee
4 changed files with 82 additions and 47 deletions

View File

@ -499,7 +499,8 @@ arguments of the =ag= program.
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-center-buffer-mode
spacemacs//space-doc-org-indent-mode
spacemacs//space-doc-view-mode
spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-emphasis-overlays
@ -512,6 +513,7 @@ You can modify the list of visual enhancements applied by the =space-doc-mode=:
#+END_SRC
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!
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

View File

@ -209,7 +209,7 @@ automatically applied to."
(call-interactively 'spacemacs-centered-buffer-mode)))
(defun spacemacs/centered-buffer-mode-full-width ()
"Toggle `spacemacs-centered-buffer-mode'."
"Center buffer in the frame."
(interactive)
(when (require 'centered-buffer-mode nil t)
(spacemacs/maximize-horizontally)

View File

@ -38,9 +38,9 @@ that differed modifications won't cause an overflow."
:type 'integer
:group 'editing-basics)
(defcustom spacemacs-centered-buffer-mode-min-fringe-color "black"
(defcustom spacemacs-centered-buffer-mode-fringe-color "black"
"Color of the fringes."
:type 'string
:type 'color
:group 'editing-basics)
(defvar-local spacemacs--centered-buffer-mode-origin-buffer nil)
@ -52,7 +52,6 @@ that differed modifications won't cause an overflow."
"Minor mode to center buffer in its window."
:init-value nil
:group 'editing-basics
:lighter " -B-"
(if spacemacs-centered-buffer-mode
(let* ((window (selected-window))
(origin-buffer (window-buffer window))
@ -75,49 +74,50 @@ that differed modifications won't cause an overflow."
(outline-show-all))
(switch-to-buffer indirect-buffer nil t)
(with-mode-disabled page-break-lines-mode
(let* ((fringe-w (spacemacs//centered-buffer-calc-fringe
window)))
(if (> fringe-w spacemacs-centered-buffer-mode-min-fringe-width)
(progn
;; Fix visual glitch.
(spacemacs/toggle-line-numbers)
(spacemacs/toggle-line-numbers)
;;
(setq spacemacs--centered-buffer-mode-indirect-buffers
(append (list indirect-buffer)
spacemacs--centered-buffer-mode-indirect-buffers)
spacemacs--centered-buffer-mode-origin-buffer origin-buffer
spacemacs-centered-buffer-mode t
indicate-empty-lines nil
fringes-outside-margins t
left-fringe-width fringe-w
right-fringe-width fringe-w
;; looks better with some margin.
left-margin-width (if (or (not left-margin-width)
(= left-margin-width 0))
1
left-margin-width)
spacemacs--centered-buffer-mode-text-pixel-size
(car (window-text-pixel-size window)))
(face-remap-add-relative 'fringe :background
spacemacs-centered-buffer-mode-min-fringe-color)
(set-window-buffer window indirect-buffer)
(add-hook 'buffer-list-update-hook
'spacemacs//centered-buffer-buffer-list-update-fringes)
(add-hook 'window-configuration-change-hook
'spacemacs//centered-buffer-buffer-list-update-fringes))
(setq spacemacs--centered-buffer-mode-origin-buffer nil)
(set-buffer origin-buffer)
(kill-buffer indirect-buffer)
(setq spacemacs--centered-buffer-mode-indirect-buffer nil)
(when (called-interactively-p 'any)
(message "Not enough space to center the buffer!"))))))
(let* ((fringe-w (spacemacs//centered-buffer-calc-fringe
window)))
(if (> fringe-w spacemacs-centered-buffer-mode-min-fringe-width)
(progn
;; Fix visual glitch.
(spacemacs/toggle-line-numbers)
(spacemacs/toggle-line-numbers)
;;
(setq spacemacs--centered-buffer-mode-indirect-buffers
(append (list indirect-buffer)
spacemacs--centered-buffer-mode-indirect-buffers)
spacemacs--centered-buffer-mode-origin-buffer origin-buffer
spacemacs-centered-buffer-mode t
indicate-empty-lines nil
fringes-outside-margins t
left-fringe-width fringe-w
right-fringe-width fringe-w
;; looks better with some margin.
left-margin-width (if (or (not left-margin-width)
(= left-margin-width 0))
1
left-margin-width)
spacemacs--centered-buffer-mode-text-pixel-size
(car (window-text-pixel-size window)))
(face-remap-add-relative 'fringe :background
spacemacs-centered-buffer-mode-fringe-color)
(set-window-buffer window indirect-buffer)
(add-hook 'buffer-list-update-hook
'spacemacs//centered-buffer-buffer-list-update-fringes)
(add-hook 'window-configuration-change-hook
'spacemacs//centered-buffer-buffer-list-update-fringes))
(setq spacemacs--centered-buffer-mode-origin-buffer nil)
(set-buffer origin-buffer)
(kill-buffer indirect-buffer)
(setq spacemacs--centered-buffer-mode-indirect-buffer nil)
(when (called-interactively-p 'any)
(message "Not enough space to center the buffer!"))))))
(let* ((window (selected-window))
(origin-buffer spacemacs--centered-buffer-mode-origin-buffer)
(indirect-buffer (window-buffer window)))
(setq spacemacs--centered-buffer-mode-origin-buffer nil)
(switch-to-buffer origin-buffer nil t)
(setq spacemacs--centered-buffer-mode-indirect-buffer nil)
(when (buffer-live-p origin-buffer)
(switch-to-buffer origin-buffer nil t)
(setq spacemacs--centered-buffer-mode-indirect-buffer nil))
(when (buffer-live-p indirect-buffer)
(dolist (window (get-buffer-window-list indirect-buffer 2))
(set-window-buffer window origin-buffer))

View File

@ -27,6 +27,7 @@
;;; Code:
(require 'face-remap)
(require 'org)
(require 'centered-buffer-mode)
(define-minor-mode space-doc-mode
"Buffer local minor mode for Spacemacs documentation files.
@ -48,7 +49,8 @@ keeping their content visible.
;; 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-center-buffer-mode
spacemacs//space-doc-org-indent-mode
spacemacs//space-doc-view-mode
spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-emphasis-overlays
@ -69,6 +71,36 @@ by the function. Otherwise - disable.")
"Same as `spacemacs-space-doc-modificators' but the modificators will
be run deferred.")
(defun spacemacs//space-doc-center-buffer-mode (&optional flag)
"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'."
;;FIXME: Need to redesign this.. One day.
(if flag
(progn
;; HACK: Hide the original buffer from `spacemacs/previous-useful-buffer'.
(unless (and (string-prefix-p "*" (buffer-name))
(string-suffix-p "*" (buffer-name)))
(rename-buffer (format "*%s*" (buffer-name))))
(set (make-local-variable 'spacemacs--space-doc-origin-fringe-color)
(face-background 'fringe))
;; HACK: Fix glitchy fringe color.
(face-remap-add-relative 'fringe :background
spacemacs-centered-buffer-mode-fringe-color)
;; HACK: Needed to get proper content width.
(run-with-idle-timer 0 nil 'spacemacs-centered-buffer-mode +1))
(when spacemacs-centered-buffer-mode
(set-window-buffer
(selected-window)
spacemacs--centered-buffer-mode-origin-buffer)
(rename-buffer (substring (buffer-name) 1 (1- (length (buffer-name)))))
(kill-buffer spacemacs--centered-buffer-mode-indirect-buffer)
;; HACK: Now we call it for the original buffer.
(space-doc-mode -1))
(when (bound-and-true-p spacemacs--space-doc-origin-fringe-color)
;; HACK: Removing or reseting doesn't work.
(face-remap-add-relative 'fringe :background
spacemacs--space-doc-origin-fringe-color))))
(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'."
@ -228,8 +260,9 @@ This functions is aimed to be used with `spacemacs-space-doc-modificators'."
'spacemacs--space-doc-org-kbd-face-remap-cookie)
(face-remap-add-relative 'org-kbd
`(:box nil)))
(face-remap-remove-relative
spacemacs--space-doc-org-kbd-face-remap-cookie)))
(when (bound-and-true-p spacemacs--space-doc-org-kbd-face-remap-cookie)
(face-remap-remove-relative
spacemacs--space-doc-org-kbd-face-remap-cookie))))
(defun spacemacs//space-doc-resize-inline-images (&optional enable)
"Resize inline images.