summaryrefslogtreecommitdiffstats
path: root/2022/info/justl-after.md
blob: 25ce11e8f41956e506970ee53490085656dcd51d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
<!-- Automatically generated by emacsconf-publish-after-page -->


<a name="justl-mainVideo-transcript"></a>
# Transcript

[[!template new="1" text="""Hi everyone, I am Sibi Prabakaran""" start="00:00:00.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and welcome to my session on Justl Emacs Mode.""" start="00:00:04.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""A bit about me, I have been working""" start="00:00:09.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""as a Haskell Engineer""" start="00:00:11.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""at FPComplete for the last 4 years.""" start="00:00:12.880" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I am based out of India.""" start="00:00:15.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I occasionally blog at my website psibi.in""" start="00:00:17.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""where you can find more information about me.""" start="00:00:20.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I have been using Emacs""" start="00:00:23.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""for more than a decade now.""" start="00:00:25.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I help in the maintenance""" start="00:00:26.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""of the Terraform client for LSP mode.""" start="00:00:28.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I have also authored dhall-mode and rego-mode""" start="00:00:31.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which are the major modes""" start="00:00:33.960" video="mainVideo-justl" id="subtitle"]]
[[!template text="""for the respective languages.""" start="00:00:35.000" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Before jumping into the demo""" start="00:00:39.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""of the Emacs package,""" start="00:00:40.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I would like to give a brief introduction""" start="00:00:42.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""about justfiles and what it is.""" start="00:00:44.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I will also try to compare it with Makefiles""" start="00:00:46.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""as it takes a lot of inspiration from it.""" start="00:00:49.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""What you see currently in the buffer""" start="00:00:53.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is a sample justfile.""" start="00:00:55.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""If you have previously used Makefiles,""" start="00:00:57.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you would be able to see""" start="00:00:59.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""that there is quite a bit of similarity""" start="00:01:00.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""between them.""" start="00:01:02.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Anything that starts with hash""" start="00:01:03.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is a documentation comment.""" start="00:01:05.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can see that I have the first recipe""" start="00:01:07.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which is named as default.""" start="00:01:09.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""So if you run the just executable""" start="00:01:10.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""without any arguments,""" start="00:01:12.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by default it is going to run""" start="00:01:14.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the first recipe.""" start="00:01:15.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""This recipe's definition""" start="00:01:17.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""calls the just command""" start="00:01:18.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in turn, with the two arguments,""" start="00:01:20.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""namely --list and --unsorted,""" start="00:01:21.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which basically asks just""" start="00:01:24.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to list down all the recipes""" start="00:01:25.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in an unsorted order.""" start="00:01:27.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Each line of each recipe is executed""" start="00:01:29.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by a fresh shell.""" start="00:01:32.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""That pretty much""" start="00:01:33.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is the high level overview""" start="00:01:35.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""of getting started to use this tool.""" start="00:01:36.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""This tool assumes the presence of a shell""" start="00:01:38.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which is bash in most GNU/Linux systems,""" start="00:01:40.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but you can configure it""" start="00:01:43.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to explicitly use any specific shell""" start="00:01:44.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you have in mind.""" start="00:01:47.160" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Let me in fact go and try executing""" start="00:01:48.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the first recipe.""" start="00:01:50.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I will first execute it""" start="00:01:52.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""without any arguments,""" start="00:01:53.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which will force it to run the first recipe.""" start="00:01:55.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see, it listed all the recipes.""" start="00:01:59.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Now I can actually execute""" start="00:02:01.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a particular recipe""" start="00:02:03.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by passing an explicit recipe name.""" start="00:02:04.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me execute the hello recipe now""" start="00:02:06.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which will basically print &quot;hello world&quot;.""" start="00:02:08.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""It works as expected.""" start="00:02:11.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see, that's all that's required""" start="00:02:15.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to get started with this tool.""" start="00:02:17.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You create a file named justfile""" start="00:02:18.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in a directory, define some recipes""" start="00:02:20.349" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and then run them""" start="00:02:22.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""via the just executable.""" start="00:02:23.640" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Note that there are""" start="00:02:27.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""various other features in justfile.""" start="00:02:28.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can define variables,""" start="00:02:30.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""mark some variables""" start="00:02:32.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to be exported as environment variables,""" start="00:02:33.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""have optional parameters""" start="00:02:35.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""that can be passed to a recipe.""" start="00:02:37.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can also set up dependency""" start="00:02:38.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""between recipes""" start="00:02:40.960" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and also write scripts within a recipe""" start="00:02:42.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in a language of your choice.""" start="00:02:44.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I won't be going into the details,""" start="00:02:46.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but I encourage you to go through""" start="00:02:48.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the very helpful manual page""" start="00:02:50.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to learn more about it.""" start="00:02:51.640" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Also, let me compare it with Makefiles.""" start="00:02:56.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I do think it's kind of unfair""" start="00:02:59.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to compare both the tools""" start="00:03:00.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""since make is a build automation tool""" start="00:03:02.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""whereas just's goal is a task runner,""" start="00:03:04.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and since just doesn't try to be""" start="00:03:07.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a build system,""" start="00:03:09.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it can avoid the associated complexity""" start="00:03:10.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""that comes with the tool like make.""" start="00:03:12.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""There is one nice historical fact""" start="00:03:15.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""about just.""" start="00:03:17.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""The initial version of just""" start="00:03:18.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""relied on make command being available,""" start="00:03:19.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""so it was basically""" start="00:03:21.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a glorified wrapper around it.""" start="00:03:23.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""But it was removed,""" start="00:03:25.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and justfile doesn't have""" start="00:03:26.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""that dependency anymore.""" start="00:03:27.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""If you are using make as a task runner""" start="00:03:29.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""then you would have to use""" start="00:03:31.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""something called phony targets.""" start="00:03:33.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I don't want to go into the details,""" start="00:03:35.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but makefiles have good reason""" start="00:03:37.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""for why they need something like that.""" start="00:03:39.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Since justfile is not a build system,""" start="00:03:41.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it doesn't have to deal with them.""" start="00:03:44.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""The error message""" start="00:03:45.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and user experience of this tool,""" start="00:03:47.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in my opinion, is better.""" start="00:03:48.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""To show you a concrete example,""" start="00:03:50.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""justfile errors out by default""" start="00:03:52.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""if you have duplicate recipes.""" start="00:03:54.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""This is in contrast with make""" start="00:03:56.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""where I believe it prints out""" start="00:03:58.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a warning about it,""" start="00:04:00.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but still executes the target action.""" start="00:04:01.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Justfile also gives you the ability""" start="00:04:03.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to easily create scripts""" start="00:04:06.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""written in any language within a recipe.""" start="00:04:08.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""My personal opinion is that""" start="00:04:10.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""if you are using makefile""" start="00:04:12.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""as a task runner,""" start="00:04:14.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you might want to check out justfile""" start="00:04:15.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to see if it will suit your workflow.""" start="00:04:17.440" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""With that, I'll move on to justl.el,""" start="00:04:19.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which is basically an Emacs package""" start="00:04:25.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""for driving justfiles.""" start="00:04:26.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I started writing this tool""" start="00:04:28.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""around a year ago""" start="00:04:29.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""when my usage of justfile increased.""" start="00:04:31.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""The objective of the tool""" start="00:04:33.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is to reduce the usage of the CLI""" start="00:04:35.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and drive the execution of the recipes""" start="00:04:37.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""natively within the editor.""" start="00:04:40.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me take you back to the justfile""" start="00:04:41.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which we saw previously.""" start="00:04:44.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""This time we will drive it""" start="00:04:45.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""within the editor itself,""" start="00:04:47.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""instead of executing commands via vterm""" start="00:04:48.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""as done previously.""" start="00:04:51.400" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""So the idea is you either""" start="00:04:52.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""open the justfile,""" start="00:04:54.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""or any other file in the directory.""" start="00:04:56.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""That doesn't matter, actually.""" start="00:04:57.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Once you do that,""" start="00:04:59.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you call the justl command.""" start="00:05:00.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Now as you can see, it lists down""" start="00:05:02.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""all the recipes,""" start="00:05:06.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""along with the description if present.""" start="00:05:07.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can move on to different recipes""" start="00:05:09.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by your usual keybinding.""" start="00:05:11.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""And for executing a specific recipe,""" start="00:05:13.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you have to press the e keybinding,""" start="00:05:15.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and that will run the recipe""" start="00:05:18.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and show its output""" start="00:05:19.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""on a special buffer named *just*""" start="00:05:21.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which is built on top of""" start="00:05:23.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the compilation mode available in Emacs.""" start="00:05:25.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me actually try""" start="00:05:27.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""executing the hello recipe""" start="00:05:28.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which we previously executed in vterm.""" start="00:05:30.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see,""" start="00:05:32.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it executed the recipe""" start="00:05:38.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and the &quot;hello world&quot; output""" start="00:05:39.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is visible in the just buffer.""" start="00:05:41.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can also see that there is""" start="00:05:42.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""other metadata like""" start="00:05:44.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""when it started executing""" start="00:05:45.880" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and when did it finish executing.""" start="00:05:47.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""If a recipe execution fails,""" start="00:05:49.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it will also change the color""" start="00:05:51.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and print the corresponding exit code.""" start="00:05:53.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me actually show you""" start="00:05:55.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by modifying the hello recipe""" start="00:05:57.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and making it exit.""" start="00:05:59.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see,""" start="00:06:03.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it clearly indicates the error message now.""" start="00:06:08.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""That is a pretty much""" start="00:06:10.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a good high level overview""" start="00:06:12.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""of how to execute recipes""" start="00:06:14.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""using this Emacs extension.""" start="00:06:15.680" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""If I press the h or the ? key,""" start="00:06:17.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it will display the various ways""" start="00:06:21.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to drive it.""" start="00:06:23.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Now as you can see,""" start="00:06:24.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""you can pass various options to it.""" start="00:06:27.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I find the dry run option effective""" start="00:06:29.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""whenever I have to print the recipe contents""" start="00:06:31.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""without actually executing the recipe.""" start="00:06:34.560" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""There are also various ways to execute it.""" start="00:06:36.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can use Emacs's eshell to execute it""" start="00:06:39.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by pressing the E keybinding.""" start="00:06:42.960" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me try executing the hello recipe again,""" start="00:06:45.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but this time via Emacs's eshell.""" start="00:06:48.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see now I have an eshell instance""" start="00:06:50.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""where it executed the just hello recipe.""" start="00:06:54.840" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""You can also directly""" start="00:06:57.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""go to the recipe line""" start="00:07:02.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by pressing the return key.""" start="00:07:03.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""So let's say if I want to""" start="00:07:05.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""go to the recipe build app""" start="00:07:08.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""all I have to do is press the return key""" start="00:07:09.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and it will go to the just file""" start="00:07:12.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""with the proper line.""" start="00:07:14.400" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""You can also re-execute the same recipe""" start="00:07:15.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""from the output just buffer.""" start="00:07:19.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I find this very helpful""" start="00:07:21.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""when iterating on certain things.""" start="00:07:23.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""In my day job,""" start="00:07:25.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I often have to work with a Kubernetes cluster,""" start="00:07:26.720" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and I would have to write""" start="00:07:29.240" video="mainVideo-justl" id="subtitle"]]
[[!template text="""resource manifest files for applications.""" start="00:07:30.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Having the ability to run the recipes""" start="00:07:33.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""while iterating on the project""" start="00:07:36.377" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is very useful, in my opinion.""" start="00:07:37.943" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Let me actually show you""" start="00:07:39.560" video="mainVideo-justl" id="subtitle"]]
[[!template text="""an example of what I am talking about.""" start="00:07:42.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me run the build app recipe now,""" start="00:07:43.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which will basically build the manifest""" start="00:07:46.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and print it out.""" start="00:07:48.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Now let me open one of the application files.""" start="00:07:49.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I will open the ingress.yaml file.""" start="00:07:58.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""So I have this YAML file which I am working on,""" start="00:07:59.960" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and I also have this output buffer""" start="00:08:06.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which is basically the output""" start="00:08:08.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""of the build app recipe.""" start="00:08:10.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Now I can basically go through this buffer""" start="00:08:11.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and see if everything is alright,""" start="00:08:14.200" video="mainVideo-justl" id="subtitle"]]
[[!template text="""but I find out that I didn't want""" start="00:08:18.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the hostname to be emacs2022.""" start="00:08:21.760" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I wanted it to be just emacs.""" start="00:08:23.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I can go and fix it in my YAML file,""" start="00:08:25.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and then I can go on""" start="00:08:29.000" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to the output buffer""" start="00:08:34.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and basically just re-run the command""" start="00:08:36.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""by pressing the g key binding.""" start="00:08:38.520" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see,""" start="00:08:40.080" video="mainVideo-justl" id="subtitle"]]
[[!template text="""it executed the same recipe again,""" start="00:08:42.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and I can see that""" start="00:08:48.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the hostname is indeed emacs.""" start="00:08:49.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I find this kind of workflow very convenient""" start="00:08:51.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""while I am working on a project.""" start="00:08:55.000" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""Another way of interacting""" start="00:08:56.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""with the justl extension""" start="00:08:59.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is by using the interactive function""" start="00:09:00.440" video="mainVideo-justl" id="subtitle"]]
[[!template text="""justl-exec-recipe-in-dir.""" start="00:09:02.400" video="mainVideo-justl" id="subtitle"]]
[[!template text="""The use case of this function""" start="00:09:04.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""is executing a one-off recipe""" start="00:09:06.040" video="mainVideo-justl" id="subtitle"]]
[[!template text="""while you are working on something else.""" start="00:09:07.840" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Let me show you an example of it.""" start="00:09:09.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""As you can see, it shows me""" start="00:09:11.960" video="mainVideo-justl" id="subtitle"]]
[[!template text="""a drop down of various recipes""" start="00:09:19.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""available in the justfile.""" start="00:09:21.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""You can choose any particular one""" start="00:09:22.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and execute the corresponding recipe.""" start="00:09:24.880" video="mainVideo-justl" id="subtitle"]]
[[!template text="""In this case, I will choose""" start="00:09:26.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""the build-app recipe,""" start="00:09:28.360" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and we will get the output""" start="00:09:29.640" video="mainVideo-justl" id="subtitle"]]
[[!template text="""in the *just* buffer""" start="00:09:31.320" video="mainVideo-justl" id="subtitle"]]
[[!template text="""which should be similar""" start="00:09:32.280" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to what we saw previously.""" start="00:09:33.200" video="mainVideo-justl" id="subtitle"]]
[[!template new="1" text="""So this was a quick introduction""" start="00:09:34.680" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to what justfile is""" start="00:09:43.920" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and how to drive them within Emacs.""" start="00:09:45.120" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Hopefully it was helpful""" start="00:09:46.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""and it would encourage you""" start="00:09:48.600" video="mainVideo-justl" id="subtitle"]]
[[!template text="""to use justfiles in your workflow.""" start="00:09:50.160" video="mainVideo-justl" id="subtitle"]]
[[!template text="""Thank you for allowing me to present.""" start="00:09:51.480" video="mainVideo-justl" id="subtitle"]]
[[!template text="""I am available in IRC""" start="00:09:53.800" video="mainVideo-justl" id="subtitle"]]
[[!template text="""if you have any questions.""" start="00:09:55.480" video="mainVideo-justl" id="subtitle"]]



Captioner: sachac

Questions or comments? Please e-mail [psibi2000@gmail.com](mailto:psibi2000@gmail.com?subject=Comment%20for%20EmacsConf%202022%20justl%3A%20justl%3A%20Driving%20recipes%20within%20Emacs)


<!-- End of emacsconf-publish-after-page -->