summaryrefslogblamecommitdiffstats
path: root/2021/captions/structural.md
blob: 5ec3bf26cd07a93591bc217c8317fb105f218366 (plain) (tree)


















































































































































































































































































                                                                                                                   
<a name="transcript"></a>
# Transcript

[[!template text="Hi. My name is Ethan," start="00:00:00.080" video="mainVideo" id=subtitle]]
[[!template text="and today I'm going to be speaking" start="00:00:01.360" video="mainVideo" id=subtitle]]
[[!template text="about tree-edit, which is a package" start="00:00:02.320" video="mainVideo" id=subtitle]]
[[!template text="which aims to bring structural editing" start="00:00:04.240" video="mainVideo" id=subtitle]]
[[!template text="to everyday languages." start="00:00:06.160" video="mainVideo" id=subtitle]]
[[!template text="So what is structural editing?" start="00:00:08.320" video="mainVideo" id=subtitle]]
[[!template text="The way that we typically" start="00:00:10.559" video="mainVideo" id=subtitle]]
[[!template text="write code today" start="00:00:11.657" video="mainVideo" id=subtitle]]
[[!template text="is working with characters, words," start="00:00:12.578" video="mainVideo" id=subtitle]]
[[!template text="lines, paragraphs, and so on," start="00:00:14.480" video="mainVideo" id=subtitle]]
[[!template text="and these objects have no real relation" start="00:00:16.206" video="mainVideo" id=subtitle]]
[[!template text="to the structure of programming languages." start="00:00:18.600" video="mainVideo" id=subtitle]]
[[!template text="In contrast, tree-edit's editing operations" start="00:00:21.520" video="mainVideo" id=subtitle]]
[[!template text="map exactly to the structure" start="00:00:24.667" video="mainVideo" id=subtitle]]
[[!template text="of the programming language," start="00:00:26.897" video="mainVideo" id=subtitle]]
[[!template text="which is typically in a tree form" start="00:00:28.411" video="mainVideo" id=subtitle]]
[[!template text="with different types of nodes" start="00:00:30.303" video="mainVideo" id=subtitle]]
[[!template text="such as identifiers, expressions," start="00:00:32.053" video="mainVideo" id=subtitle]]
[[!template text="and statements. Using this structure" start="00:00:33.920" video="mainVideo" id=subtitle]]
[[!template text="can enable much more powerful" start="00:00:35.957" video="mainVideo" id=subtitle]]
[[!template text="editing operations," start="00:00:37.548" video="mainVideo" id=subtitle]]
[[!template text="and crucially editing operations" start="00:00:39.200" video="mainVideo" id=subtitle]]
[[!template text="that map much more closely" start="00:00:40.769" video="mainVideo" id=subtitle]]
[[!template text="to the way that we think about code." start="00:00:42.081" video="mainVideo" id=subtitle]]
[[!template text="tree-edit was inspired by" start="00:00:44.960" video="mainVideo" id=subtitle]]
[[!template text="paredit and lispy," start="00:00:46.140" video="mainVideo" id=subtitle]]
[[!template text="which are two great" start="00:00:47.386" video="mainVideo" id=subtitle]]
[[!template text="Lisp structural editors." start="00:00:48.320" video="mainVideo" id=subtitle]]
[[!template text="However, what makes tree-edit unique" start="00:00:50.271" video="mainVideo" id=subtitle]]
[[!template text="is that it can work with many languages," start="00:00:52.383" video="mainVideo" id=subtitle]]
[[!template text="such as some of the" start="00:00:54.480" video="mainVideo" id=subtitle]]
[[!template text="more mainstream languages like C, Java," start="00:00:55.759" video="mainVideo" id=subtitle]]
[[!template text="Python, and so on." start="00:00:59.826" video="mainVideo" id=subtitle]]
[[!template text="So now I'm going to show off tree-edit" start="00:01:01.600" video="mainVideo" id=subtitle]]
[[!template text="in action, working with a Java program." start="00:01:03.273" video="mainVideo" id=subtitle]]
[[!template text="So we can see on the left," start="00:01:05.705" video="mainVideo" id=subtitle]]
[[!template text="we have a syntax tree," start="00:01:07.237" video="mainVideo" id=subtitle]]
[[!template text="and the node in bold is what I call" start="00:01:09.119" video="mainVideo" id=subtitle]]
[[!template text="the current node. So instead of" start="00:01:11.560" video="mainVideo" id=subtitle]]
[[!template text="the concept of a cursor," start="00:01:13.780" video="mainVideo" id=subtitle]]
[[!template text="where we have a point in 2D space," start="00:01:15.100" video="mainVideo" id=subtitle]]
[[!template text="we instead work with a current node" start="00:01:17.600" video="mainVideo" id=subtitle]]
[[!template text="which all our editing operations" start="00:01:20.285" video="mainVideo" id=subtitle]]
[[!template text="take place upon." start="00:01:22.729" video="mainVideo" id=subtitle]]
[[!template text="So we can move up and down," start="00:01:23.840" video="mainVideo" id=subtitle]]
[[!template text="or rather side to side," start="00:01:26.479" video="mainVideo" id=subtitle]]
[[!template text="move inwards down to the children" start="00:01:28.720" video="mainVideo" id=subtitle]]
[[!template text="of the tree, back up to the parents." start="00:01:31.160" video="mainVideo" id=subtitle]]
[[!template text="We can also jump to a node by its type." start="00:01:33.920" video="mainVideo" id=subtitle]]
[[!template text="So we're going to jump to" start="00:01:36.799" video="mainVideo" id=subtitle]]
[[!template text="a variable declaration." start="00:01:38.768" video="mainVideo" id=subtitle]]
[[!template text="We can jump to an if statement." start="00:01:40.880" video="mainVideo" id=subtitle]]
[[!template text="And as you might have noticed," start="00:01:44.399" video="mainVideo" id=subtitle]]
[[!template text="tree-edit by default" start="00:01:46.880" video="mainVideo" id=subtitle]]
[[!template text="uses a vim-style mode of editing," start="00:01:48.360" video="mainVideo" id=subtitle]]
[[!template text="so it's a verb, which would be jump," start="00:01:51.337" video="mainVideo" id=subtitle]]
[[!template text="and then a type," start="00:01:55.119" video="mainVideo" id=subtitle]]
[[!template text="which would be if statement." start="00:01:56.874" video="mainVideo" id=subtitle]]
[[!template text="So now I'll show off" start="00:02:00.799" video="mainVideo" id=subtitle]]
[[!template text="the syntax tree modification in action." start="00:02:03.346" video="mainVideo" id=subtitle]]
[[!template text="So if I delete this deleteme node," start="00:02:06.144" video="mainVideo" id=subtitle]]
[[!template text="we can see the node is deleted," start="00:02:08.000" video="mainVideo" id=subtitle]]
[[!template text="and also the comma is removed" start="00:02:10.112" video="mainVideo" id=subtitle]]
[[!template text="since it's no longer needed." start="00:02:12.049" video="mainVideo" id=subtitle]]
[[!template text="We can add some nodes back in." start="00:02:13.920" video="mainVideo" id=subtitle]]
[[!template text="Here we just have a placeholder node" start="00:02:16.720" video="mainVideo" id=subtitle]]
[[!template text="called tree, which we can swap out" start="00:02:18.160" video="mainVideo" id=subtitle]]
[[!template text="with whatever we like." start="00:02:20.391" video="mainVideo" id=subtitle]]
[[!template text="So if we want to put in, for example," start="00:02:21.875" video="mainVideo" id=subtitle]]
[[!template text="a plus or minus operator," start="00:02:24.560" video="mainVideo" id=subtitle]]
[[!template text="it'll put these two TREE things here" start="00:02:29.280" video="mainVideo" id=subtitle]]
[[!template text="since there needs to be something there," start="00:02:30.879" video="mainVideo" id=subtitle]]
[[!template text="but we can go fill them out as we like." start="00:02:32.634" video="mainVideo" id=subtitle]]
[[!template text="So that's what that is." start="00:02:37.360" video="mainVideo" id=subtitle]]
[[!template text="Then I'll delete these again." start="00:02:38.595" video="mainVideo" id=subtitle]]
[[!template text="Next we can see raising." start="00:02:41.920" video="mainVideo" id=subtitle]]
[[!template text="So if I raise reader," start="00:02:43.709" video="mainVideo" id=subtitle]]
[[!template text="then it will replace" start="00:02:45.280" video="mainVideo" id=subtitle]]
[[!template text="the outer function call" start="00:02:46.160" video="mainVideo" id=subtitle]]
[[!template text="with the node itself." start="00:02:47.342" video="mainVideo" id=subtitle]]
[[!template text="I could raise it again." start="00:02:48.583" video="mainVideo" id=subtitle]]
[[!template text="The opposite operation to that" start="00:02:50.948" video="mainVideo" id=subtitle]]
[[!template text="is wrapping. So I can wrap reader" start="00:02:53.363" video="mainVideo" id=subtitle]]
[[!template text="back into function call," start="00:02:57.200" video="mainVideo" id=subtitle]]
[[!template text="and I could wrap this again" start="00:02:59.519" video="mainVideo" id=subtitle]]
[[!template text="if I wanted to. So that is wrapping." start="00:03:03.009" video="mainVideo" id=subtitle]]
[[!template text="We can also do it on a statement level," start="00:03:08.480" video="mainVideo" id=subtitle]]
[[!template text="so if I want to wrap this" start="00:03:12.640" video="mainVideo" id=subtitle]]
[[!template text="in an if statement," start="00:03:13.760" video="mainVideo" id=subtitle]]
[[!template text="I can wrap the statement," start="00:03:14.480" video="mainVideo" id=subtitle]]
[[!template text="and there we go." start="00:03:17.034" video="mainVideo" id=subtitle]]
[[!template text="And let's just raise it back up," start="00:03:18.400" video="mainVideo" id=subtitle]]
[[!template text="raise it again." start="00:03:21.280" video="mainVideo" id=subtitle]]
[[!template text="There we go. Finally, I'll show off" start="00:03:23.200" video="mainVideo" id=subtitle]]
[[!template text="slurping and barfing," start="00:03:26.959" video="mainVideo" id=subtitle]]
[[!template text="which... a little bit gross words," start="00:03:28.720" video="mainVideo" id=subtitle]]
[[!template text="but I think it accurately describes" start="00:03:32.256" video="mainVideo" id=subtitle]]
[[!template text="the action, so let me just add" start="00:03:34.879" video="mainVideo" id=subtitle]]
[[!template text="a couple breaks here." start="00:03:37.519" video="mainVideo" id=subtitle]]
[[!template text="So let's say we want" start="00:03:41.120" video="mainVideo" id=subtitle]]
[[!template text="this if statement and a couple of breaks" start="00:03:44.748" video="mainVideo" id=subtitle]]
[[!template text="to be inside of the while," start="00:03:46.779" video="mainVideo" id=subtitle]]
[[!template text="so we can just slurp this up," start="00:03:48.319" video="mainVideo" id=subtitle]]
[[!template text="and if we don't actually want them," start="00:03:50.959" video="mainVideo" id=subtitle]]
[[!template text="we can barf them back out." start="00:03:52.433" video="mainVideo" id=subtitle]]
[[!template text="So that's where those words" start="00:03:54.528" video="mainVideo" id=subtitle]]
[[!template text="have come from." start="00:03:56.736" video="mainVideo" id=subtitle]]
[[!template text="And we can just... delete as we please." start="00:03:57.840" video="mainVideo" id=subtitle]]
[[!template text="So yeah, that's a quick overview" start="00:04:01.120" video="mainVideo" id=subtitle]]
[[!template text="of the tree editing plugin in action." start="00:04:03.826" video="mainVideo" id=subtitle]]
[[!template text="So now I want to talk a little bit" start="00:04:07.360" video="mainVideo" id=subtitle]]
[[!template text="about the implementation of tree-edit." start="00:04:08.900" video="mainVideo" id=subtitle]]
[[!template text="Tree-edit uses the tree-sitter parser" start="00:04:12.080" video="mainVideo" id=subtitle]]
[[!template text="to convert text into a syntax tree." start="00:04:14.400" video="mainVideo" id=subtitle]]
[[!template text="Tree-sitter is used by GitHub" start="00:04:17.919" video="mainVideo" id=subtitle]]
[[!template text="for its syntax highlighting," start="00:04:21.501" video="mainVideo" id=subtitle]]
[[!template text="and it's available in a bunch of editors," start="00:04:22.752" video="mainVideo" id=subtitle]]
[[!template text="including Emacs, so it's" start="00:04:25.280" video="mainVideo" id=subtitle]]
[[!template text="a fairly standard tool." start="00:04:27.120" video="mainVideo" id=subtitle]]
[[!template text="However, the unique part about tree-edit" start="00:04:28.960" video="mainVideo" id=subtitle]]
[[!template text="is how it performs" start="00:04:30.960" video="mainVideo" id=subtitle]]
[[!template text="correct editing operations" start="00:04:32.479" video="mainVideo" id=subtitle]]
[[!template text="on the syntax tree" start="00:04:34.479" video="mainVideo" id=subtitle]]
[[!template text="and then converts that back into text." start="00:04:35.919" video="mainVideo" id=subtitle]]
[[!template text="So to do that, we use miniKanren," start="00:04:38.320" video="mainVideo" id=subtitle]]
[[!template text="and miniKanren is an embedded" start="00:04:41.759" video="mainVideo" id=subtitle]]
[[!template text="domain-specific language" start="00:04:43.759" video="mainVideo" id=subtitle]]
[[!template text="for logic programming." start="00:04:45.120" video="mainVideo" id=subtitle]]
[[!template text="So what exactly does that mean?" start="00:04:47.440" video="mainVideo" id=subtitle]]
[[!template text="In our case, it's just" start="00:04:50.080" video="mainVideo" id=subtitle]]
[[!template text="an Emacs Lisp library called reazon," start="00:04:51.280" video="mainVideo" id=subtitle]]
[[!template text="which exposes a set of macros" start="00:04:54.240" video="mainVideo" id=subtitle]]
[[!template text="which enables us to program" start="00:04:56.720" video="mainVideo" id=subtitle]]
[[!template text="in this logic programming style." start="00:04:58.320" video="mainVideo" id=subtitle]]
[[!template text="I'm not going to get into the details" start="00:05:01.360" video="mainVideo" id=subtitle]]
[[!template text="of how logic programming works." start="00:05:03.280" video="mainVideo" id=subtitle]]
[[!template text="However, one of the most unique aspects" start="00:05:05.520" video="mainVideo" id=subtitle]]
[[!template text="about it is that we can define" start="00:05:07.520" video="mainVideo" id=subtitle]]
[[!template text="a predicate and then figure out" start="00:05:09.919" video="mainVideo" id=subtitle]]
[[!template text="all the inputs to the predicate" start="00:05:13.600" video="mainVideo" id=subtitle]]
[[!template text="that would hold to be true." start="00:05:15.280" video="mainVideo" id=subtitle]]
[[!template text="So in this case," start="00:05:17.759" video="mainVideo" id=subtitle]]
[[!template text="we have our query variable q," start="00:05:19.360" video="mainVideo" id=subtitle]]
[[!template text="which will be what the output is," start="00:05:21.520" video="mainVideo" id=subtitle]]
[[!template text="and we are asking for all the values of q" start="00:05:24.479" video="mainVideo" id=subtitle]]
[[!template text="that pass this predicate of" start="00:05:29.120" video="mainVideo" id=subtitle]]
[[!template text="being set-equal to 1 2 3 4." start="00:05:32.080" video="mainVideo" id=subtitle]]
[[!template text="So if we execute this," start="00:05:34.479" video="mainVideo" id=subtitle]]
[[!template text="it will take a little time..." start="00:05:36.880" video="mainVideo" id=subtitle]]
[[!template text="It shouldn't be taking this long." start="00:05:40.080" video="mainVideo" id=subtitle]]
[[!template text="Oh, there it goes." start="00:05:41.520" video="mainVideo" id=subtitle]]
[[!template text="We can see that it's generated" start="00:05:43.280" video="mainVideo" id=subtitle]]
[[!template text="a bunch of different answers" start="00:05:45.919" video="mainVideo" id=subtitle]]
[[!template text="that are all set-equal to 1 2 3 4." start="00:05:47.520" video="mainVideo" id=subtitle]]
[[!template text="So it's just a bunch of" start="00:05:51.199" video="mainVideo" id=subtitle]]
[[!template text="different permutations of that." start="00:05:52.880" video="mainVideo" id=subtitle]]
[[!template text="We can extend this notion" start="00:05:57.280" video="mainVideo" id=subtitle]]
[[!template text="to a parser. In tree-edit, we've defined" start="00:05:59.120" video="mainVideo" id=subtitle]]
[[!template text="a parser in reazon," start="00:06:03.600" video="mainVideo" id=subtitle]]
[[!template text="and we can use that parser to figure out" start="00:06:05.360" video="mainVideo" id=subtitle]]
[[!template text="any tokens that match the type of node" start="00:06:10.800" video="mainVideo" id=subtitle]]
[[!template text="that we're trying to generate." start="00:06:15.919" video="mainVideo" id=subtitle]]
[[!template text="If I execute this, we can see" start="00:06:16.880" video="mainVideo" id=subtitle]]
[[!template text="that reazon has generated" start="00:06:19.600" video="mainVideo" id=subtitle]]
[[!template text="these five answers that match" start="00:06:21.199" video="mainVideo" id=subtitle]]
[[!template text="what a try statement is in Java." start="00:06:23.440" video="mainVideo" id=subtitle]]
[[!template text="Here we can see we can have" start="00:06:26.960" video="mainVideo" id=subtitle]]
[[!template text="an infinite amount of catches" start="00:06:29.680" video="mainVideo" id=subtitle]]
[[!template text="optionally ending with a finally," start="00:06:31.919" video="mainVideo" id=subtitle]]
[[!template text="and we always have to start" start="00:06:34.720" video="mainVideo" id=subtitle]]
[[!template text="with a try and a block." start="00:06:36.160" video="mainVideo" id=subtitle]]
[[!template text="We can see this again" start="00:06:39.039" video="mainVideo" id=subtitle]]
[[!template text="with an argument list." start="00:06:40.000" video="mainVideo" id=subtitle]]
[[!template text="We have the opening and closing" start="00:06:42.400" video="mainVideo" id=subtitle]]
[[!template text="parentheses, and expressions" start="00:06:43.520" video="mainVideo" id=subtitle]]
[[!template text="which are comma delimited." start="00:06:45.759" video="mainVideo" id=subtitle]]
[[!template text="Now, for a more complex example, and" start="00:06:49.120" video="mainVideo" id=subtitle]]
[[!template text="something that is along the lines" start="00:06:51.759" video="mainVideo" id=subtitle]]
[[!template text="of what's in tree-edit," start="00:06:53.680" video="mainVideo" id=subtitle]]
[[!template text="is if we have this x here" start="00:06:55.199" video="mainVideo" id=subtitle]]
[[!template text="and we want to insert another expression," start="00:06:57.919" video="mainVideo" id=subtitle]]
[[!template text="so x, y. We can assert" start="00:07:01.599" video="mainVideo" id=subtitle]]
[[!template text="that there's some new tokens," start="00:07:05.759" video="mainVideo" id=subtitle]]
[[!template text="and we want an expression" start="00:07:07.680" video="mainVideo" id=subtitle]]
[[!template text="to be in those new tokens," start="00:07:10.160" video="mainVideo" id=subtitle]]
[[!template text="and we can essentially state" start="00:07:11.840" video="mainVideo" id=subtitle]]
[[!template text="where we want these new tokens to go" start="00:07:13.280" video="mainVideo" id=subtitle]]
[[!template text="within the old list of tokens," start="00:07:15.039" video="mainVideo" id=subtitle]]
[[!template text="so replacing it" start="00:07:19.759" video="mainVideo" id=subtitle]]
[[!template text="after the previous expression," start="00:07:21.599" video="mainVideo" id=subtitle]]
[[!template text="before the closed parentheses," start="00:07:23.360" video="mainVideo" id=subtitle]]
[[!template text="and then we can state" start="00:07:26.000" video="mainVideo" id=subtitle]]
[[!template text="that the whole thing parses." start="00:07:26.880" video="mainVideo" id=subtitle]]
[[!template text="If we run that, we can see that" start="00:07:28.560" video="mainVideo" id=subtitle]]
[[!template text="as we wanted earlier," start="00:07:30.080" video="mainVideo" id=subtitle]]
[[!template text="which was a comma and then expression," start="00:07:32.479" video="mainVideo" id=subtitle]]
[[!template text="we have that here as well." start="00:07:37.120" video="mainVideo" id=subtitle]]
[[!template text="We can see this again." start="00:07:39.120" video="mainVideo" id=subtitle]]
[[!template text="Here, the only change is that" start="00:07:41.759" video="mainVideo" id=subtitle]]
[[!template text="we've moved the tokens to be" start="00:07:42.720" video="mainVideo" id=subtitle]]
[[!template text="before the expression." start="00:07:45.280" video="mainVideo" id=subtitle]]
[[!template text="So we want to put an expression" start="00:07:46.240" video="mainVideo" id=subtitle]]
[[!template text="before this x, so we want something" start="00:07:48.800" video="mainVideo" id=subtitle]]
[[!template text="like y, x," start="00:07:50.560" video="mainVideo" id=subtitle]]
[[!template text="and if we execute that," start="00:07:52.560" video="mainVideo" id=subtitle]]
[[!template text="we can see that it is correctly asserted" start="00:07:54.240" video="mainVideo" id=subtitle]]
[[!template text="that it would be an expression" start="00:07:57.919" video="mainVideo" id=subtitle]]
[[!template text="and then a comma afterwards." start="00:07:59.039" video="mainVideo" id=subtitle]]
[[!template text="One last example is" start="00:08:01.520" video="mainVideo" id=subtitle]]
[[!template text="if we have an if statement" start="00:08:02.960" video="mainVideo" id=subtitle]]
[[!template text="and we want to add an extra block," start="00:08:04.400" video="mainVideo" id=subtitle]]
[[!template text="we can see that it correctly figures out" start="00:08:07.759" video="mainVideo" id=subtitle]]
[[!template text="that we need an else" start="00:08:11.599" video="mainVideo" id=subtitle]]
[[!template text="in order to have another statement" start="00:08:12.400" video="mainVideo" id=subtitle]]
[[!template text="in an if statement." start="00:08:13.840" video="mainVideo" id=subtitle]]
[[!template text="So, next steps for tree-edit." start="00:08:16.720" video="mainVideo" id=subtitle]]
[[!template text="The core of tree-edit is in place" start="00:08:19.759" video="mainVideo" id=subtitle]]
[[!template text="but there's a lot of usability features" start="00:08:21.039" video="mainVideo" id=subtitle]]
[[!template text="to add, and a lot of testing" start="00:08:23.120" video="mainVideo" id=subtitle]]
[[!template text="that needs to be done" start="00:08:25.360" video="mainVideo" id=subtitle]]
[[!template text="in order to iron out any bugs that exist." start="00:08:26.400" video="mainVideo" id=subtitle]]
[[!template text="I'd like to add support" start="00:08:29.599" video="mainVideo" id=subtitle]]
[[!template text="for as many languages as is possible." start="00:08:30.960" video="mainVideo" id=subtitle]]
[[!template text="I think my next step" start="00:08:35.200" video="mainVideo" id=subtitle]]
[[!template text="will probably be Python." start="00:08:36.240" video="mainVideo" id=subtitle]]
[[!template text="There's some performance improvements" start="00:08:38.490" video="mainVideo" id=subtitle]]
[[!template text="that need to be made, since using this" start="00:08:41.279" video="mainVideo" id=subtitle]]
[[!template text="logic programming language" start="00:08:44.080" video="mainVideo" id=subtitle]]
[[!template text="is fairly intensive." start="00:08:45.519" video="mainVideo" id=subtitle]]
[[!template text="There's some optimizations" start="00:08:47.600" video="mainVideo" id=subtitle]]
[[!template text="both on the library side" start="00:08:48.800" video="mainVideo" id=subtitle]]
[[!template text="and on tree-edit side" start="00:08:50.560" video="mainVideo" id=subtitle]]
[[!template text="that can be made." start="00:08:51.519" video="mainVideo" id=subtitle]]
[[!template text="Contributors are of course welcome," start="00:08:53.360" video="mainVideo" id=subtitle]]
[[!template text="as tree-edit is an open source project." start="00:08:55.519" video="mainVideo" id=subtitle]]
[[!template text="For future work, I think the prospect" start="00:09:00.000" video="mainVideo" id=subtitle]]
[[!template text="of voice controlled development" start="00:09:03.360" video="mainVideo" id=subtitle]]
[[!template text="with tree-edit is actually something" start="00:09:04.480" video="mainVideo" id=subtitle]]
[[!template text="that's really exciting," start="00:09:06.240" video="mainVideo" id=subtitle]]
[[!template text="since syntax can be very cumbersome" start="00:09:07.920" video="mainVideo" id=subtitle]]
[[!template text="when you're working with" start="00:09:11.120" video="mainVideo" id=subtitle]]
[[!template text="voice control software." start="00:09:12.320" video="mainVideo" id=subtitle]]
[[!template text="I can envision something like" start="00:09:14.240" video="mainVideo" id=subtitle]]
[[!template text="saying, &quot;Jump to identifier," start="00:09:16.320" video="mainVideo" id=subtitle]]
[[!template text="add plus operator, jump to if statement," start="00:09:19.440" video="mainVideo" id=subtitle]]
[[!template text="wrap if statement in while.&quot;" start="00:09:26.640" video="mainVideo" id=subtitle]]
[[!template text="So that's something" start="00:09:30.480" video="mainVideo" id=subtitle]]
[[!template text="I'd like to investigate." start="00:09:31.519" video="mainVideo" id=subtitle]]
[[!template text="I also would just like to" start="00:09:33.519" video="mainVideo" id=subtitle]]
[[!template text="provide the core functionality" start="00:09:35.040" video="mainVideo" id=subtitle]]
[[!template text="of tree-edit as something" start="00:09:37.279" video="mainVideo" id=subtitle]]
[[!template text="that can be used as a library" start="00:09:39.120" video="mainVideo" id=subtitle]]
[[!template text="for other projects," start="00:09:40.399" video="mainVideo" id=subtitle]]
[[!template text="such as refactoring packages," start="00:09:41.920" video="mainVideo" id=subtitle]]
[[!template text="or other non-Vim-style approaches," start="00:09:43.839" video="mainVideo" id=subtitle]]
[[!template text="and just making the syntax generation" start="00:09:46.240" video="mainVideo" id=subtitle]]
[[!template text="available for reuse." start="00:09:49.200" video="mainVideo" id=subtitle]]
[[!template text="Finally, I'd like to thank" start="00:09:52.080" video="mainVideo" id=subtitle]]
[[!template text="the authors of reazon" start="00:09:53.760" video="mainVideo" id=subtitle]]
[[!template text="and elisp-tree-sitter," start="00:09:56.399" video="mainVideo" id=subtitle]]
[[!template text="which in turn packages" start="00:09:58.399" video="mainVideo" id=subtitle]]
[[!template text="tree-sitter itself," start="00:10:00.185" video="mainVideo" id=subtitle]]
[[!template text="since tree-edit relies very heavily" start="00:10:02.079" video="mainVideo" id=subtitle]]
[[!template text="on these two packages." start="00:10:05.440" video="mainVideo" id=subtitle]]
[[!template text="I'd also like to thank" start="00:10:07.680" video="mainVideo" id=subtitle]]
[[!template text="the author of lispy," start="00:10:08.959" video="mainVideo" id=subtitle]]
[[!template text="since a lot of the design decisions" start="00:10:10.480" video="mainVideo" id=subtitle]]
[[!template text="when it comes to the editing operations" start="00:10:12.720" video="mainVideo" id=subtitle]]
[[!template text="are based very heavily on lispy." start="00:10:14.800" video="mainVideo" id=subtitle]]
[[!template text="So that's the end of my talk." start="00:10:18.560" video="mainVideo" id=subtitle]]
[[!template text="Thank you for watching." start="00:10:20.320" video="mainVideo" id=subtitle]]
[[!template text="captions by sachac" start="00:10:22.959" video="mainVideo" id=subtitle]]