From aaec051c60aed4c0018ab25d912622e3ff13489d Mon Sep 17 00:00:00 2001 From: Marcus Kammer <2262664-marcuskammer@user.noreply.gitlab.com> Date: Sat, 28 Mar 2020 11:06:23 +0100 Subject: [PATCH] Install olivetti --- bundle/custom.el | 2 +- .../olivetti-autoloads.el | 30 ++ elpa/olivetti-20200320.1154/olivetti-pkg.el | 2 + elpa/olivetti-20200320.1154/olivetti.el | 386 ++++++++++++++++++ elpa/olivetti-20200320.1154/olivetti.elc | Bin 0 -> 10131 bytes 5 files changed, 419 insertions(+), 1 deletion(-) create mode 100644 elpa/olivetti-20200320.1154/olivetti-autoloads.el create mode 100644 elpa/olivetti-20200320.1154/olivetti-pkg.el create mode 100644 elpa/olivetti-20200320.1154/olivetti.el create mode 100644 elpa/olivetti-20200320.1154/olivetti.elc diff --git a/bundle/custom.el b/bundle/custom.el index cf13f448..cb0d8547 100644 --- a/bundle/custom.el +++ b/bundle/custom.el @@ -68,7 +68,7 @@ '(package-enable-at-startup t) '(package-selected-packages (quote - (ace-window graphviz-dot-mode dot-mode plantuml-mode elisp-format elisp-lint flymake-racket google-translate org-pomodoro elm-mode dashboard pickle poet-theme flymake-eslint json-mode elpy darkroom dockerfile-mode ein spacemacs-theme flucui-themes leuven-theme htmlize scss-mode berrys-theme web-mode python-docstring sphinx-doc sphinx-frontend sphinx-mode ox-nikola racket-mode slime gherkin-mode powershell typescript-mode ob-http ob-ipython ob-restclient nord-theme restclient request restclient-test yaml-mode magit))) + (olivetti ace-window graphviz-dot-mode dot-mode plantuml-mode elisp-format elisp-lint flymake-racket google-translate org-pomodoro elm-mode dashboard pickle poet-theme flymake-eslint json-mode elpy darkroom dockerfile-mode ein spacemacs-theme flucui-themes leuven-theme htmlize scss-mode berrys-theme web-mode python-docstring sphinx-doc sphinx-frontend sphinx-mode ox-nikola racket-mode slime gherkin-mode powershell typescript-mode ob-http ob-ipython ob-restclient nord-theme restclient request restclient-test yaml-mode magit))) '(python-shell-interpreter "python3") '(register-preview-delay 2) '(register-separator 43) diff --git a/elpa/olivetti-20200320.1154/olivetti-autoloads.el b/elpa/olivetti-20200320.1154/olivetti-autoloads.el new file mode 100644 index 00000000..ee51f9cb --- /dev/null +++ b/elpa/olivetti-20200320.1154/olivetti-autoloads.el @@ -0,0 +1,30 @@ +;;; olivetti-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "olivetti" "olivetti.el" (0 0 0 0)) +;;; Generated autoloads from olivetti.el + +(autoload 'olivetti-mode "olivetti" "\ +Olivetti provides a nice writing environment. + +Window margins are set to relative widths to accomodate a text +body width set with `olivetti-body-width'. + +\(fn &optional ARG)" t nil) + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "olivetti" '("olivetti-"))) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; olivetti-autoloads.el ends here diff --git a/elpa/olivetti-20200320.1154/olivetti-pkg.el b/elpa/olivetti-20200320.1154/olivetti-pkg.el new file mode 100644 index 00000000..d754a189 --- /dev/null +++ b/elpa/olivetti-20200320.1154/olivetti-pkg.el @@ -0,0 +1,2 @@ +;;; -*- no-byte-compile: t -*- +(define-package "olivetti" "20200320.1154" "Minor mode for a nice writing environment" '((emacs "24.5")) :commit "5dc27716c706166e1932f4a0e9f94384b6d17cb0" :keywords '("wp" "text") :authors '(("William Rankin" . "code@william.bydasein.com")) :maintainer '("William Rankin" . "code@william.bydasein.com") :url "https://gthub.com/rnkn/olivetti") diff --git a/elpa/olivetti-20200320.1154/olivetti.el b/elpa/olivetti-20200320.1154/olivetti.el new file mode 100644 index 00000000..585d2b01 --- /dev/null +++ b/elpa/olivetti-20200320.1154/olivetti.el @@ -0,0 +1,386 @@ +;;; olivetti.el --- Minor mode for a nice writing environment -*- lexical-binding: t; -*- + +;; Copyright (c) 2014-2019 Paul Wiliam Rankin +;; Copyright (c) 2019 Free Software Foundation, Inc. +;; Copyright (c) 2019-2020 Paul Wiliam Rankin + +;; Author: William Rankin +;; Keywords: wp, text +;; Package-Version: 20200320.1154 +;; Version: 1.9.3 +;; Package-Requires: ((emacs "24.5")) +;; URL: https://gthub.com/rnkn/olivetti + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; # Olivetti # + +;; A simple Emacs minor mode for a nice writing environment. + +;; ## Features ## + +;; - Set a desired text body width to automatically resize window margins to +;; keep the text comfortably in the middle of the window. +;; - Text body width can be the number of characters (an integer) or a fraction +;; of the window width (a float between 0.0 and 1.0). +;; - Interactively change body width with: +;; olivetti-shrink C-c { { { ... +;; olivetti-expand C-c } } } ... +;; olivetti-set-width C-c \ +;; - If olivetti-body-width is an integer, the text body width will scale with +;; use of text-scale-mode, whereas if a fraction (float) then the text body +;; width will remain at that fraction. +;; - Optionally remember the state of visual-line-mode on entry and recall its +;; state on exit. + +;; Olivetti keeps everything it does buffer-local, so you can write prose in one +;; buffer and code in another, side-by-side in the same frame. For those looking +;; for a hardcore distraction-free writing mode with a much larger scope, I +;; recommend writeroom-mode: https://github.com/joostkremers/writeroom-mode. + +;; ## Requirements ## + +;; - Emacs 25.3 + +;; ## Installation ## + +;; The latest stable release of Olivetti is available via [MELPA-stable] +;; and can be installed with: + +;; M-x package-install RET olivetti RET + +;; Alternately, download the [latest release], move this file into your +;; load-path and add to your .emacs/init.el file: + +;; (require 'olivetti) + +;; If you prefer the latest but perhaps unstable version, install via +;; [MELPA], or clone the repository into your load-path and require as +;; above: + +;; git clone https://github.com/rnkn/olivetti.git + +;; [melpa]: https://melpa.org/#/olivetti "MELPA" +;; [melpa-stable]: https://stable.melpa.org/#/olivetti "MELPA-stable" +;; [latest release]: https://github.com/rnkn/olivetti/releases/latest "Olivetti latest release" + +;; ## Contributing ## + +;; Please report bugs and request features at: +;; https://github.com/rnkn/olivetti/issues + +;; ## Hints ## + +;; To always use a different width for a specific file, set a File +;; Variable: + +;; M-x add-file-local-variable RET olivetti-body-width RET 66 RET + +;; See (info "(emacs) File Variables") + + +;;; Code: + +(defgroup olivetti () + "Minor mode for a nice writing environment" + :prefix "olivetti-" + :group 'text) + + +;;; Variables + +(defvar-local olivetti--visual-line-mode + nil + "Non-nil if `visual-line-mode' is active when `olivetti-mode' is turned on.") + + +;;; Options + +(defcustom olivetti-mode-hook + nil + "Hook for `olivetti-mode', run after the mode is activated." + :type 'hook + :safe 'hook) + +(defcustom olivetti-body-width + 70 + "Text body width to which to adjust relative margin width. + +If an integer, set text body width to that integer in columns; if +a floating point between 0.0 and 1.0, set text body width to +that fraction of the total window width. + +An integer is best if you want text body width to remain +constant, while a floating point is best if you want text body +width to change with window width. + +The floating point can anything between 0.0 and 1.0 (exclusive), +but it's better to use a value between about 0.33 and 0.9 for +best effect. + +This option does not affect file contents." + :type '(choice (integer 70) (float 0.5)) + :safe 'numberp) +(make-variable-buffer-local 'olivetti-body-width) + +(defcustom olivetti-minimum-body-width + 40 + "Minimum width in columns that text body width may be set." + :type 'integer + :safe 'integerp) + +(defcustom olivetti-lighter + " Olv" + "Mode-line indicator for `olivetti-mode'." + :type '(choice (const :tag "No lighter" "") string) + :safe 'stringp) + +(defcustom olivetti-recall-visual-line-mode-entry-state + t + "Recall the state of `visual-line-mode' upon exiting. + +When non-nil, if `visual-line-mode' is inactive upon activating +`olivetti-mode', then `visual-line-mode' will be deactivated upon +exiting. The reverse is not true." + :type 'boolean + :safe 'booleanp) + + +;;; Set Environment + +(defun olivetti-set-all-margins () + "Balance window margins in all windows displaying current buffer. + +Cycle through all windows in all frames displaying the current +buffer, and call `olivetti-set-margins'." + (dolist (window (get-buffer-window-list nil nil t)) + (olivetti-set-margins window))) + +(defun olivetti-set-margins (&optional frame-or-window) + "Balance window margins displaying current buffer. + +If FRAME-OR-WINDOW is a frame, cycle through windows displaying +current buffer in that frame, otherwise only work on the selected +window. + +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." + (if (framep frame-or-window) + (dolist (window (get-buffer-window-list nil nil frame-or-window)) + (olivetti-set-margins window)) + ;; FRAME-OR-WINDOW passed below *must* be a window + (olivetti-reset-window frame-or-window) + (let ((width (olivetti-safe-width olivetti-body-width frame-or-window)) + (frame (window-frame frame-or-window)) + (window-width (window-total-width frame-or-window)) + (fringes (window-fringes frame-or-window)) + left-fringe right-fringe margin-total left-margin right-margin) + (cond ((integerp width) + (setq width (olivetti-scale-width width))) + ((floatp width) + (setq width (* window-width width)))) + (setq left-fringe (/ (car fringes) (float (frame-char-width frame))) + right-fringe (/ (cadr fringes) (float (frame-char-width frame)))) + (setq margin-total (max (/ (- window-width width) 2) 0) + left-margin (max (round (- margin-total left-fringe)) 0) + right-margin (max (round (- margin-total right-fringe)) 0)) + (set-window-parameter frame-or-window 'split-window 'olivetti-split-window) + (set-window-margins frame-or-window left-margin right-margin)))) + +(defun olivetti-reset-all-windows () + "Remove Olivetti's parameters and margins from all windows. + +Cycle through all windows displaying current buffer and call +`olivetti-reset-window'." + (dolist (window (get-buffer-window-list nil nil t)) + (olivetti-reset-window window))) + +(defun olivetti-reset-window (window) + "Remove Olivetti's parameters and margins from WINDOW." + (when (eq (window-parameter window 'split-window) 'olivetti-split-window) + (set-window-parameter window 'split-window nil)) + (set-window-margins window nil)) + +(defun olivetti-split-window (&optional window size side pixelwise) + "Call `split-window' after resetting WINDOW. +Pass SIZE, SIDE and PIXELWISE unchanged." + (olivetti-reset-window window) + (split-window window size side pixelwise)) + +(defun olivetti-split-window-sensibly (&optional window) + "Like `olivetti-split-window' but call `split-window-sensibly'. +Pass WINDOW unchanged." + (olivetti-reset-window window) + (split-window-sensibly window)) + + +;;; Calculate Width + +(defun olivetti-scale-width (n) + "Scale N in accordance with the face height. + +For compatibility with `text-scale-mode', if +`face-remapping-alist' includes a :height property on the default +face, scale N by that factor if it is a fraction, by (height/100) +if it is an integer, and otherwise scale by 1." + (let + ((height (plist-get (cadr (assq 'default face-remapping-alist)) :height))) + (cond + ((integerp height) (* n (/ height 100.0))) + ((floatp height) (* n height)) + (t n)))) + +(defun olivetti-safe-width (width window) + "Parse WIDTH to a safe value for `olivetti-body-width' for WINDOW. + +May return a float with many digits of precision." + (let ((window-width (window-total-width window)) + (fringes (window-fringes window)) + (min-width (+ olivetti-minimum-body-width + (% olivetti-minimum-body-width 2)))) + (setq window-width + (- window-width + (/ (* (max (car fringes) (cadr fringes)) 2) + (float (frame-char-width (window-frame window)))) + (% window-width 2))) + (cond ((integerp width) + (max min-width (min width (floor window-width)))) + ((floatp width) + (max (/ min-width window-width) (min width 1.0))) + ((user-error "`olivetti-body-width' must be an integer or a float") + ;; FIXME: This code is unreachable since we signal an error before + ;; getting here!? + (eval (car (get 'olivetti-body-width 'standard-value)) t))))) + + +;;; Keymap + +(defvar olivetti-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c }") #'olivetti-expand) + (define-key map (kbd "C-c {") #'olivetti-shrink) + (define-key map (kbd "C-c \\") #'olivetti-set-width) + map) + "Mode map for `olivetti-mode'.") + + +;;; Width Interaction + +(defun olivetti-set-width (n) + "Set text body width to N with relative margins. + +N may be an integer specifying columns or a float specifying a +fraction of the window width." + (interactive + (list (or current-prefix-arg + (read-number "Set text body width (integer or float): " + olivetti-body-width)))) + (setq olivetti-body-width n) + (olivetti-set-all-margins) + (message "Text body width set to %s" olivetti-body-width)) + +(defun olivetti-expand (&optional arg) + "Incrementally increase the value of `olivetti-body-width'. + +If prefixed with ARG, incrementally decrease." + (interactive "P") + (let* ((p (if arg -1 1)) + (n (cond ((integerp olivetti-body-width) + (+ olivetti-body-width (* 2 p))) + ((floatp olivetti-body-width) + (+ olivetti-body-width (* 0.01 p)))))) + (setq olivetti-body-width (olivetti-safe-width n (selected-window)))) + (olivetti-set-all-margins) + (message "Text body width set to %s" olivetti-body-width) + (unless overriding-terminal-local-map + (let ((keys (substring (this-single-command-keys) 0 -1)) + (map (cdr olivetti-mode-map))) + (mapc (lambda (k) (setq map (assq k map))) keys) + (when (consp map) (set-transient-map (cdr map) t))))) + +(defun olivetti-shrink (&optional arg) + "Incrementally decrease the value of `olivetti-body-width'. + +If prefixed with ARG, incrementally increase." + (interactive "P") + (let ((p (unless arg t))) + (olivetti-expand p))) + + +;;; Mode Definition + +(define-obsolete-function-alias 'turn-on-olivetti-mode + #'olivetti-mode "1.7.0") + +;;;###autoload +(define-minor-mode olivetti-mode + "Olivetti provides a nice writing environment. + +Window margins are set to relative widths to accomodate a text +body width set with `olivetti-body-width'." + :init-value nil + :lighter olivetti-lighter + (if olivetti-mode + (progn + (add-hook 'text-scale-mode-hook + #'olivetti-set-margins t t) + (cond ((<= emacs-major-version 24) + (add-hook 'window-configuration-change-hook + #'olivetti-set-all-margins t t)) + ((<= emacs-major-version 26) + (add-hook 'window-configuration-change-hook + #'olivetti-set-all-margins t t) + (add-hook 'window-size-change-functions + #'olivetti-set-margins t t)) + ((<= 27 emacs-major-version) + (add-hook 'window-size-change-functions + #'olivetti-set-margins t t))) + (add-hook 'change-major-mode-hook + #'olivetti-reset-all-windows nil t) + (setq-local split-window-preferred-function + #'olivetti-split-window-sensibly) + (setq olivetti--visual-line-mode visual-line-mode) + (unless olivetti--visual-line-mode (visual-line-mode 1)) + (olivetti-set-all-margins)) + (remove-hook 'text-scale-mode-hook + #'olivetti-set-margins t) + (remove-hook 'window-configuration-change-hook + #'olivetti-set-all-margins t) + (remove-hook 'window-size-change-functions + #'olivetti-set-margins t) + (olivetti-reset-all-windows) + (when (and olivetti-recall-visual-line-mode-entry-state + (not olivetti--visual-line-mode)) + (visual-line-mode 0)) + (kill-local-variable 'split-window-preferred-function) + (kill-local-variable 'olivetti--visual-line-mode))) + + + +(provide 'olivetti) + +;;; olivetti.el ends here + +;; Local Variables: +;; coding: utf-8 +;; fill-column: 80 +;; require-final-newline: t +;; sentence-end-double-space: nil +;; End: diff --git a/elpa/olivetti-20200320.1154/olivetti.elc b/elpa/olivetti-20200320.1154/olivetti.elc new file mode 100644 index 0000000000000000000000000000000000000000..61fade9def0954c01ea25f91f0b28325415f0700 GIT binary patch literal 10131 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 literal 0 HcmV?d00001