summaryrefslogtreecommitdiffstats
path: root/2022/talks/python.md
blob: 2160183372c89a2c2ae50b039de75fbdbc42e3fc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
[[!sidebar content=""]]
[[!meta title="Short hyperlinks to Python docs"]]
[[!meta copyright="Copyright © 2022 Eduardo Ochs"]]
[[!inline pages="internal(2022/info/python-nav)" raw="yes"]]

<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Short hyperlinks to Python docs
Eduardo Ochs

[[!inline pages="internal(2022/info/python-before)" raw="yes"]]

If we have a local copy of the Python docs installed then it is easy
to define the three hyperlink functions in the Python program below,

    # (find-pydoc  "tutorial/classes")
    # (find-pydocw "tutorial/classes")
    # (find-pydocr "tutorial/classes")
    class MyVector:
        def __init__(v, x, y):
            v.x = x
            v.y = y

such that each one expands its argument in the right way, and the
first one opens the local URL
<file:///usr/share/doc/python3.9-doc/html/tutorial/classes.html> in
the browser, the
second one opens <https://docs.python.org/3/tutorial/classes.html>, and
the third one opens the RST source of those HTML pages in Emacs: the
file `/<rstsourcedir>/tutorial/classes.rst.txt`.

The docs for Python are designed to be navigated in a browser. Suppose
that we start on the page
[classes.html](https://docs.python.org/3/tutorial/classes.html)
above, follow a couple of
hyperlinks, and then we find this other page that, ahem, is very
interesting and important and we *need* to have hyperlinks to:

<https://docs.python.org/3/reference/datamodel.html#object.__init__>

The most obvious way to create elisp hyperlinks to that page is to
copy its URL to Emacs, edit it by hand to produce a `(find-pydoc ...)`
hyperlink, duplicate that hyperlink twice, and add a "`w`" and a "`r`"
into the right places&#x2026; but this is not very practical.

In this presentation I will show a practical way to handle that. It is
a new module of eev &#x2013;
[eev-rstdoc.el](http://angg.twu.net/eev-current/eev-rstdoc.el.html)
&#x2013; that performs both the
expansions needed by `find-pydoc{,w,r}` and the "shrinkings" that
convert URLs and filenames to short hyperlinks. Eev-rstdoc.el comes
with three "families" of hyperlinks, expansions, and shrinkings: one
for Python docs, one for SymPy, and one for MatPlotLib. It is easy to
add new families, and the parameters for expansion and shrinking in
each family are easy to configure.

For more info see [this
page](http://angg.twu.net/emacsconf2022-py.html). For a translation of the Python tutorial
to a format that has only executable examples and elisp hyperlinks,
see [this](http://angg.twu.net/e/python.e.html#tut-numbers).


[[!inline pages="internal(2022/info/python-after)" raw="yes"]]

[[!inline pages="internal(2022/info/python-nav)" raw="yes"]]

[[!taglink CategoryPython]]