summaryrefslogtreecommitdiffstats
path: root/2022/info/buttons-after.md
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2022-12-04 08:46:31 -0500
committerSacha Chua <sacha@sachachua.com>2022-12-04 08:46:31 -0500
commit1334551d0cfd98996420d986d8d6f60904d318ae (patch)
tree5014c52f4fed76eb9b5442dbcaeb3a32388a8360 /2022/info/buttons-after.md
parent5bae3dea41a0d95f831369ec016eabbdcb370c65 (diff)
downloademacsconf-wiki-1334551d0cfd98996420d986d8d6f60904d318ae.tar.xz
emacsconf-wiki-1334551d0cfd98996420d986d8d6f60904d318ae.zip
Automated commit
Diffstat (limited to '2022/info/buttons-after.md')
-rw-r--r--2022/info/buttons-after.md448
1 files changed, 225 insertions, 223 deletions
diff --git a/2022/info/buttons-after.md b/2022/info/buttons-after.md
index 3e417e70..1b3e6f4f 100644
--- a/2022/info/buttons-after.md
+++ b/2022/info/buttons-after.md
@@ -4,231 +4,233 @@
<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"]]
+[[!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)