From f9a846d2eeda4e49d734a2f314e927139e58f9b4 Mon Sep 17 00:00:00 2001 From: JAremko Date: Wed, 6 Jul 2016 02:36:15 +0300 Subject: [PATCH] Integrate centered-buffer-mode and space-doc-mode. --- doc/FAQ.org | 4 +- layers/+distributions/spacemacs-base/funcs.el | 2 +- .../centered-buffer-mode.el | 84 +++++++++---------- .../local/space-doc/space-doc.el | 39 ++++++++- 4 files changed, 82 insertions(+), 47 deletions(-) diff --git a/doc/FAQ.org b/doc/FAQ.org index dfc75464a..405cc0b28 100644 --- a/doc/FAQ.org +++ b/doc/FAQ.org @@ -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 diff --git a/layers/+distributions/spacemacs-base/funcs.el b/layers/+distributions/spacemacs-base/funcs.el index 4b497173a..355287b1f 100644 --- a/layers/+distributions/spacemacs-base/funcs.el +++ b/layers/+distributions/spacemacs-base/funcs.el @@ -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) diff --git a/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el b/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el index 34a0f7790..3113bcfca 100644 --- a/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el +++ b/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el @@ -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)) diff --git a/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el b/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el index 13d61f358..6b0598b10 100644 --- a/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el +++ b/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el @@ -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.