summaryrefslogtreecommitdiffstats
path: root/2022/info/buttons-after.md
diff options
context:
space:
mode:
Diffstat (limited to '2022/info/buttons-after.md')
-rw-r--r--2022/info/buttons-after.md238
1 files changed, 238 insertions, 0 deletions
diff --git a/2022/info/buttons-after.md b/2022/info/buttons-after.md
new file mode 100644
index 00000000..44c9be69
--- /dev/null
+++ b/2022/info/buttons-after.md
@@ -0,0 +1,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 &quot;demo-link-to-file&quot;""" start="00:05:31.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with the start delimiter of &quot;{{&quot;""" start="00:05:34.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and then delimiters of &quot;}}&quot;,""" start="00:05:37.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the regular expression &quot;.*&quot; 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 &quot;\\&&quot; 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 &quot;~/data/FileA&quot;,""" 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 &quot;More Notes&quot; 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 -->