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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<a name="eev-mainVideo-transcript"></a>
# Transcript
[[!template text="""Hi! My name is Eduardo Ochs. I'm the author""" start="00:00:00.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""of an Emacs package called eev, and the name""" start="00:00:04.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""of this presentation is: "Bidirectional links""" start="00:00:06.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""in eev".""" start="00:00:09.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Let me present things in a weird order,""" start="00:00:10.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""starting by the new feature, and then I'm""" start="00:00:13.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""going to explain the whole context.""" start="00:00:16.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""One of the main features that we are""" start="00:00:20.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""going to see here is this function here,""" start="00:00:22.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""M-x kla, and kla is a mnemonic for "kill""" start="00:00:24.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Link to Anchor". Let me explain... let me""" start="00:00:27.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""demonstrate how it works. This thing here""" start="00:00:31.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""with the green angle brackets is an""" start="00:00:33.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""anchor, this thing between the green""" start="00:00:36.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""angle brackets is a tag of an""" start="00:00:40.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""anchor, and if I type M-x kla here""" start="00:00:42.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it highlights this tag for a second and""" start="00:00:46.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it says "Copied to the kill ring: blah""" start="00:00:49.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""blah blah..." and this thing here is a link.""" start="00:00:52.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""I can insert the link here, I""" start="00:00:54.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""can insert the link in my notes...""" start="00:00:57.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and if I execute this thing this link""" start="00:01:00.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""here it goes to this anchor in this file.""" start="00:01:03.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""If you have a recent version of eev""" start="00:01:10.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""installed then trying this feature""" start="00:01:12.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""should be very easy...""" start="00:01:13.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""you just need to open the this file here,""" start="00:01:15.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""in which everything is defined, and then""" start="00:01:18.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""go to this section at the beginning of""" start="00:01:21.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the file, and then run the three blocks""" start="00:01:23.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""of tests that are there.""" start="00:01:26.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""This block corresponds roughly to what""" start="00:01:28.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""we have just done...""" start="00:01:31.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this other block""" start="00:01:33.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""is slightly different because it shows""" start="00:01:36.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""some variants of kla... one is with `f'""" start="00:01:40.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""instead of an `a' here, let me""" start="00:01:44.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""show how it works... if we type""" start="00:01:48.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""`M-x eeklf' or just `M-x klf'""" start="00:01:51.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""we get a link to this file that does not""" start="00:01:57.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""point to an anchor, and if we type""" start="00:02:00.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""`M-x klt' we get another kind of link that""" start="00:02:03.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""is a link to an anchor in the same""" start="00:02:07.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""file...""" start="00:02:09.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and the third block""" start="00:02:11.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""is more interesting because it lets""" start="00:02:16.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""people create links to files that""" start="00:02:18.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""are elsewhere, and that do not have""" start="00:02:20.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""anchors in them...""" start="00:02:23.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""let me execute this... this will""" start="00:02:25.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""run this sexp here and display the""" start="00:02:29.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""target at the window at the right...""" start="00:02:32.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this is one of the source files of Emacs.""" start="00:02:35.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Let's imagine that I want to create a""" start="00:02:41.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""link to this string here... then I can""" start="00:02:43.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""type `M-x klfs', and this will create a""" start="00:02:46.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""link to a file and to a string in that""" start="00:02:51.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""file. So if I type ENTER here""" start="00:02:53.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it says: "Copied to the kill ring: ...\""" start="00:02:56.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and this is a link to this file here,""" start="00:02:59.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and to the first occurrence of this""" start="00:03:02.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""string in this file.""" start="00:03:04.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""So: how does this work (inside)?...""" start="00:03:10.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""when I was trying to write the documentation""" start="00:03:14.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""of this I tried to write a summary of""" start="00:03:16.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""how the algorithm works, and I failed and""" start="00:03:19.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""I tried again, and I failed again,""" start="00:03:21.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""several times... and then I gave up and I""" start="00:03:23.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""decided to write an intro - a tutorial,""" start="00:03:26.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this one -""" start="00:03:29.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""that explains everything with lots of""" start="00:03:31.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""details, and with lots of sections""" start="00:03:34.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""with "Try it!"s, that""" start="00:03:35.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""have examples that you you can run to""" start="00:03:39.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""understand things, to examine how some""" start="00:03:41.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""functions work, how the data""" start="00:03:44.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""structures work, and so on...""" start="00:03:48.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the problem is that sometimes we have""" start="00:03:51.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""several hyperlinks that point to the to""" start="00:03:54.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the same file. Let me give an example.""" start="00:03:56.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""In the configuration in which I am now,""" start="00:04:00.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""in this file here... the old way of""" start="00:04:04.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""generating hyperlinks to this file""" start="00:04:07.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""with `find-here-links'""" start="00:04:08.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""will generate a temporary buffer""" start="00:04:10.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""like this, and then I would have to""" start="00:04:13.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""choose which one of these hyperlinks I""" start="00:04:15.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""find best, which one I prefer, and then""" start="00:04:18.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""copy it to my notes... so instead""" start="00:04:21.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""of choosing a hyperlink this thing here""" start="00:04:25.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""shows all the options.""" start="00:04:27.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""And in the new way, in `M-x kla'""" start="00:04:30.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and friends, there's an algorithm that""" start="00:04:34.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""chooses the best short hyperlink by""" start="00:04:37.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""itself, and this algorithm is a bit hard""" start="00:04:39.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to explain... let me demonstrate it here.""" start="00:04:43.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Again, we have all these options here, of""" start="00:04:46.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""hyperlinks to this file...""" start="00:04:50.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and if I type `M-x klf'""" start="00:04:51.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it chooses one of them.""" start="00:04:56.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""And of course I can copy it to my notes,""" start="00:04:58.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it's going to work, it's going to point""" start="00:05:01.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to here... and so on.""" start="00:05:02.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Well, the title of this presentation was""" start="00:05:05.000" video="mainVideo-eev" id="subtitle"]]
[[!template text=""""Bidirectional links with eev"... let me""" start="00:05:08.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""show what I mean by bi-directional""" start="00:05:11.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""hyperlinks, and how we can use this thing""" start="00:05:13.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to create bidirectional hyperlinks""" start="00:05:15.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""very quickly.""" start="00:05:17.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""I will have to use a smaller font... let""" start="00:05:19.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""me open these two files here. This one at""" start="00:05:22.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the left is a program in Haskell, and""" start="00:05:25.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this one is a file with my notes on""" start="00:05:27.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Haskell.""" start="00:05:30.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""How do I create a link from...""" start="00:05:31.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to this file in Haskell""" start="00:05:35.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to put it in this file here? I can put""" start="00:05:39.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the cursor here, in any position""" start="00:05:42.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""after this anchor here, and type""" start="00:05:45.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""`M-x kla'...""" start="00:05:48.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it copies this link here to the kill""" start="00:05:49.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""ring and then I can can go here and""" start="00:05:51.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""either insert it with C-y (yank), or""" start="00:05:54.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""insert it with `M-k kli', that adds a""" start="00:05:59.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""comment prefix here.""" start="00:06:06.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""So this is a way to create a link from""" start="00:06:07.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""here to there in which every""" start="00:06:11.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""comment has to be given explicitly...""" start="00:06:15.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""but I also implemented a way to""" start="00:06:18.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""create the two links at the same time.""" start="00:06:21.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""I don't use it much, it's mostly for""" start="00:06:23.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""demos, because it's impressive, I wanted""" start="00:06:25.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""to show that in this presentation...""" start="00:06:27.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""Anyway, let me show it here. Note that""" start="00:06:29.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""that in this file here the point is""" start="00:06:33.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""here, in this file the point is here...""" start="00:06:36.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""My trick is going to create a link to""" start="00:06:40.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this anchor and put it in this file, and""" start="00:06:43.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it's going to create a link to this""" start="00:06:47.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""anchor and put it in this file...""" start="00:06:49.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""So, here it goes: `M-x kla2'... ta-da!""" start="00:06:52.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""it highlighted the true anchors for a""" start="00:06:57.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""second, and it created these things here""" start="00:07:01.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""and inserted them with the""" start="00:07:03.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""right prefixes, I mean, the right""" start="00:07:06.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""comment prefixes.""" start="00:07:09.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""And that's it!""" start="00:07:10.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""So... that's it. If you found this thing""" start="00:07:15.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""interesting just""" start="00:07:18.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""install a recent version of eev and run""" start="00:07:22.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""the tutorial, either with this thing here,""" start="00:07:25.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""`M-x find-kla-intro', or by running""" start="00:07:28.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""this sexp, or open this file here in the""" start="00:07:30.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""eev directory, and follow the""" start="00:07:35.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""tutorials...""" start="00:07:37.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""most things that there are well""" start="00:07:39.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""documented, but the thing that I don't""" start="00:07:42.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""use much and that is mostly for demos,""" start="00:07:46.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""which is the the thing that creates""" start="00:07:47.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""bi-directional hyperlinks, is not yet""" start="00:07:50.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""well documented, but the rest is.""" start="00:07:52.000" video="mainVideo-eev" id="subtitle"]]
[[!template text="""So: that's it! Bye! Have fun! =)""" start="00:07:55.000" video="mainVideo-eev" id="subtitle"]]
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20eev%3A%20Bidirectional%20links%20with%20eev)
<!-- End of emacsconf-publish-after-page -->
|