[elpa] externals/wisitoken-grammar-mode ca949b9: Release 1.0.3; fix more packaging bugs

2019-08-18 Thread Stephen Leake
branch: externals/wisitoken-grammar-mode
commit ca949b96aaf66eb30e357adbac95dbf0be2e
Author: Stephen Leake 
Commit: Stephen Leake 

Release 1.0.3; fix more packaging bugs

* build.sh: Add -j8.

* wisitoken-grammar-mmm.el: Delete.

* wisitoken-grammar-mode.el: Bump version.

* wisitoken_grammar.gpr: Delete; replace with .gp.

* wisitoken_grammar.gpr.gp: New file; choose 'wisi' or 'wisitoken'.
---
 build.sh  |   2 +-
 wisitoken-grammar-mmm.el  |  44 ---
 wisitoken-grammar-mode.el |   2 +-
 wisitoken_grammar.gpr => wisitoken_grammar.gpr.gp | 150 +++---
 4 files changed, 78 insertions(+), 120 deletions(-)

diff --git a/build.sh b/build.sh
index bfbb378..b054fc3 100755
--- a/build.sh
+++ b/build.sh
@@ -24,7 +24,7 @@ export GPR_PROJECT_PATH="../wisi-2.2.1"
 
 gnatprep -DELPA="yes" wisitoken_grammar.gpr.gp wisitoken_grammar.gpr
 
-gprbuild -p -P wisitoken_grammar.gpr
+gprbuild -p -j8 -P wisitoken_grammar.gpr
 gprinstall -f -p -P wisitoken_grammar.gpr --install-name=wisitoken_grammar
 
 # end of file
diff --git a/wisitoken-grammar-mmm.el b/wisitoken-grammar-mmm.el
deleted file mode 100644
index cc19a7c..000
--- a/wisitoken-grammar-mmm.el
+++ /dev/null
@@ -1,44 +0,0 @@
-;;; Define multi-major-mode stuff for wisitoken-grammar mode.  -*- 
lexical-binding:t -*-
-
-;; Copyright (C) 2019  Free Software Foundation, Inc.
-
-;; This file 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, or (at your option)
-;; any later version.
-
-;; This file 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 GNU Emacs.  If not, see .
-
-(require 'mmm-mode)
-
-(mmm-add-classes
- '((wisi-action
-:match-submode wisitoken-grammar-mmm-submode
-:face mmm-code-submode-face
-:front "%("
-:back ")%"
-:insert ((?a wisi-action nil @ "%(" @ "" _ "" @ ")%")))
-   (wisi-code
-:match-submode wisi-mmm-submode
-:face mmm-code-submode-face
-:front "%{"
-:back "}%"
-:insert ((?a wisi-code nil @ "%{" @ "" _ "" @ "}%")))
-   ))
-
-(defvar wisitoken-grammar-action-mode) ;; in wisitoken-grammar-mode.el
-(defun wisitoken-grammar-mmm-submode (_delim)
-  "for :match-submode"
-  wisitoken-grammar-action-mode)
-
-(add-to-list 'mmm-mode-ext-classes-alist '(wisitoken-grammar-mode nil 
wisi-action))
-(add-to-list 'mmm-mode-ext-classes-alist '(wisitoken-grammar-mode nil 
wisi-code))
-
-(provide 'wisitoken-grammar-mmm)
-;;; end of file
diff --git a/wisitoken-grammar-mode.el b/wisitoken-grammar-mode.el
index 42bfe65..493f337 100644
--- a/wisitoken-grammar-mode.el
+++ b/wisitoken-grammar-mode.el
@@ -5,7 +5,7 @@
 ;; Author: Stephen Leake 
 ;; Maintainer: Stephen Leake 
 ;; Keywords: languages
-;; Version: 1.0.2
+;; Version: 1.0.3
 ;; package-requires: ((wisi "2.2.1") (emacs "25.0") (mmm-mode "0.5.7"))
 
 ;; no upstream url; just ELPA
diff --git a/wisitoken_grammar.gpr b/wisitoken_grammar.gpr.gp
similarity index 96%
rename from wisitoken_grammar.gpr
rename to wisitoken_grammar.gpr.gp
index 7d65dde..3ac9502 100644
--- a/wisitoken_grammar.gpr
+++ b/wisitoken_grammar.gpr.gp
@@ -1,74 +1,76 @@
---  Abstract :
---
---  build executables
---
---  Copyright (C) 2017 Free Software Foundation, Inc.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, 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
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-with "wisi";
-with "wisitoken";
-with "standard_common";
-project WisiToken_Grammar is
-
-   for Main use
- ("wisitoken_grammar_mode_parse.ads",
-  "run_wisitoken_grammar_parse.ads"
- );
-
-   for Source_Dirs use (".");
-
-   case Standard_Common.Profile is
-   when "On" =>
-  for Object_Dir use "obj_pro";
-  for Exec_Dir use "exec_pro";
-
-   when "Off" =>
-  for Object_Dir use "obj";
-  for Exec_Dir use ".";
-   end case;
-
-   for Languages use ("Ada", "C");
-
-   package Compiler is
-
-  case 

[elpa] externals/exwm 5b9f4b0: Make it possible to answer questions from Emacs when in char-mode

2019-08-18 Thread Chris Feng
branch: externals/exwm
commit 5b9f4b0851d27e8132a930dfbfec0b94099a4c9f
Author: Chris Feng 
Commit: Chris Feng 

Make it possible to answer questions from Emacs when in char-mode

* exwm-input.el (exwm-input--echo-area-timer): New variable storing
the timer used for detecting echo area messages.
(exwm-input--on-minibuffer-setup, exwm-input--on-minibuffer-exit)
(exwm-input--on-echo-area-dirty, exwm-input--on-echo-area-clear): New
functions for grabbing/releasing keyboard when minibuffer/echo becomes
active/inactive.
(exwm-input--init, exwm-input--exit): Register/Unregister them.
(exwm-input--grab-keyboard, exwm-input--release-keyboard): Validate
buffers.
---
 exwm-input.el | 59 +++
 1 file changed, 55 insertions(+), 4 deletions(-)

diff --git a/exwm-input.el b/exwm-input.el
index 2b421d0..52370bf 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -140,6 +140,8 @@ defined in `exwm-mode-map' here."
 (defvar exwm-input--update-focus-window nil "The (Emacs) window to be focused.
 This value should always be overwritten.")
 
+(defvar exwm-input--echo-area-timer nil "Timer for detecting echo area dirty.")
+
 (defvar exwm-input--event-hook nil
   "Hook to run when EXWM receives an event.")
 
@@ -760,8 +762,10 @@ button event."
  :pointer-mode xcb:GrabMode:Async
  :keyboard-mode xcb:GrabMode:Sync))
   (exwm--log "Failed to grab keyboard for #x%x" id))
-(with-current-buffer (exwm--id->buffer id)
-  (setq exwm--input-mode 'line-mode
+(let ((buffer (exwm--id->buffer id)))
+  (when buffer
+(with-current-buffer buffer
+  (setq exwm--input-mode 'line-mode))
 
 (defun exwm-input--release-keyboard ( id)
   "Ungrab all key events on window ID."
@@ -775,8 +779,10 @@ button event."
  :modifiers xcb:ModMask:Any))
   (exwm--log "Failed to release keyboard for #x%x" id))
 (exwm-input--grab-global-prefix-keys id)
-(with-current-buffer (exwm--id->buffer id)
-  (setq exwm--input-mode 'char-mode
+(let ((buffer (exwm--id->buffer id)))
+  (when buffer
+(with-current-buffer buffer
+  (setq exwm--input-mode 'char-mode))
 
 ;;;###autoload
 (defun exwm-input-grab-keyboard ( id)
@@ -1027,6 +1033,39 @@ where both ORIGINAL-KEY and SIMULATED-KEY are key 
sequences."
   "Run in `post-command-hook'."
   (setq exwm-input--during-command nil))
 
+(defun exwm-input--on-minibuffer-setup ()
+  "Run in `minibuffer-setup-hook' to grab keyboard if necessary."
+  (exwm--log)
+  (with-current-buffer
+  (window-buffer (frame-selected-window exwm-workspace--current))
+(when (and (derived-mode-p 'exwm-mode)
+   (eq exwm--selected-input-mode 'char-mode))
+  (exwm-input--grab-keyboard exwm--id
+
+(defun exwm-input--on-minibuffer-exit ()
+  "Run in `minibuffer-exit-hook' to release keyboard if necessary."
+  (exwm--log)
+  (with-current-buffer
+  (window-buffer (frame-selected-window exwm-workspace--current))
+(when (and (derived-mode-p 'exwm-mode)
+   (eq exwm--selected-input-mode 'char-mode)
+   (eq exwm--input-mode 'line-mode))
+  (exwm-input--release-keyboard exwm--id
+
+(defun exwm-input--on-echo-area-dirty ()
+  "Run when new message arrives to grab keyboard if necessary."
+  (exwm--log)
+  (when (and (not (active-minibuffer-window))
+ (not (exwm-workspace--client-p))
+ cursor-in-echo-area)
+(exwm-input--on-minibuffer-setup)))
+
+(defun exwm-input--on-echo-area-clear ()
+  "Run in `echo-area-clear-hook' to release keyboard if necessary."
+  (exwm--log)
+  (unless (current-message)
+(exwm-input--on-minibuffer-exit)))
+
 (defun exwm-input--init ()
   "Initialize the keyboard module."
   (exwm--log)
@@ -1075,6 +1114,12 @@ where both ORIGINAL-KEY and SIMULATED-KEY are key 
sequences."
   ;; Control `exwm-input--during-command'
   (add-hook 'pre-command-hook #'exwm-input--on-pre-command)
   (add-hook 'post-command-hook #'exwm-input--on-post-command)
+  ;; Grab/Release keyboard when minibuffer/echo becomes active/inactive.
+  (add-hook 'minibuffer-setup-hook #'exwm-input--on-minibuffer-setup)
+  (add-hook 'minibuffer-exit-hook #'exwm-input--on-minibuffer-exit)
+  (setq exwm-input--echo-area-timer
+(run-with-idle-timer 0 t #'exwm-input--on-echo-area-dirty))
+  (add-hook 'echo-area-clear-hook #'exwm-input--on-echo-area-clear)
   ;; Update focus when buffer list updates
   (add-hook 'buffer-list-update-hook #'exwm-input--on-buffer-list-update))
 
@@ -1089,6 +1134,12 @@ where both ORIGINAL-KEY and SIMULATED-KEY are key 
sequences."
   (exwm-input--unset-simulation-keys)
   (remove-hook 'pre-command-hook #'exwm-input--on-pre-command)
   (remove-hook 'post-command-hook #'exwm-input--on-post-command)
+  (remove-hook 'minibuffer-setup-hook #'exwm-input--on-minibuffer-setup)
+  (remove-hook 

[elpa] externals/frog-menu f7a7abf 2/3: Fix compile warnings

2019-08-18 Thread Clemens Radermacher
branch: externals/frog-menu
commit f7a7abf412c4213e65edcfe24283d3e50903d429
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Fix compile warnings
---
 frog-menu.el | 55 ---
 1 file changed, 32 insertions(+), 23 deletions(-)

diff --git a/frog-menu.el b/frog-menu.el
index 25c78db..1c71efe 100644
--- a/frog-menu.el
+++ b/frog-menu.el
@@ -64,6 +64,8 @@
 
 (require 'avy)
 (require 'posframe)
+(eval-when-compile
+  (require 'subr-x))
 
 (defgroup frog-menu nil
   "Quickly pick items from ad hoc menus."
@@ -217,6 +219,23 @@ By default uses a large collection of keys, so that the 
hints can
 be drawn by single characters."
   :type '(repeat character))
 
+(defvar frog-menu-sort-function nil
+  "A function to sort displayed strings for `frog-menu-read'.
+
+If this variable is bound to a function `frog-menu-read' will
+pass the strings to be displayed and the function to `sort':
+
+(let ((frog-menu-sort-function #'string<))
+  (frog-menu-read \"Example\" '(\"z\" \"a\")))")
+
+(defvar frog-menu-format completions-format
+  "Defines in which order strings for `frog-menu-read' are displayed.
+
+If the value is `vertical', strings are ordered vertically. If
+the value is `horizontal', strings are ordered horizontally. This
+variable does not define sorting, see `frog-menu-sort-function'
+for this.")
+
 (defface frog-menu-border 'background dark))  . (:background "white"))
 (((background light)) . (:background "black")))
   "The face defining the border for the posframe.")
@@ -283,7 +302,9 @@ PROMPT, STRINGS and ACTIONS are the args from 
`frog-menu-read'."
   (delete-window window))
 
 
-(defun frog-menu-init-display-buffer (prompt formatted-strings 
formatted-actions)
+(defun frog-menu-init-display-buffer (prompt
+  formatted-strings
+  formatted-actions)
   "Init handler for avy-posframe.
 
 PROMPT, FORMATTED-STRINGS and FORMATTED-ACTIONS are the args from
@@ -322,7 +343,8 @@ ACTIONS."
(concat (propertize
 "_"
 'face (list :foreground
-(if (eq (funcall frog-menu-type-function) 
'avy-posframe)
+(if (eq (funcall frog-menu-type-function)
+'avy-posframe)
 (face-background
  'frog-menu-posframe-background-face nil t)
   (face-background 'default
@@ -417,8 +439,10 @@ Returns the formatted grid string."
  (insert "\n" (if (zerop length) "\n" ""))
  (setq column 0))
  (insert " \t")
- (set-text-properties (1- (point)) (point)
-  `(display (space :align-to 
,column)
+ (set-text-properties
+  (1- (point))
+  (point)
+  `(display (space :align-to ,column)
  (setq first (zerop length))
  (add-text-properties (point)
   (progn (insert str)
@@ -442,7 +466,9 @@ Returns window of displayed buffer."
  :poshandler(or display-option
 #'posframe-poshandler-point-bottom-left-corner)
  :internal-border-width 1
- :background-color (face-attribute 
'frog-menu-posframe-background-face :background)
+ :background-color (face-attribute
+'frog-menu-posframe-background-face
+:background)
  :override-parameters frog-menu-posframe-parameters)
   (set-face-attribute 'internal-border
   (buffer-local-value 'posframe--frame buf)
@@ -612,7 +638,7 @@ COLLECTION are the arguments from `frog-menu-read'."
  collection args))
 
 (defun frog-menu-completing-read-function (prompt collection  _)
-  "Can be used as `completing-read-function'
+  "Can be used as `completing-read-function'.
 
 For now all arguments other than PROMPT and COLLECTION are
 ignored. COLLECTION has to use a format `frog-menu-read' can
@@ -631,23 +657,6 @@ user."
   (mapcar #'symbol-name cmds)
 (command-execute cmd)))
 
-(defvar frog-menu-sort-function nil
-  "A function to sort displayed strings for `frog-menu-read'.
-
-If this variable is bound to a function `frog-menu-read' will
-pass the strings to be displayed and the function to `sort':
-
-(let ((frog-menu-sort-function #'string<))
-  (frog-menu-read \"Example\" '(\"z\" \"a\")))")
-
-(defvar frog-menu-format completions-format
-  "Defines in which order strings for `frog-menu-read' are displayed.
-
-If the value is `vertical', strings are 

[elpa] externals/frog-menu 5d04139 1/3: Improve dev setup

2019-08-18 Thread Clemens Radermacher
branch: externals/frog-menu
commit 5d0413944c7c2230c960ef8e52aed5499d7d1ce5
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Improve dev setup
---
 Makefile   | 50 ++
 stub/.nosearch |  0
 stub/avy.el| 12 
 stub/posframe.el   | 37 +
 test/frog-menu-test.el |  6 ++
 5 files changed, 105 insertions(+)

diff --git a/Makefile b/Makefile
new file mode 100644
index 000..d8de248
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,50 @@
+EMACS ?= emacs
+
+package_files := $(wildcard *.el)
+test_files := $(wildcard test/*.el)
+package_lint  := ../package-lint/package-lint.el
+
+.PHONY: all
+all: compile checkdoc lint test
+
+.PHONY: compile
+compile:
+   @for file in $(package_files); do \
+   echo "[compile] $$file" ;\
+   $(EMACS) -Q --batch -L . -L stub \
+   --eval "(setq byte-compile-error-on-warn t)"\
+   -f batch-byte-compile $$file;\
+   done
+
+.PHONY: checkdoc
+checkdoc:
+   @for file in $(package_files); do \
+   echo "[checkdoc] $$file" ;\
+   $(EMACS) -Q --batch \
+   --eval "(setq sentence-end-double-space nil)" \
+   --eval "(checkdoc-file \"$$file\")" \
+   --eval "(when (get-buffer \"*Warnings*\") (kill-emacs 
1))" ;\
+   done
+
+.PHONY: lint
+lint:
+   @for file in $(package_files); do \
+   echo "[package-lint] $$file" ;\
+   $(EMACS) -Q --batch \
+   -l $(package_lint) \
+   -f package-lint-batch-and-exit $$file ;\
+   done
+
+.PHONY: test
+test:
+   @for file in $(test_files); do \
+   echo "[ert-test] $$file" ;\
+   $(EMACS) -Q --batch -L . -L stub \
+   -l $$file \
+   -f ert-run-tests-batch-and-exit ;\
+   done
+
+.PHONY: clean
+clean:
+   @echo "[clean]" *.elc
+   @rm -f *.elc
diff --git a/stub/.nosearch b/stub/.nosearch
new file mode 100644
index 000..e69de29
diff --git a/stub/avy.el b/stub/avy.el
new file mode 100644
index 000..4b15225
--- /dev/null
+++ b/stub/avy.el
@@ -0,0 +1,12 @@
+(defvar avy-keys nil)
+(defvar avy-single-candidate-jump nil)
+(defvar avy-handler-function nil)
+(defvar avy-pre-action nil)
+(defvar avy-all-windows nil)
+(defvar avy-style nil)
+(defvar avy-action nil)
+
+(defun avy--process (candidates overlay-fn))
+(defun avy--style-fn (style))
+
+(provide 'avy)
diff --git a/stub/posframe.el b/stub/posframe.el
new file mode 100644
index 000..12811c4
--- /dev/null
+++ b/stub/posframe.el
@@ -0,0 +1,37 @@
+
+(require 'cl-lib)
+
+(defvar posframe--frame nil)
+
+(cl-defun posframe-show (posframe-buffer
+ 
+ string
+ position
+ poshandler
+ width
+ height
+ min-width
+ min-height
+ x-pixel-offset
+ y-pixel-offset
+ left-fringe
+ right-fringe
+ internal-border-width
+ internal-border-color
+ font
+ foreground-color
+ background-color
+ respect-header-line
+ respect-mode-line
+ initialize
+ no-properties
+ keep-ratio
+ override-parameters
+ timeout
+ refresh
+ ))
+
+(defun posframe-hide (posframe-buffer))
+(defun posframe-poshandler-point-bottom-left-corner (info  
font-height))
+
+(provide 'posframe)
diff --git a/test/frog-menu-test.el b/test/frog-menu-test.el
new file mode 100644
index 000..f9d3b7f
--- /dev/null
+++ b/test/frog-menu-test.el
@@ -0,0 +1,6 @@
+(require 'ert)
+(require 'frog-menu)
+
+(ert-deftest frog-menu-test-stub ()
+  (should
+   (eq frog-menu-type-function #'frog-menu-type)))



[elpa] externals/frog-menu 1fb458f 3/3: Version bump

2019-08-18 Thread Clemens Radermacher
branch: externals/frog-menu
commit 1fb458f95d0722fec5c41058f6c597d49b2ca42f
Author: Clemens Radermacher 
Commit: Clemens Radermacher 

Version bump
---
 frog-menu.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/frog-menu.el b/frog-menu.el
index 1c71efe..880edfa 100644
--- a/frog-menu.el
+++ b/frog-menu.el
@@ -4,7 +4,7 @@
 
 ;; Author: Clemens Radermacher 
 ;; URL: https://github.com/clemera/frog-menu
-;; Version: 0.2.9
+;; Version: 0.2.10
 ;; Package-Requires: ((emacs "26") (avy "0.4") (posframe "0.4"))
 ;; Keywords: convenience
 



[elpa] externals/frog-menu updated (740bbc8 -> 1fb458f)

2019-08-18 Thread Clemens Radermacher
clemera pushed a change to branch externals/frog-menu.

  from  740bbc8   Version bump
   new  5d04139   Improve dev setup
   new  f7a7abf   Fix compile warnings
   new  1fb458f   Version bump


Summary of changes:
 Makefile   | 50 +++
 frog-menu.el   | 57 +-
 stub/.nosearch |  0
 stub/avy.el| 12 +++
 stub/posframe.el   | 37 
 test/frog-menu-test.el |  6 ++
 6 files changed, 138 insertions(+), 24 deletions(-)
 create mode 100644 Makefile
 create mode 100644 stub/.nosearch
 create mode 100644 stub/avy.el
 create mode 100644 stub/posframe.el
 create mode 100644 test/frog-menu-test.el



[elpa] externals/olivetti ae07512 2/2: Change email

2019-08-18 Thread Paul W. Rankin
branch: externals/olivetti
commit ae07512da1a38f42f63b52c4242dc44e238fcc7e
Author: Paul W. Rankin 
Commit: Paul W. Rankin 

Change email
---
 olivetti.el | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/olivetti.el b/olivetti.el
index 7c73582..f81314a 100644
--- a/olivetti.el
+++ b/olivetti.el
@@ -2,7 +2,8 @@
 
 ;; Copyright (c) 2014-2019  Free Software Foundation, Inc.
 
-;; Author: Paul W. Rankin 
+;; Author: Paul W. Rankin 
+;; Maintainer: Paul W. Rankin 
 ;; Keywords: wp, text
 ;; Version: 1.7.1
 ;; Package-Requires: ((emacs "24.5"))



[elpa] externals/olivetti updated (343bf1e -> ae07512)

2019-08-18 Thread Paul W. Rankin
pwr pushed a change to branch externals/olivetti.

  from  343bf1e   Remove window-size-change-function issue from 
README/Commentary
   new  b139a0a   Update README/Commentary, deleted screenshot
   new  ae07512   Change email


Summary of changes:
 README.md  |  71 +
 olivetti.el|  60 ++--
 screenshots/01.png | Bin 444294 -> 0 bytes
 3 files changed, 57 insertions(+), 74 deletions(-)
 delete mode 100644 screenshots/01.png



[elpa] externals/olivetti b139a0a 1/2: Update README/Commentary, deleted screenshot

2019-08-18 Thread Paul W. Rankin
branch: externals/olivetti
commit b139a0a05df0e6604ff9ba7e6de57a1ab1e38152
Author: Paul W. Rankin 
Commit: Paul W. Rankin 

Update README/Commentary, deleted screenshot
---
 README.md  |  71 +
 olivetti.el|  59 +---
 screenshots/01.png | Bin 444294 -> 0 bytes
 3 files changed, 56 insertions(+), 74 deletions(-)

diff --git a/README.md b/README.md
index c4969b6..84fdf0c 100644
--- a/README.md
+++ b/README.md
@@ -1,63 +1,48 @@
-Olivetti
-
+# Olivetti #
 
-Olivetti is a simple Emacs minor mode for a nice writing environment.
+A simple Emacs minor mode for a nice writing environment.
 
-![screenshot](https://github.com/rnkn/olivetti/raw/master/screenshots/01.png)
+Screenshot: https://f002.backblazeb2.com/file/pwr-share/olivetti.png
 
-Pictured: *Big Fish* by John August using text body width of 66
-(top, also using [Fountain Mode]), lorem ipsum text using text body
-width of 80 (bottom)
+## Features ##
 
-[fountain mode]: https://github.com/rnkn/fountain-mode
-
-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.
+- 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][].
-
-[writeroom-mode]: https://github.com/joostkremers/writeroom-mode "Writeroom 
Mode"
+recommend writeroom-mode: https://github.com/joostkremers/writeroom-mode.
 
-Requirements
-
+## Requirements ##
 
 - Emacs 24.5
 
-Installation
-
+## Installation ##
 
-Olivetti is now part of GNU ELPA and can be installed with `M-x package-install
-RET olivetti RET`.
+Olivetti is now part of GNU ELPA and can be installed with:
+M-x package-install RET olivetti RET
 
-Bugs
-
+## Contributing ##
 
-To report bugs, please use `M-x report-emacs-bug RET` or send an email to
+To report bugs, please use M-x report-emacs-bug RET or send an email to
 . Please include "olivetti" in the subject.
 
-Hints
--
+## Hints ##
 
-To always use a different width for a specific file, set a [File Variable]
-specifying `olivetti-body-width`:
+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
 
-M-x add-file-local-variable RET olivetti-body-width RET 66 RET
+See (info "(emacs) File Variables").
 
-[file variable]: 
https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Variables.html 
"File Variables"
diff --git a/olivetti.el b/olivetti.el
index d7403ff..7c73582 100644
--- a/olivetti.el
+++ b/olivetti.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (c) 2014-2019  Free Software Foundation, Inc.
 
-;; Author: Paul Rankin 
+;; Author: Paul W. Rankin 
 ;; Keywords: wp, text
 ;; Version: 1.7.1
 ;; Package-Requires: ((emacs "24.5"))
@@ -24,53 +24,50 @@
 
 ;;; Commentary:
 
-;; Olivetti is a simple Emacs minor mode for a nice writing environment.
+;; # Olivetti #
 
-;; Features
-;; 
+;; A simple Emacs minor mode for a nice writing environment.
 
-;; - 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).
+;; Screenshot: https://f002.backblazeb2.com/file/pwr-share/olivetti.png
+
+;; ## Features ##
+
+;; - Set a desired text body width to automatically resize window margins to
+;;   keep the text