branch: externals/olivetti commit 8556abbfdb185c7915868a88e56ca71ea4857d6d Author: Paul Rankin <he...@paulwrankin.com> Commit: Paul Rankin <he...@paulwrankin.com>
Rearranging code for clarity --- olivetti.el | 127 ++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 68 insertions(+), 59 deletions(-) diff --git a/olivetti.el b/olivetti.el index 1a00d39..dc70db6 100644 --- a/olivetti.el +++ b/olivetti.el @@ -147,7 +147,60 @@ exiting. The reverse is not true." :group 'olivetti) -;;; Functions +;;; Set Environment + +(defun olivetti-set-environment () + "Set text body width to `olivetti-body-width' with relative margins. + +Cycle through all windows displaying current buffer and, first, +find the `olivetti-safe-width' to which to set +`olivetti-body-width', then find the appropriate margin size +relative to each window. Finally set the window margins, taking +care that the maximum size is 0." + (dolist (window (get-buffer-window-list nil nil t)) + (let* ((n (olivetti-safe-width (if (integerp olivetti-body-width) + (olivetti-scale-width olivetti-body-width) + olivetti-body-width) + window)) + (width (cond ((integerp n) n) + ((floatp n) (* (window-total-width window) + n)))) + (margin (max (round (/ (- (window-total-width window) + width) + 2)) + 0))) + (set-window-parameter window 'split-window 'olivetti-split-window) + (set-window-margins window margin margin)))) + +(defun olivetti-reset-environment () + "Remove Olivetti's parameters and margins. + +Cycle through all windows displaying current buffer and reset +window parameter `split-window' to nil. Then reset the window +margins to nil." + (dolist (window (get-buffer-window-list nil nil t)) + (set-window-parameter window 'split-window nil) + (set-window-margins window nil nil))) + +(defun olivetti-split-window (&optional window size side pixelwise) + "Safely split the window by first resetting the environment. + +First call `olivetti-reset-environment' then try +`split-window'. + +If `olivetti-mode' is non-nil, call `olivetti-set-environment'." + (olivetti-reset-environment) + (split-window window size side pixelwise) + (if olivetti-mode (olivetti-set-environment))) + +(defun olivetti-split-window-sensibly (&optional window) + "Like `olivetti-split-window' but calls `split-window-sensibly'." + (olivetti-reset-environment) + (split-window-sensibly window) + (if olivetti-mode (olivetti-set-environment))) + + +;;; Set Mode-Line (defun olivetti-set-mode-line (&optional arg) "Set the mode line formating appropriately. @@ -169,6 +222,17 @@ mode line." (olivetti-hide-mode-line (setq-local mode-line-format nil)))) +(defun olivetti-toggle-hide-mode-line () + "Toggle the visibility of the mode-line. + +Toggles the value of `olivetti-hide-mode-line' and runs +`olivetti-set-mode-line'." + (interactive) + (olivetti-set-mode-line 'toggle)) + + +;;; Calculate Width + (defun olivetti-scale-width (n) "Scale N in accordance with the face height. @@ -202,6 +266,9 @@ face, scale N by that factor, otherwise scale by 1." (setq olivetti-body-width (eval (car (get 'olivetti-body-width 'standard-value)))))))) + +;;; Width Interaction + (defun olivetti-set-width (n) "Set text body width to N with relative margins. @@ -215,64 +282,6 @@ fraction of the window width." (olivetti-set-environment) (message "Text body width set to %s" olivetti-body-width)) -(defun olivetti-set-environment () - "Set text body width to `olivetti-body-width' with relative margins. - -Cycle through all windows displaying current buffer and, first, -find the `olivetti-safe-width' to which to set -`olivetti-body-width', then find the appropriate margin size -relative to each window. Finally set the window margins, taking -care that the maximum size is 0." - (dolist (window (get-buffer-window-list nil nil t)) - (let* ((n (olivetti-safe-width (if (integerp olivetti-body-width) - (olivetti-scale-width olivetti-body-width) - olivetti-body-width) - window)) - (width (cond ((integerp n) n) - ((floatp n) (* (window-total-width window) - n)))) - (margin (max (round (/ (- (window-total-width window) - width) - 2)) - 0))) - (set-window-parameter window 'split-window 'olivetti-split-window) - (set-window-margins window margin margin)))) - -(defun olivetti-reset-environment () - "Remove Olivetti's parameters and margins. - -Cycle through all windows displaying current buffer and reset -window parameter `split-window' to nil. Then reset the window -margins to nil." - (dolist (window (get-buffer-window-list nil nil t)) - (set-window-parameter window 'split-window nil) - (set-window-margins window nil nil))) - -(defun olivetti-split-window (&optional window size side pixelwise) - "Safely split the window by first resetting the environment. - -First call `olivetti-reset-environment' then try -`split-window'. - -If `olivetti-mode' is non-nil, call `olivetti-set-environment'." - (olivetti-reset-environment) - (split-window window size side pixelwise) - (if olivetti-mode (olivetti-set-environment))) - -(defun olivetti-split-window-sensibly (&optional window) - "Like `olivetti-split-window' but calls `split-window-sensibly'." - (olivetti-reset-environment) - (split-window-sensibly window) - (if olivetti-mode (olivetti-set-environment))) - -(defun olivetti-toggle-hide-mode-line () - "Toggle the visibility of the mode-line. - -Toggles the value of `olivetti-hide-mode-line' and runs -`olivetti-set-mode-line'." - (interactive) - (olivetti-set-mode-line 'toggle)) - (defun olivetti-expand (&optional arg) "Incrementally increase the value of `olivetti-body-width'.