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=: 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-org-indent-mode '(spacemacs//space-doc-center-buffer-mode
spacemacs//space-doc-org-indent-mode
spacemacs//space-doc-view-mode spacemacs//space-doc-view-mode
spacemacs//space-doc-hide-line-numbers spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-emphasis-overlays 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 #+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. 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. 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 ** 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))) (call-interactively 'spacemacs-centered-buffer-mode)))
(defun spacemacs/centered-buffer-mode-full-width () (defun spacemacs/centered-buffer-mode-full-width ()
"Toggle `spacemacs-centered-buffer-mode'." "Center buffer in the frame."
(interactive) (interactive)
(when (require 'centered-buffer-mode nil t) (when (require 'centered-buffer-mode nil t)
(spacemacs/maximize-horizontally) (spacemacs/maximize-horizontally)

View File

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

View File

@ -27,6 +27,7 @@
;;; Code: ;;; Code:
(require 'face-remap) (require 'face-remap)
(require 'org) (require 'org)
(require 'centered-buffer-mode)
(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 Spacemacs documentation files.
@ -48,7 +49,8 @@ keeping their content visible.
;; 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 (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-view-mode
spacemacs//space-doc-hide-line-numbers spacemacs//space-doc-hide-line-numbers
spacemacs//space-doc-emphasis-overlays spacemacs//space-doc-emphasis-overlays
@ -69,6 +71,36 @@ by the function. Otherwise - disable.")
"Same as `spacemacs-space-doc-modificators' but the modificators will "Same as `spacemacs-space-doc-modificators' but the modificators will
be run deferred.") 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) (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.
This functions is aimed to be used with `spacemacs-space-doc-modificators'." 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) 'spacemacs--space-doc-org-kbd-face-remap-cookie)
(face-remap-add-relative 'org-kbd (face-remap-add-relative 'org-kbd
`(:box nil))) `(:box nil)))
(face-remap-remove-relative (when (bound-and-true-p spacemacs--space-doc-org-kbd-face-remap-cookie)
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) (defun spacemacs//space-doc-resize-inline-images (&optional enable)
"Resize inline images. "Resize inline images.