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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<a name="buttons-mainVideo-transcript"></a>
# Transcript
[[!template new="1" text="""Hi everyone! I'm Mats Liddell.""" start="00:00:00.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""In this talk, I will show""" start="00:00:06.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""how you can link to personal data""" start="00:00:07.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""using Hyperbole's support for implicit button types.""" start="00:00:09.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Before starting, a few words about me.""" start="00:00:13.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""I work as a software engineer,""" start="00:00:16.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and in my spare time""" start="00:00:18.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""I'm co-maintaining the Hyperbole package""" start="00:00:19.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""together with the package author Bob Weiner.""" start="00:00:21.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Hyperbole dates back to 1993,""" start="00:00:24.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and have had some inactive years in the past,""" start="00:00:27.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but work is now active again.""" start="00:00:29.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The package is available""" start="00:00:31.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""through the GNU ELPA package archive.""" start="00:00:33.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The talk will focus on""" start="00:00:36.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""creation of implicit button types.""" start="00:00:37.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""For more info on Hyperbole,""" start="00:00:39.600" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""listen to other presentations""" start="00:00:41.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and check out the package documentation.""" start="00:00:43.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""What I want you to take with you from this talk is""" start="00:00:46.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that the implicit button types""" start="00:00:50.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""can make patterns in your files into buttons;""" start="00:00:51.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and that new implicit button types""" start="00:00:54.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""can quickly be created by using""" start="00:00:56.600" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the `defil` and the `defal` macros.""" start="00:00:58.480" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""So what is an implicit button type?""" start="00:01:01.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""I think of it as a text pattern""" start="00:01:05.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that has some extended meaning.""" start="00:01:06.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""When you see the pattern in the text,""" start="00:01:08.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you can think of it as a button type.""" start="00:01:10.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""When you press the button,""" start="00:01:12.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""something related to that meaning happens.""" start="00:01:13.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It can be jumping to some place,""" start="00:01:16.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""opening an external tool, doing some computation.""" start="00:01:19.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So there can be some action""" start="00:01:22.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""associated with the pattern.""" start="00:01:24.160" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""To make it clear, let's look at some examples.""" start="00:01:29.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Let's start with something that is maybe so obvious""" start="00:01:33.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that you don't even think of it as a pattern: a file name.""" start="00:01:36.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""When you see such a string in text,""" start="00:01:39.600" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you will naturally associate it with a file on disk,""" start="00:01:41.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and if you would click on it,""" start="00:01:45.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you would probably expect that file to open.""" start="00:01:46.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""In the first sentence on the slide,""" start="00:01:52.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you might recognize the file name""" start="00:01:55.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""for the bash initialization file, ~/.bashrc.""" start="00:01:56.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Hyperbole comes with built-in support""" start="00:02:01.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""for recognizing files and directory path names""" start="00:02:03.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""as implicit button types in text.""" start="00:02:06.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""For Hyperbole to take action on the button type,""" start="00:02:08.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you move the cursor within the button""" start="00:02:11.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and press M-RET or use a mouse click.""" start="00:02:13.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So let's try that.""" start="00:02:16.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Similar for the path, /usr/local in the next sentence.""" start="00:02:22.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""That will open the corresponding""" start="00:02:27.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""directory using dired-mode.""" start="00:02:29.520" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""Other examples of built-in implicit button types""" start="00:02:37.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that Hyperbole recognizes are email addresses,""" start="00:02:39.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""web addresses, requests for comment documents""" start="00:02:43.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""in the form of RFC followed by a number,""" start="00:02:47.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""GNU debbugs issues, plus many more.""" start="00:02:50.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""These are some examples""" start="00:02:53.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""of implicit button types with built-in support.""" start="00:02:55.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""I list them here to give you an idea""" start="00:02:58.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""how the text pattern in itself is enough""" start="00:02:59.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""for the system to recognize it""" start="00:03:02.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""as something actionable.""" start="00:03:03.960" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""So as shown, Hyperbole has built-in support""" start="00:03:10.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""for implicit buttons.""" start="00:03:12.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""There's only one problem here.""" start="00:03:14.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The behavior is predefined.""" start="00:03:16.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""There is of course a trade off.""" start="00:03:17.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It is convenient to get""" start="00:03:20.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""many button types out of the box""" start="00:03:21.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""with likely good standard behavior""" start="00:03:23.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and that works in many places.""" start="00:03:25.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""But what if you would want to create""" start="00:03:27.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""your own completely new mapping,""" start="00:03:29.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""possibly to your own data?""" start="00:03:31.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It is here that Hyperbole's support for creating""" start="00:03:32.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""new implicit button types comes in.""" start="00:03:38.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""For the full pattern matching button type,""" start="00:03:41.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""like for the filename and examples we just looked at,""" start="00:03:43.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you need to define the implicit button""" start="00:03:46.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""using the macro, `defib`.""" start="00:03:48.755" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The downside of that is""" start="00:03:50.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you need to code at the elisp level.""" start="00:03:53.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""However, if you are creating a new pattern""" start="00:03:54.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that has well-defined delimiters,""" start="00:03:57.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""there is support for that in an easier way.""" start="00:03:59.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""These support functions, or rather macros,""" start="00:04:01.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""are `defil` and `defal`.""" start="00:04:03.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""We will look at those macros soon,""" start="00:04:06.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but first, my definition of personal data.""" start="00:04:08.440" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""I think of personal data as something""" start="00:04:13.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that you would like to link to,""" start="00:04:18.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but it's not necessarily in a form""" start="00:04:19.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""supported by any known tool.""" start="00:04:21.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It might be stored on a web server, local storage,""" start="00:04:23.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""or could even be some computation""" start="00:04:26.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""rather than a link.""" start="00:04:28.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""What all these cases have in common is that""" start="00:04:29.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""you want to be able to reference it""" start="00:04:32.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""in a short, and for you, descriptive way.""" start="00:04:34.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So when you write text, you can use""" start="00:04:36.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""a new implicit type to create the connection.""" start="00:04:38.960" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""This might be a bit abstract,""" start="00:04:44.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""so let's look at an example.""" start="00:04:46.600" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Suppose you have a flat file structure""" start="00:04:48.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""with some notes in each file.""" start="00:04:51.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It can look like this.""" start="00:04:52.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""In the data folder, we have two files""" start="00:04:54.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that represents the notes we have taken.""" start="00:04:57.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""We now want to be able to link to these notes""" start="00:05:00.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""from outside of the data folder.""" start="00:05:02.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Let's make an implicit button type""" start="00:05:07.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that opens a file in this structure.""" start="00:05:08.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""To make the pattern stand out in text,""" start="00:05:10.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""we use double braces as start and stop delimiters.""" start="00:05:13.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""An implicit button instance""" start="00:05:16.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""would then look like this.""" start="00:05:20.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""We can create that using the `defil` macro like this.""" start="00:05:22.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""This invocation of the field""" start="00:05:27.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""creates a button type "demo-link-to-file"""" start="00:05:31.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""with the start delimiter of "{{"""" start="00:05:34.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and then delimiters of "}}",""" start="00:05:37.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the regular expression ".*" pattern""" start="00:05:40.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to match everything between the delimiters,""" start="00:05:43.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and finally, the action defined by the link expression.""" start="00:05:45.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Pattern substitution is performed""" start="00:05:48.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""on the link expression before evaluation""" start="00:05:52.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""so that the text that is in between the delimiters""" start="00:05:54.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""is inserted where the "\\&" is in the link expression.""" start="00:05:57.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So all in all, implicit type instance will result in""" start="00:06:02.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the link expression of "~/data/FileA",""" start="00:06:07.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""which we recognize as a file path.""" start="00:06:11.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""With a single-line expression,""" start="00:06:14.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""we have created our own hyperbutton syntax""" start="00:06:18.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that we can use in any Emacs buffer""" start="00:06:21.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to link to this custom set of data.""" start="00:06:23.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So let's evaluate the defil and use it.""" start="00:06:25.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""I have prepared the files so that they already""" start="00:06:30.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""contain some text and implicit links.""" start="00:06:33.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So from the presentation, we can go to FileA,""" start="00:06:36.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and from there to fileB.""" start="00:06:43.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Since the Hyperbole path expression""" start="00:06:48.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""supports outline structures, we can,""" start="00:06:51.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""as an extra bonus, reference directly""" start="00:06:53.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the headers in the files,""" start="00:06:55.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""so we can, for example, link directly""" start="00:06:57.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to "More Notes" in FileB.""" start="00:07:00.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""We have now created a simple info system.""" start="00:07:02.600" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""Looking deeper at the link expression,""" start="00:07:10.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""it can be of four different types:""" start="00:07:16.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""A file path expression,""" start="00:07:19.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""as we have already looked at;""" start="00:07:22.040" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""a brace-delimited key series,""" start="00:07:23.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that is, a series of command keys""" start="00:07:25.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""for performing some action,""" start="00:07:27.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""much like a keyboard macro;""" start="00:07:29.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""An URL; or a function that takes one argument,""" start="00:07:30.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""which will be given the button text as input.""" start="00:07:36.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The URL link expression allows you""" start="00:07:38.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to link to web pages.""" start="00:07:42.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So if the data you want to link to""" start="00:07:44.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""is accessible through the Web""" start="00:07:46.560" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and the URL can be constructed""" start="00:07:48.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""from the button text in a meaningful way,""" start="00:07:50.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""it is possible to do that.""" start="00:07:53.000" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""Let's create the button type""" start="00:07:54.520" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that links to GNU software.""" start="00:07:56.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The URL to the GNU software catalog""" start="00:07:57.720" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""is www.gnu.org/software,""" start="00:08:01.089" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and with what we know about the field,""" start="00:08:04.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""it is easy to create the button type for that.""" start="00:08:07.440" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It can look like this.""" start="00:08:09.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""And here are two possible buttons""" start="00:08:11.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""linking to Emacs and Hyperbole.""" start="00:08:16.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So let's again evaluate the defil and use it.""" start="00:08:19.320" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Please note that not all GNU software""" start="00:08:24.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""is under that URL,""" start="00:08:28.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""so this simple definition will not work""" start="00:08:29.000" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to link to everything.""" start="00:08:31.000" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""To highlight the fact that the button action""" start="00:08:32.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""does not have to be a link,""" start="00:08:37.280" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but can be any action,""" start="00:08:39.080" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""let's look at a math example.""" start="00:08:40.600" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Here is the button type that does some math""" start="00:08:42.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""and writes the result in the message area.""" start="00:08:44.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Let's evaluate and use it.""" start="00:08:47.480" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""Before ending, I would like to mention""" start="00:08:57.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the defal macro.""" start="00:08:59.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It is similar to the defil macro,""" start="00:09:00.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but simpler, since it uses a form""" start="00:09:02.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""of the implicit button type with no delimiters.""" start="00:09:04.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""It is simply <TYPE LINK-EXPR>.""" start="00:09:07.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""So the implicit button type contains the link type""" start="00:09:14.800" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""in clear text.""" start="00:09:17.920" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Our recent FSF software button""" start="00:09:18.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""would be created like this.""" start="00:09:23.120" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""And it would be instantiated in text like this.""" start="00:09:24.855" video="mainVideo-buttons" id="subtitle"]]
[[!template new="1" text="""I have shown how you,""" start="00:09:29.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""with the help of the defil macro in Hyperbole,""" start="00:09:34.960" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""quickly can create implicit buttons.""" start="00:09:37.840" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""With those buttons, you can link""" start="00:09:40.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to your personal information""" start="00:09:41.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""in the form it may have.""" start="00:09:43.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""By the nature of the implicit buttons,""" start="00:09:44.160" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""those can be used from any file in Emacs.""" start="00:09:47.200" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""The button types can be""" start="00:09:49.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""created to be used long term,""" start="00:09:52.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""but even short term use within the session is possible,""" start="00:09:54.640" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""since the creation is simple and quick.""" start="00:09:57.680" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Inspired by this, I hope you will find ways""" start="00:09:59.880" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""to create implicit buttons""" start="00:10:03.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""that will support you getting to your information.""" start="00:10:04.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""For the simplest cases,""" start="00:10:07.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""the field and the file macros might be enough.""" start="00:10:09.240" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""For more complicated cases,""" start="00:10:11.400" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""using a tailor-made function can be an option.""" start="00:10:13.360" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""If you know Elisp, use the defib macro""" start="00:10:15.760" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""which gives you full control over the button type.""" start="00:10:19.480" video="mainVideo-buttons" id="subtitle"]]
[[!template text="""Thank you.""" start="00:10:22.240" video="mainVideo-buttons" id="subtitle"]]
Captioner: sachac
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20buttons%3A%20Linking%20personal%20info%20with%20Hyperbole%20implicit%20buttons)
<!-- End of emacsconf-publish-after-page -->
|