From mboxrd@z Thu Jan  1 00:00:00 1970
Path: news.gmane.org!not-for-mail
From: =?UTF-8?Q?Cl=c3=a9ment_Pit--Claudel?= <clement.pit@gmail.com>
Newsgroups: gmane.emacs.devel
Subject: Improving describe-mode and discoverability
Date: Thu, 23 Jun 2016 14:29:00 -0400
Message-ID: <576C2A6C.3090908@gmail.com>
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature";
	boundary="hEVQOegSg6jWAB9tH4suBjAquIgDXkbPk"
X-Trace: ger.gmane.org 1466706604 20716 80.91.229.3 (23 Jun 2016 18:30:04 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Thu, 23 Jun 2016 18:30:04 +0000 (UTC)
To: Emacs developers <emacs-devel@gnu.org>
Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jun 23 20:29:55 2016
Return-path: <emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org>
Envelope-to: ged-emacs-devel@m.gmane.org
Original-Received: from lists.gnu.org ([208.118.235.17])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org>)
	id 1bG9Ny-0006Ju-6m
	for ged-emacs-devel@m.gmane.org; Thu, 23 Jun 2016 20:29:54 +0200
Original-Received: from localhost ([::1]:38668 helo=lists.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.71)
	(envelope-from <emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org>)
	id 1bG9Nx-0002jg-A0
	for ged-emacs-devel@m.gmane.org; Thu, 23 Jun 2016 14:29:53 -0400
Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48177)
	by lists.gnu.org with esmtp (Exim 4.71)
	(envelope-from <clement.pit@gmail.com>) id 1bG9NG-0002ie-P8
	for emacs-devel@gnu.org; Thu, 23 Jun 2016 14:29:14 -0400
Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <clement.pit@gmail.com>) id 1bG9NA-0007Bh-MN
	for emacs-devel@gnu.org; Thu, 23 Jun 2016 14:29:09 -0400
Original-Received: from mout.kundenserver.de ([212.227.126.130]:49797)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <clement.pit@gmail.com>) id 1bG9NA-0007Ba-6d
	for emacs-devel@gnu.org; Thu, 23 Jun 2016 14:29:04 -0400
Original-Received: from [18.26.2.123] ([18.26.2.123]) by mrelayeu.kundenserver.de
	(mreue005) with ESMTPSA (Nemesis) id 0MPKwG-1bKZDy0Wps-004WjY for
	<emacs-devel@gnu.org>; Thu, 23 Jun 2016 20:29:02 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.8.0
X-Provags-ID: V03:K0:OjeYPtyu9axr2WMrlbetPXAwn5MHTofm30+Hpm57533506yq/o8
	maYMt1FLYPi+q4Ilu9pQ25I8syIAycqe7yDYPByqxBy8+TpXpp+vzS0ZxfPJFTExU97zBP3
	6/biXC5gUBhdQ7RTNlpx6ka+lQ6dbPhhnpQdKN0XkcaAXC9Vu+dGKnk+oRaHOQwEbKlvOeE
	WNqZdNIyQOrvgMzX6NIRA==
X-UI-Out-Filterresults: notjunk:1;V01:K0:sdYq8RecSmM=:D0NmVDrWEjJmo//PkPi6HK
	dV2wVjMQXWiWRB67tw45HTFgMvs/ip5KpFgolqzJTp3bmDFB0uZmw7sXrp4KCJcfs6fxLiQNx
	fcTI5S+k3b84IqvWl2oP6QOR7ITp9ZsmIxJ2gjo74kpGTz+NXWwBDxRyNearL+GfMWRgUOUtG
	1UHV2hDm/8HQy3KNoxrPw2hdL0v/hhKzG4GuxXIJKNnNo0W60lsmu1Z/P/yxcqj4POlAGPUiE
	tEqANqPz18nYleRLpzIpW8IPF7snyOZ/jR8xgYZfEzYEN1lQyUDFgYLnXr3nXFTezND/49e5g
	10/0JtoQKF9Vay/G8jmFXo876EO2IYK6LDv/Pct+SkMJVNWtU50RfT9Kg3QBaywiK7Zr1i2cV
	H8TThxlflrYh9bmJdla3Lu7kxuurBU9IPLpsNkAQ2RcpX6V1WxuY2miBOjeksPubU4oJOKJ4i
	yB6+f/osHEbYokHy5vnNQl8lRRqMmm9OqC6baSkTT6UmAgIGckltc4MvYDLaIHZBRAhtTCJ8w
	XvnpygmNBBrmJPX9N8Bnge9qtj3l1WbXh/p3gFWyI7OPgNBKyvMliafcuV/rRMhKKbrH86JCc
	8Ej5IE8Jz8cC/wT2eAk0x8oYMPwqUORFPRY3PieItd8iGhvFW/A/M61gYoN2wqIbGxma94GsY
	eXv1pPsVQJqbddh3d1mIc1hclrvaXWJfw069mmQAoT00hvBscf7kKK06jOvloGqN06y0=
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Received-From: 212.227.126.130
X-BeenThere: emacs-devel@gnu.org
X-Mailman-Version: 2.1.21
Precedence: list
List-Id: "Emacs development discussions." <emacs-devel.gnu.org>
List-Unsubscribe: <https://lists.gnu.org/mailman/options/emacs-devel>,
	<mailto:emacs-devel-request@gnu.org?subject=unsubscribe>
List-Archive: <http://lists.gnu.org/archive/html/emacs-devel/>
List-Post: <mailto:emacs-devel@gnu.org>
List-Help: <mailto:emacs-devel-request@gnu.org?subject=help>
List-Subscribe: <https://lists.gnu.org/mailman/listinfo/emacs-devel>,
	<mailto:emacs-devel-request@gnu.org?subject=subscribe>
Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org
Original-Sender: "Emacs-devel" <emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org>
Xref: news.gmane.org gmane.emacs.devel:204699
Archived-At: <http://permalink.gmane.org/gmane.emacs.devel/204699>

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--hEVQOegSg6jWAB9tH4suBjAquIgDXkbPk
Content-Type: multipart/mixed; boundary="9ET1tXPJ9avbxati4H8m1hJoni5x328Li"
From: =?UTF-8?Q?Cl=c3=a9ment_Pit--Claudel?= <clement.pit@gmail.com>
To: Emacs developers <emacs-devel@gnu.org>
Message-ID: <576C2A6C.3090908@gmail.com>
Subject: Improving describe-mode and discoverability

--9ET1tXPJ9avbxati4H8m1hJoni5x328Li
Content-Type: multipart/mixed;
 boundary="------------070100030201080101000807"

This is a multi-part message in MIME format.
--------------070100030201080101000807
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hey Emacs,

Among the many ways to get information about a package (READMEs, Commenta=
ries, manuals, menu-bar menus, and describe-mode; are there others?), des=
cribe-mode is the only universally available one. It always works, but it=
's not very nice to use: it just gives you a list of function names and t=
he associated bindings.

Recently I added an extra documentation feature to one of my packages, bi=
blio.el.  It's a single function that walks a keymap, and displays for ea=
ch binding not only the name of the associated function, but also the fir=
st line of the documentation of each function. Here's how it looks in has=
kell-mode:

    Help with =E2=80=98haskell-mode=E2=80=99

    =E2=80=98C-M-q=E2=80=99 (prog-indent-sexp)
      Indent the expression after point.

    =E2=80=98C-c C-c=E2=80=99 (haskell-compile)
      Compile the Haskell program including the current buffer.

    =E2=80=98C-c C-s=E2=80=99 (haskell-mode-toggle-scc-at-point)
      If point is in an SCC annotation, kill the annotation.  Otherwise, =
try to insert a new annotation.

    =E2=80=98C-c TAB=E2=80=99 (haskell-process-do-info)
      Print info on the identifier at point.

    =E2=80=98C-c C-t=E2=80=99 (haskell-process-do-type)
      Print the type of the given expression.

    =E2=80=98C-c C-v=E2=80=99 (haskell-mode-enable-process-minor-mode)
      Tell the user to choose a minor mode for process interaction.

    =E2=80=98C-c C-b=E2=80=99, =E2=80=98C-c C-z=E2=80=99 (haskell-interac=
tive-switch)
      Switch to the interactive mode for this session.

    =E2=80=98C-c C-l=E2=80=99 (haskell-process-load-file)
      Load the current buffer file.

    =E2=80=98C-c C-.=E2=80=99 (haskell-mode-format-imports)
      Format the imports by aligning and sorting them.

    =E2=80=98<remap> <delete-indentation>=E2=80=99 (haskell-delete-indent=
ation)
      Like `delete-indentation' but ignoring Bird-style ">".

It's not much, but I think it looks much better. I've attached examples o=
f the output for several other modes to this email, as well as the code u=
sed to generate this example. Contrast with the default output of C-h m f=
or haskell-mode:

    key             binding
    ---             -------

    C-c             Prefix Command
    C-x             Prefix Command
    ESC             Prefix Command
    <remap>         Prefix Command

    <remap> <delete-indentation>    haskell-delete-indentation

    C-c C-b         haskell-interactive-switch
    C-c C-c         haskell-compile
    C-c TAB         haskell-process-do-info
    C-c C-l         haskell-process-load-file
    C-c C-s         haskell-mode-toggle-scc-at-point
    C-c C-t         haskell-process-do-type
    C-c C-v         haskell-mode-enable-process-minor-mode
    C-c C-z         haskell-interactive-switch
    C-c ESC         Prefix Command
    C-c C-.         haskell-mode-format-imports

    C-M-q           prog-indent-sexp

My implementation is rather brittle (I don't have sufficient knowledge of=
 keymaps), but I think a documentation facility in the line of the one de=
moed above would be very useful.  Most interactive functions are already =
documented, so we'd be tapping into a large body of existing docs, making=
 them more accessible.

What do you think? I would be happy to get help in refining this code (an=
d this proposal). For example, we could consider hyperlinking the functio=
n names to their sources, or letting users expand the first line of the d=
ocumentation to show the full docstring. We could also think about ways t=
o cover functions that are not bound to a key by default, but which users=
 may want to bind (e.g. by looking for interactive functions starting wit=
h the mode's name).

Cheers,
Cl=C3=A9ment.

--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="shell-script-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="shell-script-mode-help"

SGVscCB3aXRoIOKAmHNoLW1vZGXigJkKCuKAmEMtTS1x4oCZIChwcm9nLWluZGVudC1zZXhw
KQogIEluZGVudCB0aGUgZXhwcmVzc2lvbiBhZnRlciBwb2ludC4KCuKAmEMtYyA64oCZIChz
aC1zZXQtc2hlbGwpCiAgU2V0IHRoaXMgYnVmZmVyJ3Mgc2hlbGwgdG8gU0hFTEwgKGEgc3Ry
aW5nKS4KCuKAmEMtYyBDLXrigJkgKHNoLXNob3ctc2hlbGwpCiAgUG9wIHRoZSBzaGVsbCBp
bnRlcmFjdGlvbiBidWZmZXIuCgrigJhDLWMgQy1k4oCZIChzaC1jZC1oZXJlKQogIENoYW5n
ZSBkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb24gc2hlbGwgdG8gdGhlIGN1
cnJlbnQgb25lLgoK4oCYQy1jIEMtbuKAmSAoc2gtc2VuZC1saW5lLW9yLXJlZ2lvbi1hbmQt
c3RlcCkKICBTZW5kIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlIGluZmVyaW9yIHNoZWxsIGFu
ZCBzdGVwIHRvIHRoZSBuZXh0IGxpbmUuCgrigJhDLWMgQy144oCZIChleGVjdXRhYmxlLWlu
dGVycHJldCkKICBSdW4gc2NyaXB0IHdpdGggdXNlci1zcGVjaWZpZWQgYXJncywgYW5kIGNv
bGxlY3Qgb3V0cHV0IGluIGEgYnVmZmVyLgoK4oCYQy1jICvigJkgKHNoLWFkZCkKICBJbnNl
cnQgYW4gYWRkaXRpb24gb2YgVkFSIGFuZCBwcmVmaXggREVMVEEgZm9yIEJvdXJuZSAodHlw
ZSkgc2hlbGwuCgrigJhDLWMgQy1c4oCZIChzaC1iYWNrc2xhc2gtcmVnaW9uKQogIEluc2Vy
dCwgYWxpZ24sIG9yIGRlbGV0ZSBlbmQtb2YtbGluZSBiYWNrc2xhc2hlcyBvbiB0aGUgbGlu
ZXMgaW4gdGhlIHJlZ2lvbi4KCuKAmEMtYyA+4oCZIChzaC1sZWFybi1idWZmZXItaW5kZW50
KQogIExlYXJuIGhvdyB0byBpbmRlbnQgdGhlIGJ1ZmZlciB0aGUgd2F5IGl0IGN1cnJlbnRs
eSBpcy4KCuKAmEMtYyA84oCZIChzaC1sZWFybi1saW5lLWluZGVudCkKICBMZWFybiBob3cg
dG8gaW5kZW50IGEgbGluZSBhcyBpdCBjdXJyZW50bHkgaXMgaW5kZW50ZWQuCgrigJhDLWMg
PeKAmSAoc2gtc2V0LWluZGVudCkKICBTZXQgdGhlIGluZGVudGF0aW9uIGZvciB0aGUgY3Vy
cmVudCBsaW5lLgoK4oCYQy1jID/igJkgKHNoLXNob3ctaW5kZW50KQogIFNob3cgdGhlIGhv
dyB0aGUgY3VycmVudCBsaW5lIHdvdWxkIGJlIGluZGVudGVkLgoK4oCYQy1jIEMtY+KAmSAo
c2gtY2FzZSkKICBJbnNlcnQgYSBjYXNlL3N3aXRjaCBzdGF0ZW1lbnQuICBTZWUgYHNoLWZl
YXR1cmUnLgoK4oCYQy1jIEMtZuKAmSAoc2gtZm9yKQogIEluc2VydCBhIGZvciBsb29wLiAg
U2VlIGBzaC1mZWF0dXJlJy4KCuKAmEMtYyBUQULigJkgKHNoLWlmKQogIEluc2VydCBhbiBp
ZiBzdGF0ZW1lbnQuICBTZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtbOKAmSAoc2gtaW5k
ZXhlZC1sb29wKQogIEluc2VydCBhbiBpbmRleGVkIGxvb3AgZnJvbSAxIHRvIG4uICBTZWUg
YHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtb+KAmSAoc2gtd2hpbGUtZ2V0b3B0cykKICBJbnNl
cnQgYSB3aGlsZSBnZXRvcHRzIGxvb3AuICBTZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMt
cuKAmSAoc2gtcmVwZWF0KQogIEluc2VydCBhIHJlcGVhdCBsb29wIGRlZmluaXRpb24uICBT
ZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtc+KAmSAoc2gtc2VsZWN0KQogIEluc2VydCBh
IHNlbGVjdCBzdGF0ZW1lbnQuICBTZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtdOKAmSAo
c2gtdG1wLWZpbGUpCiAgSW5zZXJ0IGNvZGUgdG8gc2V0dXAgdGVtcG9yYXJ5IGZpbGUgaGFu
ZGxpbmcuICBTZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtdeKAmSAoc2gtdW50aWwpCiAg
SW5zZXJ0IGFuIHVudGlsIGxvb3AuICBTZWUgYHNoLWZlYXR1cmUnLgoK4oCYQy1jIEMtd+KA
mSAoc2gtd2hpbGUpCiAgSW5zZXJ0IGEgd2hpbGUgbG9vcC4gIFNlZSBgc2gtZmVhdHVyZScu
CgrigJhDLWMgKOKAmSAoc2gtZnVuY3Rpb24pCiAgSW5zZXJ0IGEgZnVuY3Rpb24gZGVmaW5p
dGlvbi4gIFNlZSBgc2gtZmVhdHVyZScuCgrigJg94oCZIChzaC1hc3NpZ25tZW50KQogIFJl
bWVtYmVyIHByZWNlZGluZyBpZGVudGlmaWVyIGZvciBmdXR1cmUgY29tcGxldGlvbiBhbmQg
ZG8gc2VsZi1pbnNlcnQuCgrigJhDLU0teOKAmSAoc2gtZXhlY3V0ZS1yZWdpb24pCiAgUGFz
cyBvcHRpb25hbCBoZWFkZXIgYW5kIHJlZ2lvbiB0byBhIHN1YnNoZWxsIGZvciBub25pbnRl
cmFjdGl2ZSBleGVjdXRpb24uCgrigJg8cmVtYXA+IDxmb3J3YXJkLXNlbnRlbmNlPuKAmSAo
c2gtZW5kLW9mLWNvbW1hbmQpCiAgTW92ZSBwb2ludCB0byBzdWNjZXNzaXZlIGVuZHMgb2Yg
Y29tbWFuZHMuCgrigJg8cmVtYXA+IDxiYWNrd2FyZC1zZW50ZW5jZT7igJkgKHNoLWJlZ2lu
bmluZy1vZi1jb21tYW5kKQogIE1vdmUgcG9pbnQgdG8gc3VjY2Vzc2l2ZSBiZWdpbm5pbmdz
IG9mIGNvbW1hbmRzLgoK4oCYPHJlbWFwPiA8ZGVsZXRlLWJhY2t3YXJkLWNoYXI+4oCZIChi
YWNrd2FyZC1kZWxldGUtY2hhci11bnRhYmlmeSkKICBEZWxldGUgY2hhcmFjdGVycyBiYWNr
d2FyZCwgY2hhbmdpbmcgdGFicyBpbnRvIHNwYWNlcy4K
--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="elisp-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="elisp-mode-help"

SGVscCB3aXRoIOKAmGVtYWNzLWxpc3AtbW9kZeKAmQoK4oCYREVM4oCZIChiYWNrd2FyZC1k
ZWxldGUtY2hhci11bnRhYmlmeSkKICBEZWxldGUgY2hhcmFjdGVycyBiYWNrd2FyZCwgY2hh
bmdpbmcgdGFicyBpbnRvIHNwYWNlcy4KCuKAmEMtTS1x4oCZIChpbmRlbnQtcHAtc2V4cCkK
ICBJbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBsaXN0IHN0YXJ0aW5nIGp1c3QgYWZ0ZXIgcG9p
bnQsIG9yIHByZXR0eXByaW50IGl0LgoK4oCYQy1NLXjigJkgKGV2YWwtZGVmdW4pCiAgRXZh
bHVhdGUgdGhlIHRvcC1sZXZlbCBmb3JtIGNvbnRhaW5pbmcgcG9pbnQsIG9yIGFmdGVyIHBv
aW50LgoK4oCYQy1NLWnigJkgKGNvbXBsZXRpb24tYXQtcG9pbnQpCiAgUGVyZm9ybSBjb21w
bGV0aW9uIG9uIHRoZSB0ZXh0IGFyb3VuZCBwb2ludC4K
--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="python-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="python-mode-help"

SGVscCB3aXRoIOKAmHB5dGhvbi1tb2Rl4oCZCgrigJhDLU0tceKAmSAocHJvZy1pbmRlbnQt
c2V4cCkKICBJbmRlbnQgdGhlIGV4cHJlc3Npb24gYWZ0ZXIgcG9pbnQuCgrigJg8cmVtYXA+
IDxtYXJrLWRlZnVuPuKAmSAocHl0aG9uLW1hcmstZGVmdW4pCiAgUHV0IG1hcmsgYXQgZW5k
IG9mIHRoaXMgZGVmdW4sIHBvaW50IGF0IGJlZ2lubmluZy4KCuKAmDxyZW1hcD4gPGJhY2t3
YXJkLXVwLWxpc3Q+4oCZIChweXRob24tbmF2LWJhY2t3YXJkLXVwLWxpc3QpCiAgTW92ZSBi
YWNrd2FyZCBvdXQgb2Ygb25lIGxldmVsIG9mIHBhcmVudGhlc2VzIChvciBibG9ja3MpLgoK
4oCYPHJlbWFwPiA8Zm9yd2FyZC1zZW50ZW5jZT7igJkgKHB5dGhvbi1uYXYtZm9yd2FyZC1i
bG9jaykKICBNb3ZlIGZvcndhcmQgdG8gbmV4dCBibG9jayBvZiBjb2RlLgoK4oCYPHJlbWFw
PiA8YmFja3dhcmQtc2VudGVuY2U+4oCZIChweXRob24tbmF2LWJhY2t3YXJkLWJsb2NrKQog
IE1vdmUgYmFja3dhcmQgdG8gcHJldmlvdXMgYmxvY2sgb2YgY29kZS4KCuKAmEMtYyBDLWTi
gJkgKHB5dGhvbi1kZXNjcmliZS1hdC1wb2ludCkKICAKCuKAmEMtYyBDLWbigJkgKHB5dGhv
bi1lbGRvYy1hdC1wb2ludCkKICBHZXQgaGVscCBvbiBTWU1CT0wgdXNpbmcgYGhlbHAnLgoK
4oCYQy1jIEMtduKAmSAocHl0aG9uLWNoZWNrKQogIENoZWNrIGEgUHl0aG9uIGZpbGUgKGRl
ZmF1bHQgY3VycmVudCBidWZmZXIncyBmaWxlKS4KCuKAmEMtYyBDLXrigJkgKHB5dGhvbi1z
aGVsbC1zd2l0Y2gtdG8tc2hlbGwpCiAgU3dpdGNoIHRvIGluZmVyaW9yIFB5dGhvbiBwcm9j
ZXNzIGJ1ZmZlci4KCuKAmEMtYyBDLWzigJkgKHB5dGhvbi1zaGVsbC1zZW5kLWZpbGUpCiAg
U2VuZCBGSUxFLU5BTUUgdG8gaW5mZXJpb3IgUHl0aG9uIFBST0NFU1MuCgrigJhDLWMgQy1j
4oCZIChweXRob24tc2hlbGwtc2VuZC1idWZmZXIpCiAgU2VuZCB0aGUgZW50aXJlIGJ1ZmZl
ciB0byBpbmZlcmlvciBQeXRob24gcHJvY2Vzcy4KCuKAmEMtYyBDLXLigJkgKHB5dGhvbi1z
aGVsbC1zZW5kLXJlZ2lvbikKICBTZW5kIHRoZSByZWdpb24gZGVsaW1pdGVkIGJ5IFNUQVJU
IGFuZCBFTkQgdG8gaW5mZXJpb3IgUHl0aG9uIHByb2Nlc3MuCgrigJhDLWMgQy1z4oCZIChw
eXRob24tc2hlbGwtc2VuZC1zdHJpbmcpCiAgU2VuZCBTVFJJTkcgdG8gaW5mZXJpb3IgUHl0
aG9uIFBST0NFU1MuCgrigJhDLWMgQy1w4oCZIChydW4tcHl0aG9uKQogIFJ1biBhbiBpbmZl
cmlvciBQeXRob24gcHJvY2Vzcy4KCuKAmEMtYyBDLXQgY+KAmSAocHl0aG9uLXNrZWxldG9u
LWNsYXNzKQogIEluc2VydCBjbGFzcyBzdGF0ZW1lbnQuCgrigJhDLWMgQy10IGTigJkgKHB5
dGhvbi1za2VsZXRvbi1kZWYpCiAgSW5zZXJ0IGRlZiBzdGF0ZW1lbnQuCgrigJhDLWMgQy10
IGbigJkgKHB5dGhvbi1za2VsZXRvbi1mb3IpCiAgSW5zZXJ0IGZvciBzdGF0ZW1lbnQuCgri
gJhDLWMgQy10IGnigJkgKHB5dGhvbi1za2VsZXRvbi1pZikKICBJbnNlcnQgaWYgc3RhdGVt
ZW50LgoK4oCYQy1jIEMtdCBt4oCZIChweXRob24tc2tlbGV0b24taW1wb3J0KQogIEluc2Vy
dCBpbXBvcnQgc3RhdGVtZW50LgoK4oCYQy1jIEMtdCB04oCZIChweXRob24tc2tlbGV0b24t
dHJ5KQogIEluc2VydCB0cnkgc3RhdGVtZW50LgoK4oCYQy1jIEMtdCB34oCZIChweXRob24t
c2tlbGV0b24td2hpbGUpCiAgSW5zZXJ0IHdoaWxlIHN0YXRlbWVudC4KCuKAmEMtYyA+4oCZ
IChweXRob24taW5kZW50LXNoaWZ0LXJpZ2h0KQogIFNoaWZ0IGxpbmVzIGNvbnRhaW5lZCBp
biByZWdpb24gU1RBUlQgRU5EIGJ5IENPVU5UIGNvbHVtbnMgdG8gdGhlIHJpZ2h0LgoK4oCY
Qy1jIDzigJkgKHB5dGhvbi1pbmRlbnQtc2hpZnQtbGVmdCkKICBTaGlmdCBsaW5lcyBjb250
YWluZWQgaW4gcmVnaW9uIFNUQVJUIEVORCBieSBDT1VOVCBjb2x1bW5zIHRvIHRoZSBsZWZ0
LgoK4oCYQy1jIEMtauKAmSAoaW1lbnUpCiAgSnVtcCB0byBhIHBsYWNlIGluIHRoZSBidWZm
ZXIgY2hvc2VuIHVzaW5nIGEgYnVmZmVyIG1lbnUgb3IgbW91c2UgbWVudS4KCuKAmERFTOKA
mSAocHl0aG9uLWluZGVudC1kZWRlbnQtbGluZS1iYWNrc3BhY2UpCiAgRGUtaW5kZW50IGN1
cnJlbnQgbGluZS4KCuKAmDxiYWNrdGFiPuKAmSAocHl0aG9uLWluZGVudC1kZWRlbnQtbGlu
ZSkKICBEZS1pbmRlbnQgY3VycmVudCBsaW5lLgoK4oCYQy1NLWnigJkgKGNvbXBsZXRpb24t
YXQtcG9pbnQpCiAgUGVyZm9ybSBjb21wbGV0aW9uIG9uIHRoZSB0ZXh0IGFyb3VuZCBwb2lu
dC4KCuKAmEMtTS144oCZIChweXRob24tc2hlbGwtc2VuZC1kZWZ1bikKICBTZW5kIHRoZSBj
dXJyZW50IGRlZnVuIHRvIGluZmVyaW9yIFB5dGhvbiBwcm9jZXNzLgo=
--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="rst-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="rst-mode-help"

SGVscCB3aXRoIOKAmHJzdC1tb2Rl4oCZCgrigJhDLU0taeKAmSAoaXNwZWxsLWNvbXBsZXRl
LXdvcmQpCiAgVHJ5IHRvIGNvbXBsZXRlIHRoZSB3b3JkIGJlZm9yZSBvciBhdCBwb2ludC4K
CuKAmEMtYyA14oCZIChyc3QtZGVwcmVjYXRlZC1jb21waWxlLXNsaWRlcy1wcmV2aWV3KQog
IERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LWNvbXBpbGUtc2xpZGVzLXByZXZpZXcsIHVz
ZSBcW3JzdC1jb21waWxlLXNsaWRlcy1wcmV2aWV3XSBpbnN0ZWFkLgoK4oCYQy1jIDTigJkg
KHJzdC1kZXByZWNhdGVkLWNvbXBpbGUtcGRmLXByZXZpZXcpCiAgRGVwcmVjYXRlZCBiaW5k
aW5nIGZvciByc3QtY29tcGlsZS1wZGYtcHJldmlldywgdXNlIFxbcnN0LWNvbXBpbGUtcGRm
LXByZXZpZXddIGluc3RlYWQuCgrigJhDLWMgM+KAmSAocnN0LWRlcHJlY2F0ZWQtY29tcGls
ZS1wc2V1ZG8tcmVnaW9uKQogIERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LWNvbXBpbGUt
cHNldWRvLXJlZ2lvbiwgdXNlIFxbcnN0LWNvbXBpbGUtcHNldWRvLXJlZ2lvbl0gaW5zdGVh
ZC4KCuKAmEMtYyAy4oCZIChyc3QtZGVwcmVjYXRlZC1jb21waWxlLWFsdC10b29sc2V0KQog
IERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LWNvbXBpbGUtYWx0LXRvb2xzZXQsIHVzZSBc
W3JzdC1jb21waWxlLWFsdC10b29sc2V0XSBpbnN0ZWFkLgoK4oCYQy1jIDHigJkgKHJzdC1k
ZXByZWNhdGVkLWNvbXBpbGUpCiAgRGVwcmVjYXRlZCBiaW5kaW5nIGZvciByc3QtY29tcGls
ZSwgdXNlIFxbcnN0LWNvbXBpbGVdIGluc3RlYWQuCgrigJhDLWMgQy1jIEMtY+KAmSAocnN0
LWNvbXBpbGUpCiAgQ29tcGlsZSBjb21tYW5kIHRvIGNvbnZlcnQgcmVTVCBkb2N1bWVudCBp
bnRvIHNvbWUgb3V0cHV0IGZpbGUuCgrigJhDLWMgQy1jIEMtYeKAmSAocnN0LWNvbXBpbGUt
YWx0LXRvb2xzZXQpCiAgQ29tcGlsZSBjb21tYW5kIHdpdGggdGhlIGFsdGVybmF0aXZlIHRv
b2wtc2V0LgoK4oCYQy1jIEMtYyBDLXjigJkgKHJzdC1jb21waWxlLXBzZXVkby1yZWdpb24p
CiAgU2hvdyBwc2V1ZG8tWE1MIHJlbmRlcmluZy4KCuKAmEMtYyBDLWMgQy1w4oCZIChyc3Qt
Y29tcGlsZS1wZGYtcHJldmlldykKICBDb252ZXJ0IHRoZSBkb2N1bWVudCB0byBhIFBERiBm
aWxlIGFuZCBsYXVuY2ggYSBwcmV2aWV3IHByb2dyYW0uCgrigJhDLWMgQy1jIEMtc+KAmSAo
cnN0LWNvbXBpbGUtc2xpZGVzLXByZXZpZXcpCiAgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8g
YW4gUzUgc2xpZGUgcHJlc2VudGF0aW9uIGFuZCBsYXVuY2ggYSBwcmV2aWV3IHByb2dyYW0u
CgrigJhDLWMgQy1m4oCZIChyc3QtZGVwcmVjYXRlZC1nb3RvLXNlY3Rpb24pCiAgRGVwcmVj
YXRlZCBiaW5kaW5nIGZvciByc3QtZ290by1zZWN0aW9uLCB1c2UgXFtyc3QtZ290by1zZWN0
aW9uXSBpbnN0ZWFkLgoK4oCYQy1jIEMtdeKAmSAocnN0LWRlcHJlY2F0ZWQtdG9jLXVwZGF0
ZSkKICBEZXByZWNhdGVkIGJpbmRpbmcgZm9yIHJzdC10b2MtdXBkYXRlLCB1c2UgXFtyc3Qt
dG9jLXVwZGF0ZV0gaW5zdGVhZC4KCuKAmEMtYyBUQULigJkgKHJzdC1kZXByZWNhdGVkLXRv
Yy1pbnNlcnQpCiAgRGVwcmVjYXRlZCBiaW5kaW5nIGZvciByc3QtdG9jLWluc2VydCwgdXNl
IFxbcnN0LXRvYy1pbnNlcnRdIGluc3RlYWQuCgrigJhDLWMgQy10IEMtdOKAmSAocnN0LXRv
YykKICBEaXNwbGF5IGEgdGFibGUtb2YtY29udGVudHMuCgrigJhDLWMgQy10IFRBQuKAmSAo
cnN0LXRvYy1pbnNlcnQpCiAgSW5zZXJ0IGEgc2ltcGxlIHRleHQgcmVuZGVyaW5nIG9mIHRo
ZSB0YWJsZSBvZiBjb250ZW50cy4KCuKAmEMtYyBDLXQgQy114oCZIChyc3QtdG9jLXVwZGF0
ZSkKICBBdXRvbWF0aWNhbGx5IGZpbmQgdGhlIGNvbnRlbnRzIHNlY3Rpb24gb2YgYSBkb2N1
bWVudCBhbmQgdXBkYXRlLgoK4oCYQy1jIEMtdCBDLWrigJkgKHJzdC1nb3RvLXNlY3Rpb24p
CiAgR28gdG8gdGhlIHNlY3Rpb24gdGhlIGN1cnJlbnQgbGluZSBkZXNjcmliZXMuCgrigJhD
LWMgQy134oCZIChyc3QtZGVwcmVjYXRlZC1zdHJhaWdodGVuLWJ1bGxldHMtcmVnaW9uKQog
IERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LXN0cmFpZ2h0ZW4tYnVsbGV0cy1yZWdpb24s
IHVzZSBcW3JzdC1zdHJhaWdodGVuLWJ1bGxldHMtcmVnaW9uXSBpbnN0ZWFkLgoK4oCYQy1j
IEMtduKAmSAocnN0LWRlcHJlY2F0ZWQtY29udmVydC1idWxsZXRzLXRvLWVudW1lcmF0aW9u
KQogIERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LWNvbnZlcnQtYnVsbGV0cy10by1lbnVt
ZXJhdGlvbiwgdXNlIFxbcnN0LWNvbnZlcnQtYnVsbGV0cy10by1lbnVtZXJhdGlvbl0gaW5z
dGVhZC4KCuKAmEMtYyBDLWXigJkgKHJzdC1kZXByZWNhdGVkLWVudW1lcmF0ZS1yZWdpb24p
CiAgRGVwcmVjYXRlZCBiaW5kaW5nIGZvciByc3QtZW51bWVyYXRlLXJlZ2lvbiwgdXNlIFxb
cnN0LWVudW1lcmF0ZS1yZWdpb25dIGluc3RlYWQuCgrigJhDLWMgQy1i4oCZIChyc3QtZGVw
cmVjYXRlZC1idWxsZXQtbGlzdC1yZWdpb24pCiAgRGVwcmVjYXRlZCBiaW5kaW5nIGZvciBy
c3QtYnVsbGV0LWxpc3QtcmVnaW9uLCB1c2UgXFtyc3QtYnVsbGV0LWxpc3QtcmVnaW9uXSBp
bnN0ZWFkLgoK4oCYQy1jIEMtbCBDLWLigJkgKHJzdC1idWxsZXQtbGlzdC1yZWdpb24pCiAg
QWRkIGJ1bGxldHMgdG8gYWxsIHRoZSBsZWZ0bW9zdCBwYXJhZ3JhcGhzIGluIHRoZSBnaXZl
biByZWdpb24uCgrigJhDLWMgQy1sIEMtZeKAmSAocnN0LWVudW1lcmF0ZS1yZWdpb24pCiAg
QWRkIGVudW1lcmF0aW9uIHRvIGFsbCB0aGUgbGVmdG1vc3QgcGFyYWdyYXBocyBpbiB0aGUg
Z2l2ZW4gcmVnaW9uLgoK4oCYQy1jIEMtbCBDLWPigJkgKHJzdC1jb252ZXJ0LWJ1bGxldHMt
dG8tZW51bWVyYXRpb24pCiAgQ29udmVydCB0aGUgYnVsbGV0ZWQgYW5kIGVudW1lcmF0ZWQg
aXRlbXMgaW4gdGhlIHJlZ2lvbiB0byBlbnVtZXJhdGVkIGxpc3RzLgoK4oCYQy1jIEMtbCBD
LXPigJkgKHJzdC1zdHJhaWdodGVuLWJ1bGxldHMtcmVnaW9uKQogIE1ha2UgYWxsIHRoZSBi
dWxsZXRlZCBsaXN0IGl0ZW1zIGluIHRoZSByZWdpb24gY29uc2lzdGVudC4KCuKAmEMtYyBD
LWwgVEFC4oCZIChyc3QtaW5zZXJ0LWxpc3QpCiAgSW5zZXJ0IGEgbGlzdCBpdGVtIGF0IHRo
ZSBjdXJyZW50IHBvaW50LgoK4oCYQy1jIEMtZOKAmSAocnN0LWRlcHJlY2F0ZWQtbGluZS1i
bG9jay1yZWdpb24pCiAgRGVwcmVjYXRlZCBiaW5kaW5nIGZvciByc3QtbGluZS1ibG9jay1y
ZWdpb24sIHVzZSBcW3JzdC1saW5lLWJsb2NrLXJlZ2lvbl0gaW5zdGVhZC4KCuKAmEMtYyBD
LXIgQy1s4oCZIChyc3QtbGluZS1ibG9jay1yZWdpb24pCiAgVG9nZ2xlIGxpbmUgYmxvY2sg
cHJlZml4ZXMgZm9yIGEgcmVnaW9uLgoK4oCYQy1jIEMtciA8dGFiPuKAmSAocnN0LXNoaWZ0
LXJlZ2lvbikKICBTaGlmdCByZWdpb24gQkVHIHRvIEVORCBieSBDTlQgdGFicy4KCuKAmEMt
YyBDLXIgPHQ+4oCZLCDigJhDLWMgQy1sIDx0PuKAmSAocnN0LWRlcHJlY2F0ZWQtc2hpZnQt
cmVnaW9uKQogIERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LXNoaWZ0LXJlZ2lvbiwgdXNl
IFxbcnN0LXNoaWZ0LXJlZ2lvbl0gaW5zdGVhZC4KCuKAmEMtYyBDLXDigJkgKHJzdC1kZXBy
ZWNhdGVkLWZvcndhcmQtc2VjdGlvbikKICBEZXByZWNhdGVkIGJpbmRpbmcgZm9yIHJzdC1m
b3J3YXJkLXNlY3Rpb24sIHVzZSBcW3JzdC1mb3J3YXJkLXNlY3Rpb25dIGluc3RlYWQuCgri
gJhDLWMgQy1u4oCZIChyc3QtZGVwcmVjYXRlZC1iYWNrd2FyZC1zZWN0aW9uKQogIERlcHJl
Y2F0ZWQgYmluZGluZyBmb3IgcnN0LWJhY2t3YXJkLXNlY3Rpb24sIHVzZSBcW3JzdC1iYWNr
d2FyZC1zZWN0aW9uXSBpbnN0ZWFkLgoK4oCYQy1jIFJFVOKAmSAocnN0LWRlcHJlY2F0ZWQt
bWFyay1zZWN0aW9uKQogIERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LW1hcmstc2VjdGlv
biwgdXNlIFxbcnN0LW1hcmstc2VjdGlvbl0gaW5zdGVhZC4KCuKAmEMtYyBDLXPigJkgKHJz
dC1kZXByZWNhdGVkLXN0cmFpZ2h0ZW4tYWRvcm5tZW50cykKICBEZXByZWNhdGVkIGJpbmRp
bmcgZm9yIHJzdC1zdHJhaWdodGVuLWFkb3JubWVudHMsIHVzZSBcW3JzdC1zdHJhaWdodGVu
LWFkb3JubWVudHNdIGluc3RlYWQuCgrigJhDLWMgQy1hIDx0PuKAmSAocnN0LWRlcHJlY2F0
ZWQtYWRqdXN0KQogIERlcHJlY2F0ZWQgYmluZGluZyBmb3IgcnN0LWFkanVzdCwgdXNlIFxb
cnN0LWFkanVzdF0gaW5zdGVhZC4KCuKAmEMtYyBDLWEgQy1k4oCZIChyc3QtZGlzcGxheS1h
ZG9ybm1lbnRzLWhpZXJhcmNoeSkKICBEaXNwbGF5IHRoZSBjdXJyZW50IGZpbGUncyBzZWN0
aW9uIHRpdGxlIGFkb3JubWVudHMgaGllcmFyY2h5LgoK4oCYQy1jIEMtYSBDLXPigJkgKHJz
dC1zdHJhaWdodGVuLWFkb3JubWVudHMpCiAgUmVkbyBhbGwgdGhlIGFkb3JubWVudHMgaW4g
dGhlIGN1cnJlbnQgYnVmZmVyLgoK4oCYQy1jIEMtaOKAmSwg4oCYQy1jIEMtYSBDLWjigJks
IOKAmEMtYyBDLXIgQy1o4oCZLCDigJhDLWMgQy1sIEMtaOKAmSwg4oCYQy1jIEMtdCBDLWji
gJksIOKAmEMtYyBDLWMgQy1o4oCZIChkZXNjcmliZS1wcmVmaXgtYmluZGluZ3MpCiAgRGVz
Y3JpYmUgdGhlIGJpbmRpbmdzIG9mIHRoZSBwcmVmaXggdXNlZCB0byByZWFjaCB0aGlzIGNv
bW1hbmQuCgrigJhDLT3igJksIOKAmEMtYyBDLT3igJksIOKAmEMtYyBDLWEgQy1h4oCZIChy
c3QtYWRqdXN0KQogIEF1dG8tYWRqdXN0IHRoZSBhZG9ybm1lbnQgYXJvdW5kIHBvaW50LgoK
4oCYQy1NLWXigJkgKHJzdC1mb3J3YXJkLXNlY3Rpb24pCiAgU2tpcCB0byB0aGUgbmV4dCBy
ZVN0cnVjdHVyZWRUZXh0IHNlY3Rpb24gdGl0bGUuCgrigJhDLU0tYeKAmSAocnN0LWJhY2t3
YXJkLXNlY3Rpb24pCiAgTGlrZSBgcnN0LWZvcndhcmQtc2VjdGlvbicsIGV4Y2VwdCBtb3Zl
IGJhY2sgb25lIHRpdGxlLgoK4oCYQy1NLWjigJkgKHJzdC1tYXJrLXNlY3Rpb24pCiAgU2Vs
ZWN0IENPVU5UIHNlY3Rpb25zIGFyb3VuZCBwb2ludC4KICAK
--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="c-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="c-mode-help"

SGVscCB3aXRoIOKAmGMtbW9kZeKAmQoK4oCYTS1x4oCZIChjLWZpbGwtcGFyYWdyYXBoKQog
IExpa2UgXFtmaWxsLXBhcmFncmFwaF0gYnV0IGhhbmRsZXMgQyBhbmQgQysrIHN0eWxlIGNv
bW1lbnRzLgoK4oCYQy1NLWXigJkgKGMtZW5kLW9mLWRlZnVuKQogIE1vdmUgZm9yd2FyZCB0
byB0aGUgZW5kIG9mIGEgdG9wIGxldmVsIGRlY2xhcmF0aW9uLgoK4oCYQy1NLWHigJkgKGMt
YmVnaW5uaW5nLW9mLWRlZnVuKQogIE1vdmUgYmFja3dhcmQgdG8gdGhlIGJlZ2lubmluZyBv
ZiBhIGRlZnVuLgoK4oCYQy1NLWrigJksIOKAmE0tauKAmSAoYy1pbmRlbnQtbmV3LWNvbW1l
bnQtbGluZSkKICBCcmVhayBsaW5lIGF0IHBvaW50IGFuZCBpbmRlbnQsIGNvbnRpbnVpbmcg
Y29tbWVudCBvciBtYWNybyBpZiB3aXRoaW4gb25lLgoK4oCYTS1l4oCZIChjLWVuZC1vZi1z
dGF0ZW1lbnQpCiAgR28gdG8gdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IEMgc3RhdGVtZW50
LgoK4oCYTS1h4oCZIChjLWJlZ2lubmluZy1vZi1zdGF0ZW1lbnQpCiAgR28gdG8gdGhlIGJl
Z2lubmluZyBvZiB0aGUgaW5uZXJtb3N0IEMgc3RhdGVtZW50LgoK4oCYQy1NLXHigJkgKGMt
aW5kZW50LWV4cCkKICBJbmRlbnQgZWFjaCBsaW5lIGluIHRoZSBiYWxhbmNlZCBleHByZXNz
aW9uIGZvbGxvd2luZyBwb2ludCBzeW50YWN0aWNhbGx5LgoK4oCYQy1NLWjigJkgKGMtbWFy
ay1mdW5jdGlvbikKICBQdXQgbWFyayBhdCBlbmQgb2YgdGhlIGN1cnJlbnQgdG9wLWxldmVs
IGRlY2xhcmF0aW9uIG9yIG1hY3JvLCBwb2ludCBhdCBiZWdpbm5pbmcuCgrigJhUQULigJkg
KGMtaW5kZW50LWxpbmUtb3ItcmVnaW9uKQogIEluZGVudCBhY3RpdmUgcmVnaW9uLCBjdXJy
ZW50IGxpbmUsIG9yIGJsb2NrIHN0YXJ0aW5nIG9uIHRoaXMgbGluZS4KCuKAmEMtYyBDLXfi
gJkgKGMtc3Vid29yZC1tb2RlKQogIFRvZ2dsZSBzdWJ3b3JkIG1vdmVtZW50IGFuZCBlZGl0
aW5nIChTdWJ3b3JkIG1vZGUpLgoK4oCYQy1jIC7igJkgKGMtc2V0LXN0eWxlKQogIFNldCB0
aGUgY3VycmVudCBidWZmZXIgdG8gdXNlIHRoZSBzdHlsZSBTVFlMRU5BTUUuCgrigJhDLWMg
Qy1z4oCZIChjLXNob3ctc3ludGFjdGljLWluZm9ybWF0aW9uKQogIFNob3cgc3ludGFjdGlj
IGluZm9ybWF0aW9uIGZvciBjdXJyZW50IGxpbmUuCgrigJhDLWMgQy1x4oCZIChjLWluZGVu
dC1kZWZ1bikKICBJbmRlbnQgdGhlIGN1cnJlbnQgdG9wLWxldmVsIGRlY2xhcmF0aW9uIG9y
IG1hY3JvIHN5bnRhY3RpY2FsbHkuCgrigJhDLWMgQy1v4oCZIChjLXNldC1vZmZzZXQpCiAg
Q2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHN5bnRhY3RpYyBlbGVtZW50IHN5bWJvbCBpbiBgYy1v
ZmZzZXRzLWFsaXN0Jy4KCuKAmEMtYyBDLWzigJkgKGMtdG9nZ2xlLWVsZWN0cmljLXN0YXRl
KQogIFRvZ2dsZSB0aGUgZWxlY3RyaWMgaW5kZW50YXRpb24gZmVhdHVyZS4KCuKAmEMtYyBD
LWPigJkgKGNvbW1lbnQtcmVnaW9uKQogIENvbW1lbnQgb3IgdW5jb21tZW50IGVhY2ggbGlu
ZSBpbiB0aGUgcmVnaW9uLgoK4oCYQy1jIEMtYuKAmSAoYy1zdWJtaXQtYnVnLXJlcG9ydCkK
ICBTdWJtaXQgdmlhIG1haWwgYSBidWcgcmVwb3J0IG9uIENDIE1vZGUuCgrigJhDLWMgQy1h
4oCZIChjLXRvZ2dsZS1hdXRvLW5ld2xpbmUpCiAgVG9nZ2xlIGF1dG8tbmV3bGluZSBmZWF0
dXJlLgoK4oCYQy1jIEMtXOKAmSAoYy1iYWNrc2xhc2gtcmVnaW9uKQogIEluc2VydCwgYWxp
Z24sIG9yIGRlbGV0ZSBlbmQtb2YtbGluZSBiYWNrc2xhc2hlcyBvbiB0aGUgbGluZXMgaW4g
dGhlIHJlZ2lvbi4KCuKAmEMtYyBERUzigJksIOKAmEMtYyBDLURFTOKAmSwg4oCYQy1jIDxD
LWJhY2tzcGFjZT7igJkgKGMtaHVuZ3J5LWRlbGV0ZS1iYWNrd2FyZHMpCiAgRGVsZXRlIHRo
ZSBwcmVjZWRpbmcgY2hhcmFjdGVyIG9yIGFsbCBwcmVjZWRpbmcgd2hpdGVzcGFjZQoK4oCY
Qy1jIEMtZOKAmSwg4oCYQy1jIDxkZWxldGVjaGFyPuKAmSwg4oCYQy1jIDxDLWRlbGV0ZWNo
YXI+4oCZLCDigJhDLWMgPEMtZGVsZXRlPuKAmSAoYy1odW5ncnktZGVsZXRlLWZvcndhcmQp
CiAgRGVsZXRlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIG9yIGFsbCBmb2xsb3dpbmcgd2hp
dGVzcGFjZQoK4oCYQy1jIEMtdeKAmSAoYy11cC1jb25kaXRpb25hbCkKICBNb3ZlIGJhY2sg
dG8gdGhlIGNvbnRhaW5pbmcgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsLCBsZWF2aW5nIG1h
cmsgYmVoaW5kLgoK4oCYQy1jIEMtcOKAmSAoYy1iYWNrd2FyZC1jb25kaXRpb25hbCkKICBN
b3ZlIGJhY2sgYWNyb3NzIGEgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsLCBsZWF2aW5nIG1h
cmsgYmVoaW5kLgoK4oCYQy1jIEMtbuKAmSAoYy1mb3J3YXJkLWNvbmRpdGlvbmFsKQogIE1v
dmUgZm9yd2FyZCBhY3Jvc3MgYSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwsIGxlYXZpbmcg
bWFyayBiZWhpbmQuCgrigJhDLWTigJkgKGMtZWxlY3RyaWMtZGVsZXRlLWZvcndhcmQpCiAg
RGVsZXRlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIG9yIHdoaXRlc3BhY2UuCgrigJhERUzi
gJkgKGMtZWxlY3RyaWMtYmFja3NwYWNlKQogIERlbGV0ZSB0aGUgcHJlY2VkaW5nIGNoYXJh
Y3RlciBvciB3aGl0ZXNwYWNlLgoK4oCYI+KAmSAoYy1lbGVjdHJpYy1wb3VuZCkKICBJbnNl
cnQgYSAiIyIuCgrigJh94oCZLCDigJh74oCZIChjLWVsZWN0cmljLWJyYWNlKQogIEluc2Vy
dCBhIGJyYWNlLgoK4oCYL+KAmSAoYy1lbGVjdHJpYy1zbGFzaCkKICBJbnNlcnQgYSBzbGFz
aCBjaGFyYWN0ZXIuCgrigJgq4oCZIChjLWVsZWN0cmljLXN0YXIpCiAgSW5zZXJ0IGEgc3Rh
ciBjaGFyYWN0ZXIuCgrigJgs4oCZLCDigJg74oCZIChjLWVsZWN0cmljLXNlbWkmY29tbWEp
CiAgSW5zZXJ0IGEgY29tbWEgb3Igc2VtaWNvbG9uLgoK4oCYOuKAmSAoYy1lbGVjdHJpYy1j
b2xvbikKICBJbnNlcnQgYSBjb2xvbi4KCuKAmCnigJksIOKAmCjigJkgKGMtZWxlY3RyaWMt
cGFyZW4pCiAgSW5zZXJ0IGEgcGFyZW50aGVzaXMuCgrigJhDLWMgQy1l4oCZIChjLW1hY3Jv
LWV4cGFuZCkKICBFeHBhbmQgQyBtYWNyb3MgaW4gdGhlIHJlZ2lvbiwgdXNpbmcgdGhlIEMg
cHJlcHJvY2Vzc29yLgo=
--------------070100030201080101000807
Content-Type: text/plain; charset=UTF-8;
 name="shell-mode-help"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="shell-mode-help"

SGVscCB3aXRoIOKAmHNoZWxsLW1vZGXigJkKCuKAmE0tcuKAmSAoY29taW50LWhpc3Rvcnkt
aXNlYXJjaC1iYWNrd2FyZC1yZWdleHApCiAgU2VhcmNoIGZvciBhIHJlZ3VsYXIgZXhwcmVz
c2lvbiBiYWNrd2FyZCBpbiBpbnB1dCBoaXN0b3J5IHVzaW5nIElzZWFyY2guCgrigJg8Qy11
cD7igJksIOKAmE0tcOKAmSAoY29taW50LXByZXZpb3VzLWlucHV0KQogIEN5Y2xlIGJhY2t3
YXJkcyB0aHJvdWdoIGlucHV0IGhpc3RvcnksIHNhdmluZyBpbnB1dC4KCuKAmDxDLWRvd24+
4oCZLCDigJhNLW7igJkgKGNvbWludC1uZXh0LWlucHV0KQogIEN5Y2xlIGZvcndhcmRzIHRo
cm91Z2ggaW5wdXQgaGlzdG9yeS4KCuKAmEMtYyAu4oCZIChjb21pbnQtaW5zZXJ0LXByZXZp
b3VzLWFyZ3VtZW50KQogIEluc2VydCB0aGUgSU5ERVh0aCBhcmd1bWVudCBmcm9tIHRoZSBw
cmV2aW91cyBDb21pbnQgY29tbWFuZC1saW5lIGF0IHBvaW50LgoK4oCYQy1jIEMtc+KAmSAo
Y29taW50LXdyaXRlLW91dHB1dCkKICBXcml0ZSBvdXRwdXQgZnJvbSBpbnRlcnByZXRlciBz
aW5jZSBsYXN0IGlucHV0IHRvIEZJTEVOQU1FLgoK4oCYQy1jIEMtZOKAmSAoY29taW50LXNl
bmQtZW9mKQogIFNlbmQgYW4gRU9GIHRvIHRoZSBjdXJyZW50IGJ1ZmZlcidzIHByb2Nlc3Mu
CgrigJhDLWMgQy1w4oCZIChjb21pbnQtcHJldmlvdXMtcHJvbXB0KQogIE1vdmUgdG8gZW5k
IG9mIE50aCBwcmV2aW91cyBwcm9tcHQgaW4gdGhlIGJ1ZmZlci4KCuKAmEMtYyBDLW7igJkg
KGNvbWludC1uZXh0LXByb21wdCkKICBNb3ZlIHRvIGVuZCBvZiBOdGggbmV4dCBwcm9tcHQg
aW4gdGhlIGJ1ZmZlci4KCuKAmEMtYyBDLWzigJkgKGNvbWludC1keW5hbWljLWxpc3QtaW5w
dXQtcmluZykKICBEaXNwbGF5IGEgbGlzdCBvZiByZWNlbnQgaW5wdXRzIGVudGVyZWQgaW50
byB0aGUgY3VycmVudCBidWZmZXIuCgrigJhDLWMgQy1l4oCZIChjb21pbnQtc2hvdy1tYXhp
bXVtLW91dHB1dCkKICBQdXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGF0IHRoZSBib3R0b20g
b2YgdGhlIHdpbmRvdy4KCuKAmEMtYyBDLXLigJksIOKAmEMtTS1s4oCZIChjb21pbnQtc2hv
dy1vdXRwdXQpCiAgRGlzcGxheSBzdGFydCBvZiB0aGlzIGJhdGNoIG9mIGludGVycHJldGVy
IG91dHB1dCBhdCB0b3Agb2Ygd2luZG93LgoK4oCYQy1jIEMtb+KAmSAoY29taW50LWRlbGV0
ZS1vdXRwdXQpCiAgRGVsZXRlIGFsbCBvdXRwdXQgZnJvbSBpbnRlcnByZXRlciBzaW5jZSBs
YXN0IGlucHV0LgoK4oCYQy1jIFJFVOKAmSAoY29taW50LWNvcHktb2xkLWlucHV0KQogIElu
c2VydCBhZnRlciBwcm9tcHQgb2xkIGlucHV0IGF0IHBvaW50IGFzIG5ldyBpbnB1dCB0byBi
ZSBlZGl0ZWQuCgrigJhDLWMgQy1c4oCZIChjb21pbnQtcXVpdC1zdWJqb2IpCiAgU2VuZCBx
dWl0IHNpZ25hbCB0byB0aGUgY3VycmVudCBzdWJqb2IuCgrigJhDLWMgQy164oCZIChjb21p
bnQtc3RvcC1zdWJqb2IpCiAgU3RvcCB0aGUgY3VycmVudCBzdWJqb2IuCgrigJhDLWMgQy1j
4oCZIChjb21pbnQtaW50ZXJydXB0LXN1YmpvYikKICBJbnRlcnJ1cHQgdGhlIGN1cnJlbnQg
c3Viam9iLgoK4oCYQy1jIEMtd+KAmSAoYmFja3dhcmQta2lsbC13b3JkKQogIEtpbGwgY2hh
cmFjdGVycyBiYWNrd2FyZCB1bnRpbCBlbmNvdW50ZXJpbmcgdGhlIGJlZ2lubmluZyBvZiBh
IHdvcmQuCgrigJhDLWMgQy114oCZIChjb21pbnQta2lsbC1pbnB1dCkKICBLaWxsIGFsbCB0
ZXh0IGZyb20gbGFzdCBzdHVmZiBvdXRwdXQgYnkgaW50ZXJwcmV0ZXIgdG8gcG9pbnQuCgri
gJhDLWMgQy1h4oCZIChjb21pbnQtYm9sLW9yLXByb2Nlc3MtbWFyaykKICBNb3ZlIHBvaW50
IHRvIGJlZ2lubmluZyBvZiBsaW5lIChhZnRlciBwcm9tcHQpIG9yIHRvIHRoZSBwcm9jZXNz
IG1hcmsuCgrigJhDLWMgQy144oCZIChjb21pbnQtZ2V0LW5leHQtZnJvbS1oaXN0b3J5KQog
IEFmdGVyIGZldGNoaW5nIGEgbGluZSBmcm9tIGlucHV0IGhpc3RvcnksIHRoaXMgZmV0Y2hl
cyB0aGUgZm9sbG93aW5nIGxpbmUuCgrigJhDLWMgU1BD4oCZIChjb21pbnQtYWNjdW11bGF0
ZSkKICBBY2N1bXVsYXRlIGEgbGluZSB0byBzZW5kIGFzIGlucHV0IGFsb25nIHdpdGggbW9y
ZSBsaW5lcy4KCuKAmEMtYyBNLXLigJkgKGNvbWludC1wcmV2aW91cy1tYXRjaGluZy1pbnB1
dC1mcm9tLWlucHV0KQogIFNlYXJjaCBiYWNrd2FyZHMgdGhyb3VnaCBpbnB1dCBoaXN0b3J5
IGZvciBtYXRjaCBmb3IgY3VycmVudCBpbnB1dC4KCuKAmEMtYyBNLXPigJkgKGNvbWludC1u
ZXh0LW1hdGNoaW5nLWlucHV0LWZyb20taW5wdXQpCiAgU2VhcmNoIGZvcndhcmRzIHRocm91
Z2ggaW5wdXQgaGlzdG9yeSBmb3IgbWF0Y2ggZm9yIGN1cnJlbnQgaW5wdXQuCgrigJhDLWMg
TS1v4oCZIChjb21pbnQtY2xlYXItYnVmZmVyKQogIENsZWFyIHRoZSBjb21pbnQgYnVmZmVy
LgoK4oCYUkVU4oCZIChjb21pbnQtc2VuZC1pbnB1dCkKICBTZW5kIGlucHV0IHRvIHByb2Nl
c3MuCgrigJhDLWTigJkgKGNvbWludC1kZWxjaGFyLW9yLW1heWJlLWVvZikKICBEZWxldGUg
QVJHIGNoYXJhY3RlcnMgZm9yd2FyZCBvciBzZW5kIGFuIEVPRiB0byBzdWJwcm9jZXNzLgoK
4oCYPGtwLWRlbGV0ZT7igJksIOKAmDxkZWxldGU+4oCZIChkZWxldGUtZm9yd2FyZC1jaGFy
KQogIERlbGV0ZSB0aGUgZm9sbG93aW5nIE4gY2hhcmFjdGVycyAocHJldmlvdXMgaWYgTiBp
cyBuZWdhdGl2ZSkuCgrigJg8bW91c2UtMj7igJkgKGNvbWludC1pbnNlcnQtaW5wdXQpCiAg
SW4gYSBDb21pbnQgYnVmZmVyLCBzZXQgdGhlIGN1cnJlbnQgaW5wdXQgdG8gdGhlIHByZXZp
b3VzIGlucHV0IGF0IHBvaW50LgoK4oCYQy1jIEMtYuKAmSAoc2hlbGwtYmFja3dhcmQtY29t
bWFuZCkKICBNb3ZlIGJhY2t3YXJkIGFjcm9zcyBBUkcgc2hlbGwgY29tbWFuZChzKS4gIERv
ZXMgbm90IGNyb3NzIGxpbmVzLgoK4oCYQy1jIEMtZuKAmSAoc2hlbGwtZm9yd2FyZC1jb21t
YW5kKQogIE1vdmUgZm9yd2FyZCBhY3Jvc3MgQVJHIHNoZWxsIGNvbW1hbmQocykuICBEb2Vz
IG5vdCBjcm9zcyBsaW5lcy4KCuKAmFRBQuKAmSAoY29tcGxldGlvbi1hdC1wb2ludCkKICBQ
ZXJmb3JtIGNvbXBsZXRpb24gb24gdGhlIHRleHQgYXJvdW5kIHBvaW50LgoK4oCYTS0/4oCZ
IChjb21pbnQtZHluYW1pYy1saXN0LWZpbGVuYW1lLWNvbXBsZXRpb25zKQogIERpc3BsYXkg
YSBsaXN0IG9mIHBvc3NpYmxlIGNvbXBsZXRpb25zIGZvciB0aGUgZmlsZW5hbWUgYXQgcG9p
bnQuCgrigJhNLVJFVOKAmSAoc2hlbGwtcmVzeW5jLWRpcnMpCiAgUmVzeW5jIHRoZSBidWZm
ZXIncyBpZGVhIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBzdGFjay4K
--------------070100030201080101000807
Content-Type: text/x-emacs-lisp;
 name="help-with-major-mode.el"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
 filename="help-with-major-mode.el"

;;; Help with major mode
;; Extracted from https://github.com/cpitclaudel/biblio.el/blob/master/bi=
blio-core.el#L265
;; Requires: seq, dash

(defsubst hwmm--as-list (x)
  "Make X a list, if it isn't."
  (if (consp x) x (list x)))

(defun hwmm--map-keymap (func map)
  "Call `map-keymap' on FUNC and MAP, and collect the results."
  (let ((out))
    (map-keymap (lambda (&rest args) (push (apply func args) out)) map)
    out))

(defun hwmm--flatten-map (keymap &optional prefix)
  "Flatten KEYMAP, prefixing its keys with PREFIX.
This should really be in Emacs core (in Elisp), instead of being
implemented in C (at least for sparse keymaps).  Don't run this on
non-sparse keymaps."
  (nreverse
   (cond
    ((keymapp keymap)
     (seq-map (lambda (key-value)
                "Add PREFIX to key in KEY-VALUE."
                (cons (append prefix (hwmm--as-list (car key-value)))
                      (cdr key-value)))
              (delq nil
                    (apply
                     #'seq-concatenate
                     'list (hwmm--map-keymap
                            (lambda (k v)
                              "Return a list of bindings in V, prefixed b=
y K."
                              (hwmm--flatten-map v (hwmm--as-list k)))
                            keymap)))))
    ;; This breaks if keymap is a symbol whose function cell is a keymap
    ((symbolp keymap)
     (list (cons prefix keymap))))))

(defun hwmm--group-alist (alist)
  "Return a copy of ALIST whose keys are lists of keys, grouped by value.=

That is, if two key map to `eq' values, they are grouped."
  (let ((map (make-hash-table :test 'eq))
        (new-alist nil))
    (pcase-dolist (`(,key . ,value) alist)
      (puthash value (cons key (gethash value map)) map))
    (pcase-dolist (`(,_ . ,value) alist)
      (-when-let* ((keys (gethash value map)))
        (push (cons (nreverse keys) value) new-alist)
        (puthash value nil map)))
    (nreverse new-alist)))

(defun hwmm--quote (str)
  "Quote STR and call `substitute-command-keys' on it."
  (if str (substitute-command-keys (concat "`" str "'")) ""))

(defun hwmm--quote-keys (keys)
  "Quote and concatenate keybindings in KEYS."
  (mapconcat (lambda (keyseq)
               (hwmm--quote (ignore-errors (help-key-description keyseq n=
il))))
             keys ", "))

(defun hwmm--brief-docs (command)
  "Return first line of documentation of COMMAND."
  (let ((docs (or (ignore-errors (documentation command t)) "")))
    (string-match "\\(.*\\)$" docs)
    (match-string-no-properties 1 docs)))

(defun hwmm--help-with-major-mode-1 (keyseqs-command)
  "Print help on KEYSEQS-COMMAND to standard output."
  ;; (hwmm-with-fontification 'font-lock-function-name-face
  (insert (format "%s (%S)\n"
                  (hwmm--quote-keys (car keyseqs-command))
                  (cdr keyseqs-command)))
  (insert (format "  %s\n\n" (hwmm--brief-docs (cdr keyseqs-command)))))

(defun hwmm--help-with-major-mode ()
  "Display help with current major mode."
  (let ((buf (format "*%S help*" major-mode)))
    (with-help-window buf
      (princ (format "Help with %s\n\n" (hwmm--quote (symbol-name major-m=
ode))))
      (let ((bindings (nreverse
                       (hwmm--group-alist
                        (hwmm--flatten-map
                         (current-local-map))))))
        (with-current-buffer buf
          (seq-do #'hwmm--help-with-major-mode-1 bindings))))
    buf))

--------------070100030201080101000807--

--9ET1tXPJ9avbxati4H8m1hJoni5x328Li--

--hEVQOegSg6jWAB9tH4suBjAquIgDXkbPk
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQIcBAEBAgAGBQJXbCpsAAoJEPqg+cTm90wjVFkP/j5igmvLDR3/k2Owam3lgH9O
EvpPuYDGmotm4NYktB5Ym4ruj9wrD2z8fPDFGdXBfqDIBPcDTskHND2XIPaRWtVY
SHcO3NedIYWfU/qP22ECRQaBwydk7wbuYY9KpL24iHzgJ5FH43QCpPf5qLHOkp+1
XQTbygdickGPdgusbQSRiy/WOrcPwrR/p33oizWzoMIcaex7dA1DD9m1zliH+cxT
Xpkczh/18dJog9h0ev08gcqyUtuqRq/i4qTTWOIPypZf4u3LbhkFll1GRHrNK+oN
capg2pZYQAvFs2D8/Ez+8Ng6bvXLzSvu5ytItPgZxEjDUEcPBHywIw3c8ZeugaDh
0ZggqhMLX9gKhoQ/dw41AGAczqrtVhIqLH9VzUxqIPPLsmIbFFicve9Ok0ga8b0f
lOsARgqonmJJCW7oWmjrkc65SPwsW2gt2pT9OV9J9tkoIp3MSSYAn5y0srNPiTKC
vnbgWzA5NwzRjWzOXEYpcOeXFTQQX/9lm1Wf0e/exzBegvwrJAw8n6bC6gjIuxrO
EV17LvHZhP1TPZo+1wyyCmsNnRI3Ym2m+fHmC/oywHenl2lG2/YvRZH/RElpDCr6
x+WPsrZ/SJCI0XNS9mbnevrCPy8PrlH0J+mH3MHE8AQt1eIOIYvsh/s/JWlGv9dQ
snKQYxkD68/UZWs7KIzc
=68wB
-----END PGP SIGNATURE-----

--hEVQOegSg6jWAB9tH4suBjAquIgDXkbPk--