blob: 49db09890624be3e6e6f4fb8709eb3d174656902 (
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
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
|
WEBVTT
00:00:00.880 --> 00:00:03.760
hello and welcome to the stock
00:00:03.760 --> 00:00:06.080
the title of the stock is a tour feature
00:00:06.080 --> 00:00:07.919
a fast and fully featured terminal
00:00:07.919 --> 00:00:08.559
emulator
00:00:08.559 --> 00:00:11.840
inside new e-max so let's try to
00:00:11.840 --> 00:00:13.360
understand what we mean with the pass
00:00:13.360 --> 00:00:14.559
and fully featured
00:00:14.559 --> 00:00:17.520
and to do that we'll compare v term with
00:00:17.520 --> 00:00:18.320
the
00:00:18.320 --> 00:00:20.640
packages which are built in Emacs mean
00:00:20.640 --> 00:00:22.400
the term
00:00:22.400 --> 00:00:25.199
so let's let's jump into the v term so
00:00:25.199 --> 00:00:26.720
this is a feature buffer
00:00:26.720 --> 00:00:29.679
and this is a ansi term buffer what I'm
00:00:29.679 --> 00:00:31.519
going to do now is first I'm going to
00:00:31.519 --> 00:00:32.160
prove you
00:00:32.160 --> 00:00:35.760
what we move fast so to do that let me
00:00:35.760 --> 00:00:37.520
open a large file display on screen or
00:00:37.520 --> 00:00:39.280
large file this is about one megabyte of
00:00:39.280 --> 00:00:40.239
data
00:00:40.239 --> 00:00:43.520
and let me time that it takes about 0.6
00:00:43.520 --> 00:00:44.160
seconds
00:00:44.160 --> 00:00:47.200
with feature let's do the same with
00:00:47.200 --> 00:00:49.760
with ancient term well we already
00:00:49.760 --> 00:00:51.520
already see the difference
00:00:51.520 --> 00:00:53.039
so I will use this time to tell you
00:00:53.039 --> 00:00:54.559
what's different and
00:00:54.559 --> 00:00:57.360
what is v term exactly so v term is a
00:00:57.360 --> 00:00:58.879
terminal emulator built
00:00:58.879 --> 00:01:01.120
on top of an external library the
00:01:01.120 --> 00:01:02.719
library is called libvi term
00:01:02.719 --> 00:01:05.519
and is the same library used by newton
00:01:05.519 --> 00:01:07.200
for their own terminal emulator
00:01:07.200 --> 00:01:10.000
it's a c library and this is what gives
00:01:10.000 --> 00:01:10.799
us
00:01:10.799 --> 00:01:15.119
a lot of good features first the speed
00:01:15.119 --> 00:01:17.280
time spent here 0.6 is essentially the
00:01:17.280 --> 00:01:18.479
time that it takes to
00:01:18.479 --> 00:01:21.520
one convert the emax representation of
00:01:21.520 --> 00:01:22.240
like text
00:01:22.240 --> 00:01:23.840
into the visa and representation of what
00:01:23.840 --> 00:01:26.400
was a string and two into
00:01:26.400 --> 00:01:28.479
actually displaying that and that can
00:01:28.479 --> 00:01:29.520
take time
00:01:29.520 --> 00:01:31.840
if there's a if there's quantification
00:01:31.840 --> 00:01:33.680
involved so these are the 0.6 seconds
00:01:33.680 --> 00:01:34.240
there
00:01:34.240 --> 00:01:36.960
as we say in the in ancestor that's much
00:01:36.960 --> 00:01:37.920
much
00:01:37.920 --> 00:01:39.920
more time it's much slower so the
00:01:39.920 --> 00:01:41.680
terminal will feel much snappier much
00:01:41.680 --> 00:01:42.880
faster
00:01:42.880 --> 00:01:46.079
but that's not the main benefit or the
00:01:46.079 --> 00:01:47.840
only benefit of using this external
00:01:47.840 --> 00:01:48.799
library
00:01:48.799 --> 00:01:52.320
feature the second big benefit
00:01:52.320 --> 00:01:55.439
is that v term has support for all the
00:01:55.439 --> 00:01:56.560
escape codes
00:01:56.560 --> 00:01:59.200
that exterm has support for so v term is
00:01:59.200 --> 00:02:01.119
essentially as running x term
00:02:01.119 --> 00:02:03.600
inside an imax buffer so let's see that
00:02:03.600 --> 00:02:04.799
this for example
00:02:04.799 --> 00:02:07.119
let's start by looking at the support
00:02:07.119 --> 00:02:08.239
for colors
00:02:08.239 --> 00:02:09.920
we have support for all the colors out
00:02:09.920 --> 00:02:11.840
of the box we don't have to do anything
00:02:11.840 --> 00:02:15.040
and if we did the same here well we have
00:02:15.040 --> 00:02:15.680
only
00:02:15.680 --> 00:02:17.920
20 colors there's a way to get all the
00:02:17.920 --> 00:02:19.680
colors but it's much more involved
00:02:19.680 --> 00:02:23.040
but this is not where v term shines
00:02:23.040 --> 00:02:26.000
uh we can run all the commands that we
00:02:26.000 --> 00:02:27.200
want
00:02:27.200 --> 00:02:30.480
h top and cdu
00:02:30.480 --> 00:02:33.040
everything runs here also this title
00:02:33.040 --> 00:02:33.840
it's a
00:02:33.840 --> 00:02:36.400
it's a fairly complicated manipulation
00:02:36.400 --> 00:02:37.040
of
00:02:37.040 --> 00:02:40.879
the window and it will not work here
00:02:40.879 --> 00:02:42.319
it just doesn't work actually now the
00:02:42.319 --> 00:02:44.640
terminal is probably messed up
00:02:44.640 --> 00:02:48.400
yes so using this external library
00:02:48.400 --> 00:02:50.959
removes the burden from the developers
00:02:50.959 --> 00:02:52.000
of having to implement
00:02:52.000 --> 00:02:54.000
support for all these cape codes we just
00:02:54.000 --> 00:02:55.360
use those
00:02:55.360 --> 00:02:58.480
so in many ways running veteran
00:02:58.480 --> 00:03:01.760
is us running extern inside a max
00:03:01.760 --> 00:03:04.400
but it's better than that because since
00:03:04.400 --> 00:03:05.840
this is an e-max buffer
00:03:05.840 --> 00:03:08.879
we can enjoy a lot of features from
00:03:08.879 --> 00:03:09.760
Emacs
00:03:09.760 --> 00:03:11.920
as well as a tighter integration with
00:03:11.920 --> 00:03:13.200
e-max itself
00:03:13.200 --> 00:03:16.560
for example as you see here the title of
00:03:16.560 --> 00:03:17.599
my buffer
00:03:17.599 --> 00:03:20.720
is from the director I'm in so let's go
00:03:20.720 --> 00:03:21.760
to my tmp
00:03:21.760 --> 00:03:24.799
the title will change so there's
00:03:24.799 --> 00:03:26.560
information being exchanged between v
00:03:26.560 --> 00:03:28.000
term and index
00:03:28.000 --> 00:03:29.760
and of course the title is not the only
00:03:29.760 --> 00:03:32.000
place where information is exchanged
00:03:32.000 --> 00:03:34.799
I can find a file and I will be in the
00:03:34.799 --> 00:03:35.920
directory
00:03:35.920 --> 00:03:38.239
where my terminal is this feature is
00:03:38.239 --> 00:03:40.000
also available in nc term
00:03:40.000 --> 00:03:41.680
and it works also on b term and it
00:03:41.680 --> 00:03:43.840
follows me so if I go to tmp I'll get
00:03:43.840 --> 00:03:44.720
the tmp
00:03:44.720 --> 00:03:48.000
if I ssh to a remote server it will work
00:03:48.000 --> 00:03:48.640
also
00:03:48.640 --> 00:03:51.120
on remote servers as well which is a
00:03:51.120 --> 00:03:53.920
very nice way to edit files remotely
00:03:53.920 --> 00:03:55.760
while we're working on a shelf and
00:03:55.760 --> 00:03:57.360
second while vterm
00:03:57.360 --> 00:03:59.599
is not an e-lisp interpreter like
00:03:59.599 --> 00:04:02.159
initial what we can do is we can
00:04:02.159 --> 00:04:06.080
still run inbox functions so for example
00:04:06.080 --> 00:04:08.319
that requires some configuration the
00:04:08.319 --> 00:04:10.159
term
00:04:10.159 --> 00:04:12.480
command message I as you see there's a
00:04:12.480 --> 00:04:14.000
higher so what I'm doing
00:04:14.000 --> 00:04:16.239
is I'm executing the eagles function I
00:04:16.239 --> 00:04:17.199
and I can drop that
00:04:17.199 --> 00:04:19.840
and turn it around uh hash function to
00:04:19.840 --> 00:04:20.320
run
00:04:20.320 --> 00:04:24.880
a-list functions or another one file see
00:04:24.880 --> 00:04:27.600
we call this feature message passing and
00:04:27.600 --> 00:04:28.800
it requires
00:04:28.800 --> 00:04:30.880
some configuration on the emac side as
00:04:30.880 --> 00:04:32.000
well as in the shell side
00:04:32.000 --> 00:04:34.000
it's important to stress what's the
00:04:34.000 --> 00:04:35.360
nature of feature
00:04:35.360 --> 00:04:37.360
for instance every time I'm sending a
00:04:37.360 --> 00:04:39.120
key binding it's not immediately clear
00:04:39.120 --> 00:04:40.800
if my intention is to send it to the
00:04:40.800 --> 00:04:42.720
shell or to imax so v term implements
00:04:42.720 --> 00:04:44.320
some reasonable defaults
00:04:44.320 --> 00:04:46.800
but at the moment it's mainly packaged
00:04:46.800 --> 00:04:49.120
to display characters on a screen
00:04:49.120 --> 00:04:51.199
so for example if you're using evil the
00:04:51.199 --> 00:04:53.600
editing commands in evil will not work
00:04:53.600 --> 00:04:55.759
immediately there's some work to be done
00:04:55.759 --> 00:04:57.840
and integration can be improved on that
00:04:57.840 --> 00:04:58.479
side but
00:04:58.479 --> 00:05:00.240
sometimes we really want this to behave
00:05:00.240 --> 00:05:02.240
exactly like a imax buffer
00:05:02.240 --> 00:05:05.440
we want to be able to search if
00:05:05.440 --> 00:05:07.039
if I try to get it to search it will not
00:05:07.039 --> 00:05:08.880
work I will send it to the shop so to do
00:05:08.880 --> 00:05:09.360
that
00:05:09.360 --> 00:05:12.400
we enabled the term copy mode so as you
00:05:12.400 --> 00:05:12.800
see
00:05:12.800 --> 00:05:15.280
copy mode and now this buffer is
00:05:15.280 --> 00:05:17.039
essentially a fundamental buffer
00:05:17.039 --> 00:05:21.120
I can move around as I can search
00:05:21.120 --> 00:05:24.400
uh so it must have I
00:05:24.400 --> 00:05:25.840
can do everything I want and there are
00:05:25.840 --> 00:05:27.120
additional features for example I can
00:05:27.120 --> 00:05:29.600
jump around
00:05:29.600 --> 00:05:31.440
all the prompts and I find this
00:05:31.440 --> 00:05:32.639
extremely useful
00:05:32.639 --> 00:05:34.400
because I can copy update from my
00:05:34.400 --> 00:05:35.919
programs or
00:05:35.919 --> 00:05:39.199
what I always have to do is I have to
00:05:39.199 --> 00:05:42.400
google some errors so what I do is I
00:05:42.400 --> 00:05:43.120
select that
00:05:43.120 --> 00:05:45.919
and I have my keybinding in maksakov and
00:05:45.919 --> 00:05:46.880
I'm googling
00:05:46.880 --> 00:05:49.199
what I have to google so this is very
00:05:49.199 --> 00:05:50.400
nice and
00:05:50.400 --> 00:05:52.800
if I now that have selected something if
00:05:52.800 --> 00:05:54.400
I just press return I will
00:05:54.400 --> 00:05:57.120
go back to my normal editing mode with
00:05:57.120 --> 00:05:57.440
the
00:05:57.440 --> 00:06:00.400
text copied so I can paste it back so
00:06:00.400 --> 00:06:01.600
it's a quick way to
00:06:01.600 --> 00:06:04.160
interact with copy and interact with uh
00:06:04.160 --> 00:06:06.400
with the output of a buffer so finally
00:06:06.400 --> 00:06:07.840
let's discuss how to actually
00:06:07.840 --> 00:06:10.560
use beta let's circle back and let's go
00:06:10.560 --> 00:06:12.400
and let's look at the github repo
00:06:12.400 --> 00:06:14.400
where development is happening v term is
00:06:14.400 --> 00:06:15.520
available in velpa
00:06:15.520 --> 00:06:17.919
but since it's leveraging the power of
00:06:17.919 --> 00:06:18.960
an external module
00:06:18.960 --> 00:06:20.639
you must have Emacs compiled with
00:06:20.639 --> 00:06:22.000
support for modules
00:06:22.000 --> 00:06:25.600
and many distros like ubuntu debian
00:06:25.600 --> 00:06:27.199
that's not there so you have to get
00:06:27.199 --> 00:06:29.840
Emacs with support for modules compiling
00:06:29.840 --> 00:06:30.160
or
00:06:30.160 --> 00:06:32.000
getting images somewhere else and also
00:06:32.000 --> 00:06:33.840
the first time you are going to use this
00:06:33.840 --> 00:06:34.400
which
00:06:34.400 --> 00:06:37.440
works only on mac or
00:06:37.440 --> 00:06:40.319
new linux systems Emacs will try to find
00:06:40.319 --> 00:06:41.759
and compile this module
00:06:41.759 --> 00:06:43.680
so it's important this requirement is
00:06:43.680 --> 00:06:45.440
important if you're using windows
00:06:45.440 --> 00:06:47.600
well that's not it's not available and
00:06:47.600 --> 00:06:49.199
will not work
00:06:49.199 --> 00:06:52.560
so to conclude I want to just advertise
00:06:52.560 --> 00:06:53.440
this page
00:06:53.440 --> 00:06:56.240
if you have problems look at the issues
00:06:56.240 --> 00:06:57.120
and
00:06:57.120 --> 00:06:59.039
open unusual in case we'll try to help
00:06:59.039 --> 00:07:00.800
you we are very excited about feature
00:07:00.800 --> 00:07:02.639
and I think it's a transformative
00:07:02.639 --> 00:07:10.319
terminal experience inside glue imax
|