rabbit-slide-aycabta-rubykaigi-2019 2019.04.18.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 78e5f8e7f004a212c064c54354e34933258f6c7e58b2a6a27eb0bb9d8c9b5c55
4
+ data.tar.gz: 3f804ce8fbe9d7d7d31a3bcfba21ef2702cc1e75449c4fc9011acd882027e9ee
5
+ SHA512:
6
+ metadata.gz: a4fa190b98829792aad386627abf31615eb03f85a1008fd44f3f643197ad7e60e009be3f554be0228d0eb5e7bb1c714542bd4dcb2c9839bc5969a1fddeb0de7f
7
+ data.tar.gz: 5e35505a8a021adbbeaa0ff66d8218fae43e2e6ac803ebfea74eb3eab7ed2d8c849132d84314dfd5bab6cdbe0a5a77422c1f25bc54d78f8486654602d8b9ec3d
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size=1920,1080 terminal_editors.rab
Binary file
@@ -0,0 +1,6 @@
1
+ = IRB Reboot: Modernize Implementation and Features
2
+
3
+ == License
4
+
5
+ CC BY-SA 4.0
6
+
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,16 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ end
11
+
12
+ desc "Tag #{spec.version}"
13
+ task :tag do
14
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
15
+ sh("git", "push", "--tags")
16
+ end
Binary file
@@ -0,0 +1,86 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+ <svg
4
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+ xmlns:cc="http://creativecommons.org/ns#"
6
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+ xmlns:svg="http://www.w3.org/2000/svg"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ xmlns:xlink="http://www.w3.org/1999/xlink"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.0"
13
+ x="0.0000000"
14
+ y="0.0000000"
15
+ width="525.00000"
16
+ height="600.00000"
17
+ id="svg2"
18
+ sodipodi:version="0.32"
19
+ inkscape:version="0.46"
20
+ sodipodi:docname="X_mark.svg"
21
+ sodipodi:docbase="/home/fizyk/anizo/wiki/SVG/niemoje"
22
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
23
+ <metadata
24
+ id="metadata2297">
25
+ <rdf:RDF>
26
+ <cc:Work
27
+ rdf:about="">
28
+ <dc:format>image/svg+xml</dc:format>
29
+ <dc:type
30
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
31
+ </cc:Work>
32
+ </rdf:RDF>
33
+ </metadata>
34
+ <sodipodi:namedview
35
+ inkscape:window-height="667"
36
+ inkscape:window-width="790"
37
+ inkscape:pageshadow="2"
38
+ inkscape:pageopacity="0.0"
39
+ borderopacity="1.0"
40
+ bordercolor="#666666"
41
+ pagecolor="#ffffff"
42
+ id="base"
43
+ inkscape:zoom="0.62333333"
44
+ inkscape:cx="262.5"
45
+ inkscape:cy="364.17112"
46
+ inkscape:window-x="69"
47
+ inkscape:window-y="69"
48
+ inkscape:current-layer="svg2"
49
+ showgrid="false" />
50
+ <defs
51
+ id="defs5">
52
+ <inkscape:perspective
53
+ sodipodi:type="inkscape:persp3d"
54
+ inkscape:vp_x="0 : 300 : 1"
55
+ inkscape:vp_y="0 : 1000 : 0"
56
+ inkscape:vp_z="525 : 300 : 1"
57
+ inkscape:persp3d-origin="262.5 : 200 : 1"
58
+ id="perspective11" />
59
+ <linearGradient
60
+ id="linearGradient2299">
61
+ <stop
62
+ style="stop-color:#ff0000;stop-opacity:1;"
63
+ offset="0"
64
+ id="stop2301" />
65
+ <stop
66
+ style="stop-color:#c70000;stop-opacity:1;"
67
+ offset="1"
68
+ id="stop2303" />
69
+ </linearGradient>
70
+ <radialGradient
71
+ inkscape:collect="always"
72
+ xlink:href="#linearGradient2299"
73
+ id="radialGradient2305"
74
+ cx="262.5"
75
+ cy="300"
76
+ fx="262.5"
77
+ fy="300"
78
+ r="246.9456"
79
+ gradientTransform="matrix(1,0,0,1.200021,0,-60.00638)"
80
+ gradientUnits="userSpaceOnUse" />
81
+ </defs>
82
+ <path
83
+ d="M 15.554399,499.23617 C 15.554399,489.88388 49.262003,442.92493 90.460178,394.88295 C 131.65835,346.84096 171.36188,300.19332 178.69024,291.22150 C 186.01860,282.24967 178.40699,230.17136 161.77557,175.49190 C 127.32187,62.217924 124.18126,24.551078 147.96473,9.8520875 C 180.47155,-10.238240 225.08409,19.441293 262.53181,86.070496 L 300.46929,153.57113 L 371.71241,83.651323 C 418.55713,37.676699 451.99662,17.200896 469.35551,23.862122 C 503.70070,37.041618 523.52158,88.613119 497.56689,97.264679 C 468.10720,107.08456 346.17818,292.63354 346.40950,327.29275 C 346.51902,343.70450 363.84370,387.26650 384.90880,424.09720 C 399.76671,450.07512 419.73824,470.57451 411.81016,484.66521 L 369.43018,559.98778 C 361.21065,574.59648 330.85012,535.64770 294.88494,497.84045 L 232.14649,431.88864 L 162.59445,514.37325 C 124.34083,559.73979 88.627185,596.62407 83.230792,596.33832 C 77.834411,596.05256 15.554399,508.58848 15.554399,499.23617 z "
84
+ style="fill:url(#radialGradient2305);fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
85
+ id="X" />
86
+ </svg>
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: rubykaigi-2019
3
+ base_name: terminal_editors
4
+ tags:
5
+ - rabbit
6
+ - rubykaigi
7
+ presentation_date: 2019-04-18
8
+ version: 2019.04.18.0
9
+ licenses:
10
+ - CC-BY-SA-4.0
11
+ author:
12
+ markup_language: :rd
13
+ name: ITOYANAGI Sakura
14
+ email: aycabta@gmail.com
15
+ rubygems_user: aycabta
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,8 @@
1
+ # Terminal Editor For Ruby Core Tool Chain
2
+
3
+ ## Abstract
4
+
5
+ ## Details
6
+
7
+ ## Pitch
8
+
Binary file
Binary file
@@ -0,0 +1,1108 @@
1
+ = Terminal Editors\nFor\nRuby Core Toolchain
2
+
3
+ :author
4
+ ITOYANAGI Sakura
5
+ :theme
6
+ .
7
+ : content-source
8
+ RubyKaigi 2019 Fukuoka
9
+ :allotted-time
10
+ 40m
11
+ : start-time
12
+ 2019-04-18T13:30:00+09:00
13
+ : end-time
14
+ 2019-04-18T14:10:00+09:00
15
+
16
+ = Greeting
17
+
18
+ Hello, everyone!
19
+
20
+ = Greeting
21
+
22
+ Welcome to Fukuoka, Japan!
23
+
24
+ = Let me introduce myself
25
+
26
+ I'm
27
+
28
+ * a RDoc maintainer
29
+ * a Ruby committer
30
+ * a member of Ruby core team
31
+
32
+ = Let me introduce myself
33
+
34
+ I'm so tired because this is first session just after keynote.
35
+
36
+ = Let me introduce myself
37
+
38
+ # image
39
+ # src = japan.png
40
+ # relative-height = 80
41
+ # caption = Dark green area is Kyushu
42
+ # relative-padding-top = 0
43
+ # relative-padding-bottom = 0
44
+ # relative-padding-right = 0
45
+ # relative-padding-left = 0
46
+
47
+ = Let me introduce myself
48
+
49
+ # image
50
+ # src = japan_fukuoka.png
51
+ # relative-height = 80
52
+ # caption = RubyKaigi venue is Fukuoka
53
+ # relative-padding-top = 0
54
+ # relative-padding-bottom = 0
55
+ # relative-padding-right = 0
56
+ # relative-padding-left = 0
57
+
58
+ = Let me introduce myself
59
+
60
+ # image
61
+ # src = japan_fukuoka_nagasaki.png
62
+ # relative-height = 80
63
+ # caption = I was born at Nagasaki
64
+ # relative-padding-top = 0
65
+ # relative-padding-bottom = 0
66
+ # relative-padding-right = 0
67
+ # relative-padding-left = 0
68
+
69
+ = Let me introduce myself
70
+
71
+ # image
72
+ # src = japan_fukuoka_nagasaki.png
73
+ # relative-height = 80
74
+ # caption = How strange shape the arrows are
75
+ # relative-padding-top = 0
76
+ # relative-padding-bottom = 0
77
+ # relative-padding-right = 0
78
+ # relative-padding-left = 0
79
+
80
+ = Let me introduce myself
81
+
82
+ # image
83
+ # src = japan_fukuoka_nagasaki.png
84
+ # relative-height = 80
85
+ # caption = Both are almost the same culture area
86
+ # relative-padding-top = 0
87
+ # relative-padding-bottom = 0
88
+ # relative-padding-right = 0
89
+ # relative-padding-left = 0
90
+
91
+ = Let me introduce myself
92
+
93
+ # image
94
+ # src = setchan.jpg
95
+ # relative-height = 80
96
+ # relative-padding-top = 0
97
+ # relative-padding-bottom = 0
98
+ # relative-padding-right = 0
99
+ # relative-padding-left = 0
100
+
101
+   Both eat ((*tonkotsu*)) ramen
102
+
103
+ = Let me introduce myself
104
+
105
+ # image
106
+ # src = blackmontblanc.jpg
107
+ # relative-height = 80
108
+ # caption = Black Mont Blanc
109
+ # relative-padding-top = 0
110
+ # relative-padding-bottom = 0
111
+ # relative-padding-right = 0
112
+ # relative-padding-left = 0
113
+
114
+ = Let me introduce myself
115
+
116
+ # image
117
+ # src = blackmontblanc.jpg
118
+ # relative-height = 60
119
+ # caption = This is the greatest soul food of Kyushu people
120
+ # relative-padding-top = 0
121
+ # relative-padding-bottom = 0
122
+ # relative-padding-right = 0
123
+ # relative-padding-left = 0
124
+
125
+ = Let me introduce myself
126
+
127
+ # image
128
+ # src = blackmontblanc.jpg
129
+ # relative-height = 40
130
+ # caption = White ice cream is covered black chocolate and crunchy chips in perfect balance
131
+ # relative-padding-top = 0
132
+ # relative-padding-bottom = 0
133
+ # relative-padding-right = 0
134
+ # relative-padding-left = 0
135
+
136
+ = Let me introduce myself
137
+
138
+ # image
139
+ # src = blackmontblanc.jpg
140
+ # relative-height = 20
141
+ # caption = All children in Kyushu are raised on Black Mont Blanc and everyone love it, Black Mont Blanc is nice so Kyushu is nice
142
+ # relative-padding-top = 0
143
+ # relative-padding-bottom = 0
144
+ # relative-padding-right = 0
145
+ # relative-padding-left = 0
146
+
147
+ = Community: Asakusa.rb
148
+
149
+ # image
150
+ # src = asakusarb.jpg
151
+ # relative-height = 70
152
+ # caption = Asakusa.rb is holding every Ruby Tuesday
153
+ # relative-padding-top = 0
154
+ # relative-padding-bottom = 0
155
+ # relative-padding-right = 0
156
+ # relative-padding-left = 0
157
+
158
+ = Community: Asakusa.rb
159
+
160
+ # image
161
+ # src = asakusarb.jpg
162
+ # relative-height = 70
163
+ # caption = Many speakers of RubyKaigi 2019 are from Asakusa.rb
164
+ # relative-padding-top = 0
165
+ # relative-padding-bottom = 0
166
+ # relative-padding-right = 0
167
+ # relative-padding-left = 0
168
+
169
+ = Company:\nSpace Pirates, LLC.
170
+
171
+ # image
172
+ # src = space-pirates-logo.svg
173
+ # relative-height = 70
174
+ # caption = Space Pirates, LLC.
175
+ # relative-padding-top = 0
176
+ # relative-padding-bottom = 0
177
+ # relative-padding-right = 0
178
+ # relative-padding-left = 0
179
+
180
+ = Company:\nSpace Pirates, LLC.
181
+
182
+ # image
183
+ # src = space-pirates-logo.svg
184
+ # relative-height = 70
185
+ # caption = I'm an Elasticsearch specialist in this company
186
+ # relative-padding-top = 0
187
+ # relative-padding-bottom = 0
188
+ # relative-padding-right = 0
189
+ # relative-padding-left = 0
190
+
191
+ = Company:\nSpace Pirates, LLC.
192
+
193
+ # image
194
+ # src = space-pirates-logo.svg
195
+ # relative-height = 70
196
+ # caption = I don't know Elasticsearch but I'm using kind of go with the mood
197
+ # relative-padding-top = 0
198
+ # relative-padding-bottom = 0
199
+ # relative-padding-right = 0
200
+ # relative-padding-left = 0
201
+
202
+ = Hobby: climbing
203
+
204
+ And, my hobby is climbing.
205
+
206
+ = Hobby: climbing
207
+
208
+ I always go climbing when Ruby conferences.
209
+
210
+ = Hobby: climbing
211
+
212
+ # image
213
+ # src = Anatomy_TFCC.jpg
214
+ # relative-height = 80
215
+ # caption = But I got an injured TFCC by hard training
216
+ # relative-padding-top = 0
217
+ # relative-padding-bottom = 0
218
+ # relative-padding-right = 0
219
+ # relative-padding-left = 0
220
+
221
+ = Hobby: climbing
222
+
223
+ # image
224
+ # src = RIMG0301.jpg
225
+ # relative-height = 80
226
+ # caption = Camp in a gorge at last weekend
227
+ # relative-padding-top = 0
228
+ # relative-padding-bottom = 0
229
+ # relative-padding-right = 0
230
+ # relative-padding-left = 0
231
+
232
+ = Hobby: climbing
233
+
234
+ # image
235
+ # src = wrist.png
236
+ # relative-height = 80
237
+ # caption = It's a prosthetic finger for climbing
238
+ # relative-padding-top = 0
239
+ # relative-padding-bottom = 0
240
+ # relative-padding-right = 0
241
+ # relative-padding-left = 0
242
+
243
+ = Hobby: climbing
244
+
245
+ # image
246
+ # src = RIMG0350.jpg
247
+ # relative-height = 80
248
+ # caption = Climbing with prosthetic finger
249
+ # relative-padding-top = 0
250
+ # relative-padding-bottom = 0
251
+ # relative-padding-right = 0
252
+ # relative-padding-left = 0
253
+
254
+ = Hobby: climbing
255
+
256
+ # image
257
+ # src = RIMG0471.jpg
258
+ # relative-height = 80
259
+ # caption = Camp in a gorge at last weekend
260
+ # relative-padding-top = 0
261
+ # relative-padding-bottom = 0
262
+ # relative-padding-right = 0
263
+ # relative-padding-left = 0
264
+
265
+ = Hobby: climbing
266
+
267
+ # image
268
+ # src = RIMG0488.jpg
269
+ # relative-height = 80
270
+ # caption = Camp in a gorge at last weekend
271
+ # relative-padding-top = 0
272
+ # relative-padding-bottom = 0
273
+ # relative-padding-right = 0
274
+ # relative-padding-left = 0
275
+
276
+ = Hobby: climbing
277
+
278
+ This type of injury has so hard problem, it's "I can't turn my humerus".
279
+
280
+ = Hobby: climbing
281
+
282
+ # image
283
+ # src = Richard_Stallman.jpg
284
+ # relative-height = 80
285
+ # caption = It's natural position of humerus
286
+ # relative-padding-top = 0
287
+ # relative-padding-bottom = 0
288
+ # relative-padding-right = 0
289
+ # relative-padding-left = 0
290
+
291
+ = Hobby: climbing
292
+
293
+ # image
294
+ # src = RMS_typing.jpg
295
+ # relative-height = 80
296
+ # caption = It's typing position of humerus
297
+ # relative-padding-top = 0
298
+ # relative-padding-bottom = 0
299
+ # relative-padding-right = 0
300
+ # relative-padding-left = 0
301
+
302
+ = Hobby: climbing
303
+
304
+ "I can't turn my humerus"
305
+
306
+ vs
307
+
308
+ Typing position with turning my humerus
309
+
310
+ = Hobby: climbing
311
+
312
+ I'm still getting over the injury and I've gotten a lot better now.
313
+
314
+ = Hobby: climbing
315
+
316
+ But I couldn't turn my humerus in the early days. It is effectively sentencing a programmer to death.
317
+
318
+ = Hobby: climbing
319
+
320
+ In the severe situation, I felt I had to choose.
321
+
322
+ = Hobby: climbing
323
+
324
+ I should:
325
+
326
+ * (('wait'))make a keyboard
327
+ * (('wait'))make an editor
328
+
329
+ = Hobby: climbing
330
+
331
+ I should:
332
+
333
+ * make a keyboard
334
+ * ((*make an editor*))
335
+
336
+ = Terminal Editors\nFor\nRuby Core Toolchain
337
+
338
+ = Terminal Editors\nFor Ruby Core Toolchain
339
+
340
+ # image
341
+ # src = mannequin.jpg
342
+ # relative-height = 80
343
+ # caption = First, I got...
344
+ # relative-padding-top = 0
345
+ # relative-padding-bottom = 0
346
+ # relative-padding-right = 0
347
+ # relative-padding-left = 0
348
+
349
+ = Terminal Editors\nFor Ruby Core Toolchain
350
+
351
+ # image
352
+ # src = mannequin_1.jpg
353
+ # relative-height = 80
354
+ # caption = TFCC injury
355
+ # relative-padding-top = 0
356
+ # relative-padding-bottom = 0
357
+ # relative-padding-right = 0
358
+ # relative-padding-left = 0
359
+
360
+ = GNU Readline
361
+
362
+ Ruby has one big problem when installing, it's about GNU Readline.
363
+
364
+ = GNU Readline
365
+
366
+ GNU Readline is a line editor software. For example, you always use it on shell.
367
+
368
+ = GNU Readline
369
+
370
+ Ruby has (({readline})) standard library, and it's based on GNU Readline as a native library.
371
+
372
+ = GNU Readline
373
+
374
+ If you build and install Ruby without installing GNU Readline as a linkable files:
375
+
376
+ = GNU Readline
377
+
378
+ * (({readline})) stdlib is nothing
379
+ * Only "input" and "backspace" are available on IRB
380
+ * Pry fails to launch
381
+
382
+ = GNU Readline
383
+
384
+ It's a very sad situation and a hard trap for beginners.
385
+
386
+ = GNU Readline
387
+
388
+ And user including me needs to re-build Ruby, it means I need to type keyboard more.
389
+
390
+ = GNU Readline
391
+
392
+ # image
393
+ # src = mannequin_1.jpg
394
+ # relative-height = 80
395
+ # caption = It's worst case for my wrist
396
+ # relative-padding-top = 0
397
+ # relative-padding-bottom = 0
398
+ # relative-padding-right = 0
399
+ # relative-padding-left = 0
400
+
401
+ = GNU Readline
402
+
403
+ So I started to develop a GNU Readline compatible library by pure Ruby for Ruby core.
404
+
405
+ = GNU Readline
406
+
407
+ I had a plan to explain terminal technologies in this session but now...
408
+
409
+ = GNU Readline
410
+
411
+ # image
412
+ # src = textbringer.png
413
+ # relative-height = 60
414
+ # relative-padding-top = 0
415
+ # relative-padding-bottom = 0
416
+ # relative-padding-right = 0
417
+ # relative-padding-left = 0
418
+
419
+ Now, an unprecedented boom in text editor.
420
+
421
+ = GNU Readline
422
+
423
+ # image
424
+ # src = textbringer.png
425
+ # relative-height = 60
426
+ # relative-padding-top = 0
427
+ # relative-padding-bottom = 0
428
+ # relative-padding-right = 0
429
+ # relative-padding-left = 0
430
+
431
+ You can listen to terminal techniques in this session tomorrow.
432
+
433
+ = GNU Readline
434
+
435
+ I developed ((*Reline*)) what is as a GNU Readline (almost)compatible library by pure Ruby.
436
+
437
+ = GNU Readline
438
+
439
+ Reline's development policies are:
440
+
441
+ * complete developing as soon as possible
442
+ * because GNU Readline has insanely many features
443
+
444
+ = GNU Readline
445
+
446
+ Reline's development policies are:
447
+
448
+ * Windows support by Win32 API
449
+ * because it's best way to support Windows
450
+
451
+ = GNU Readline
452
+
453
+ Therefore Reline uses:
454
+
455
+ * ANSI escape code on Unix like OSs
456
+ * Win32 API on Windows
457
+
458
+ = GNU Readline
459
+
460
+ Therefore Reline uses:
461
+
462
+ * ((*ANSI escape code on Unix like OSs*))
463
+ * Win32 API on Windows
464
+
465
+ = ANSI escape code
466
+
467
+ ANSI escape code is a standard specification to control the cursor location, color, and other options on terminal.
468
+
469
+ = ANSI escape code
470
+
471
+ If a terminal supports ANSI escape code, softwares control unified escape code.
472
+
473
+ = ANSI escape code
474
+
475
+ Example:
476
+
477
+ # enscript ruby
478
+ puts "\e[31mred"
479
+ puts "\e[32mgreen"
480
+ puts "\e[34mblue"
481
+
482
+ = ANSI escape code
483
+
484
+ Example:
485
+
486
+ # enscript ruby
487
+ puts "\e[31m" + "red"
488
+ puts "\e[32m" + "green"
489
+ puts "\e[34m" + "blue"
490
+
491
+ = ANSI escape code
492
+
493
+ Example:
494
+
495
+ # enscript ruby
496
+ puts "\e[31m" + "red"
497
+ puts "\e[32m" + "green"
498
+ puts "\e[34m" + "blue"
499
+ # ^color spec ^text
500
+
501
+ = ANSI escape code
502
+
503
+ # image
504
+ # src = colored-text.png
505
+ # relative-height = 60
506
+ # caption = Output should be like this
507
+ # relative-padding-top = 0
508
+ # relative-padding-bottom = 0
509
+ # relative-padding-right = 0
510
+ # relative-padding-left = 0
511
+
512
+ = ANSI escape code
513
+
514
+ Example:
515
+
516
+ # enscript ruby
517
+ num = 1
518
+ print "\e[#{num}A"
519
+ # Cursor Up
520
+ print "\e[#{num}B"
521
+ # Cursor Down
522
+
523
+ = ANSI escape code
524
+
525
+ Example:
526
+
527
+ # enscript ruby
528
+ print "\e[2K"
529
+ # Erase in Line
530
+
531
+ = ANSI escape code
532
+
533
+ But ANSI escape code has some problems:
534
+
535
+ * (('wait'))there aren't many things to be able do
536
+ * (('wait'))some escape sequences are very slow grievously
537
+
538
+ = ANSI escape code
539
+
540
+ For example,
541
+
542
+ # enscript ruby
543
+ print "\e[6n"
544
+ # Device Status Report
545
+
546
+ is very slow.
547
+
548
+ = ANSI escape code
549
+
550
+ If software uses Device Status Report so many times, it should slower by the by.
551
+
552
+ = ANSI escape code
553
+
554
+ So terminal software with ANSI escape code should be devised within limited operations.
555
+
556
+ = GNU Readline
557
+
558
+ Reline uses:
559
+
560
+ * ANSI escape code on Unix like OSs
561
+ * ((*Win32 API on Windows*))
562
+
563
+ = Win32 API
564
+
565
+ (({Fiddle})) what is for calling functions inside .dll or .so dynamic libraries is only one solution for supporting Win32 API.
566
+
567
+ = Win32 API
568
+
569
+ This is "Console Functions" page URL of Win32 API.
570
+
571
+ ↓↓↓
572
+
573
+ https://docs.microsoft.com/en-us/windows/console/console-functions
574
+
575
+ = Win32 API
576
+
577
+ "Console Functions" is enough to do that the same of ANSI escape code.
578
+
579
+ = Win32 API
580
+
581
+ * (({GetStdHandle()})) for console handle
582
+ * (({SetConsoleCursorPosition()})) is for cursor up and down
583
+ * (({GetConsoleScreenBufferInfo()})) is for cursor position
584
+ * blah blah blah
585
+
586
+ = Hard work
587
+
588
+ It was so hard work to complete.
589
+
590
+ = Hard work
591
+
592
+ So I always do programming, on a desk, on a bed, in trains, in a bathroom, in a toilet...
593
+
594
+ = Hard work
595
+
596
+ # image
597
+ # src = bill-gates-desk-picture.jpg
598
+ # relative-height = 80
599
+ # caption = Sometimes I use computer on the floor
600
+ # relative-padding-top = 0
601
+ # relative-padding-bottom = 0
602
+ # relative-padding-right = 0
603
+ # relative-padding-left = 0
604
+
605
+ = Hard work
606
+
607
+ # image
608
+ # src = bill-gates-desk-picture-with-injury.jpg
609
+ # relative-height = 80
610
+ # caption = I got right anterior cruciate ligament injury
611
+ # relative-padding-top = 0
612
+ # relative-padding-bottom = 0
613
+ # relative-padding-right = 0
614
+ # relative-padding-left = 0
615
+
616
+ = Hard work
617
+
618
+ # image
619
+ # src = mannequin_2.jpg
620
+ # relative-height = 80
621
+ # caption = I got right anterior cruciate ligament injury
622
+ # relative-padding-top = 0
623
+ # relative-padding-bottom = 0
624
+ # relative-padding-right = 0
625
+ # relative-padding-left = 0
626
+
627
+ = Unicode support
628
+
629
+ Multibyte characters of Unicode has so complex specifications:
630
+
631
+ = Unicode support
632
+
633
+ * (('wait'))combination plural bytes to one character
634
+ * (('wait'))combination plural characters to one grapheme cluster
635
+ * (('wait'))character width depending on the situation
636
+ * (('wait'))blah blah blah
637
+
638
+ = Unicode support
639
+
640
+ * ((*combination plural bytes to one character*))
641
+ * ((*combination plural characters to one grapheme cluster*))
642
+ * character width depending on the situation
643
+ * blah blah blah
644
+
645
+ I'll omit to explain these 2 specs because of too complex.
646
+
647
+ = Unicode support
648
+
649
+ * combination plural bytes to one character
650
+ * combination plural characters to one grapheme cluster
651
+ * ((*character width depending on the situation*))
652
+ * blah blah blah
653
+
654
+ = Unicode support
655
+
656
+ Some Unicode characters' width are changed by the situation, for example Cyrillic alphabet.
657
+
658
+ = Unicode support
659
+
660
+ I'll show 2 gnome-terminal screenshot.
661
+
662
+ = Unicode support
663
+
664
+ # image
665
+ # src = single.png
666
+ # relative-height = 60
667
+ # caption = "Д" as a single width character
668
+ # relative-padding-top = 0
669
+ # relative-padding-bottom = 0
670
+ # relative-padding-right = 0
671
+ # relative-padding-left = 0
672
+
673
+ = Unicode support
674
+
675
+ # image
676
+ # src = double.png
677
+ # relative-height = 60
678
+ # caption = "Д" as a double width character
679
+ # relative-padding-top = 0
680
+ # relative-padding-bottom = 0
681
+ # relative-padding-right = 0
682
+ # relative-padding-left = 0
683
+
684
+ = Unicode support
685
+
686
+ # image
687
+ # src = both.png
688
+ # relative-height = 60
689
+ # caption = Both are the same strings, but changed width of "Д"
690
+ # relative-padding-top = 0
691
+ # relative-padding-bottom = 0
692
+ # relative-padding-right = 0
693
+ # relative-padding-left = 0
694
+
695
+ = Unicode support
696
+
697
+ # image
698
+ # src = both.png
699
+ # relative-height = 60
700
+ # caption = The behaviour is based on terminal software settings
701
+ # relative-padding-top = 0
702
+ # relative-padding-bottom = 0
703
+ # relative-padding-right = 0
704
+ # relative-padding-left = 0
705
+
706
+ = Unicode support
707
+
708
+ How to resolve:
709
+
710
+ * (('wait'))show in actuality and check width and...
711
+ * (('wait'))((*delete it before user awakes, in an eye's blink*))
712
+
713
+ = Terminal Ninja!
714
+
715
+ = Unicode support
716
+
717
+ Vim has a function, (({may_req_ambiguous_char_width()})), the comment of it says...
718
+
719
+ = Unicode support
720
+
721
+ First, we move the cursor to (1, 0)
722
+ and print a test ambiguous character
723
+ \u25bd (WHITE DOWN-POINTING TRIANGLE)
724
+ and query current cursor position.
725
+
726
+ = COOLEST TECH\nIN\n2019
727
+
728
+ = Unicode support
729
+
730
+ # image
731
+ # src = mannequin_3.jpg
732
+ # relative-height = 80
733
+ # caption = New headache comes, it's killing me
734
+ # relative-padding-top = 0
735
+ # relative-padding-bottom = 0
736
+ # relative-padding-right = 0
737
+ # relative-padding-left = 0
738
+
739
+ = Unicode support
740
+
741
+ I ported it to Reline. Coolest software.
742
+
743
+ = Line editing implementation
744
+
745
+ Next, let me implement line editing features to Reline.
746
+
747
+ = Line editing implementation
748
+
749
+ These are key assigned operations...
750
+
751
+ = Line editing implementation
752
+
753
+ * operation method list
754
+ * ed_insert(key)
755
+ * ed_quoted_insert(str, arg: 1)
756
+ * ed_next_char(key, arg: 1)
757
+ * ed_prev_char(key, arg: 1)
758
+ * ed_move_to_beg(key)
759
+ * ed_move_to_end(key)
760
+ * ed_prev_history(key, arg: 1)
761
+ * ed_next_history(key, arg: 1)
762
+ * ed_newline(key)
763
+ * em_delete_prev_char(key)
764
+ * ed_kill_line(key)
765
+ * em_kill_line(key)
766
+ * em_delete_or_list(key)
767
+ * em_yank(key)
768
+ * em_yank_pop(key)
769
+ * ed_clear_screen(key)
770
+ * em_next_word(key)
771
+ * ed_prev_word(key)
772
+ * em_delete_next_word(key)
773
+ * ed_delete_prev_word(key)
774
+ * ed_transpose_chars(key)
775
+ * em_capitol_case(key)
776
+ * em_lower_case(key)
777
+ * em_upper_case(key)
778
+ * em_kill_region(key)
779
+ * copy_for_vi(text)
780
+ * vi_insert(key)
781
+ * vi_add(key)
782
+ * vi_command_mode(key)
783
+ * vi_next_word(key, arg: 1)
784
+ * vi_prev_word(key, arg: 1)
785
+ * vi_end_word(key, arg: 1)
786
+ * vi_next_big_word(key, arg: 1)
787
+ * vi_prev_big_word(key, arg: 1)
788
+ * vi_end_big_word(key, arg: 1)
789
+ * vi_delete_prev_char(key)
790
+ * ed_delete_prev_char(key, arg: 1)
791
+ * vi_zero(key)
792
+ * vi_change_meta(key)
793
+ * vi_delete_meta(key)
794
+ * vi_yank(key)
795
+ * vi_list_or_eof(key)
796
+ * ed_delete_next_char(key, arg: 1)
797
+ * vi_to_history_line(key)
798
+ * vi_histedit(key)
799
+ * vi_paste_prev(key, arg: 1)
800
+ * vi_paste_next(key, arg: 1)
801
+ * ed_argument_digit(key)
802
+ * vi_to_column(key, arg: 0)
803
+ * vi_next_char(key, arg: 1)
804
+ * search_next_char(key, arg)
805
+
806
+ = Line editing implementation
807
+
808
+ Oh, list is cut off in the middle...
809
+
810
+ = Line editing implementation
811
+
812
+ * operation method list(smaller)
813
+ * ed_insert(key)
814
+ * ed_quoted_insert(str, arg: 1)
815
+ * ed_next_char(key, arg: 1)
816
+ * ed_prev_char(key, arg: 1)
817
+ * ed_move_to_beg(key)
818
+ * ed_move_to_end(key)
819
+ * ed_prev_history(key, arg: 1)
820
+ * ed_next_history(key, arg: 1)
821
+ * ed_newline(key)
822
+ * em_delete_prev_char(key)
823
+ * ed_kill_line(key)
824
+ * em_kill_line(key)
825
+ * em_delete_or_list(key)
826
+ * em_yank(key)
827
+ * em_yank_pop(key)
828
+ * ed_clear_screen(key)
829
+ * em_next_word(key)
830
+ * ed_prev_word(key)
831
+ * em_delete_next_word(key)
832
+ * ed_delete_prev_word(key)
833
+ * ed_transpose_chars(key)
834
+ * em_capitol_case(key)
835
+ * em_lower_case(key)
836
+ * em_upper_case(key)
837
+ * em_kill_region(key)
838
+ * copy_for_vi(text)
839
+ * vi_insert(key)
840
+ * vi_add(key)
841
+ * vi_command_mode(key)
842
+ * vi_next_word(key, arg: 1)
843
+ * vi_prev_word(key, arg: 1)
844
+ * vi_end_word(key, arg: 1)
845
+ * vi_next_big_word(key, arg: 1)
846
+ * vi_prev_big_word(key, arg: 1)
847
+ * vi_end_big_word(key, arg: 1)
848
+ * vi_delete_prev_char(key)
849
+ * ed_delete_prev_char(key, arg: 1)
850
+ * vi_zero(key)
851
+ * vi_change_meta(key)
852
+ * vi_delete_meta(key)
853
+ * vi_yank(key)
854
+ * vi_list_or_eof(key)
855
+ * ed_delete_next_char(key, arg: 1)
856
+ * vi_to_history_line(key)
857
+ * vi_histedit(key)
858
+ * vi_paste_prev(key, arg: 1)
859
+ * vi_paste_next(key, arg: 1)
860
+ * ed_argument_digit(key)
861
+ * vi_to_column(key, arg: 0)
862
+ * vi_next_char(key, arg: 1)
863
+ * search_next_char(key, arg)
864
+
865
+ = Line editing implementation
866
+
867
+ Ah...
868
+
869
+ = Line editing implementation
870
+
871
+ * operation method list(smallest)
872
+ * ed_insert(key)
873
+ * ed_quoted_insert(str, arg: 1)
874
+ * ed_next_char(key, arg: 1)
875
+ * ed_prev_char(key, arg: 1)
876
+ * ed_move_to_beg(key)
877
+ * ed_move_to_end(key)
878
+ * ed_prev_history(key, arg: 1)
879
+ * ed_next_history(key, arg: 1)
880
+ * ed_newline(key)
881
+ * em_delete_prev_char(key)
882
+ * ed_kill_line(key)
883
+ * em_kill_line(key)
884
+ * em_delete_or_list(key)
885
+ * em_yank(key)
886
+ * em_yank_pop(key)
887
+ * ed_clear_screen(key)
888
+ * em_next_word(key)
889
+ * ed_prev_word(key)
890
+ * em_delete_next_word(key)
891
+ * ed_delete_prev_word(key)
892
+ * ed_transpose_chars(key)
893
+ * em_capitol_case(key)
894
+ * em_lower_case(key)
895
+ * em_upper_case(key)
896
+ * em_kill_region(key)
897
+ * copy_for_vi(text)
898
+ * vi_insert(key)
899
+ * vi_add(key)
900
+ * vi_command_mode(key)
901
+ * vi_next_word(key, arg: 1)
902
+ * vi_prev_word(key, arg: 1)
903
+ * vi_end_word(key, arg: 1)
904
+ * vi_next_big_word(key, arg: 1)
905
+ * vi_prev_big_word(key, arg: 1)
906
+ * vi_end_big_word(key, arg: 1)
907
+ * vi_delete_prev_char(key)
908
+ * ed_delete_prev_char(key, arg: 1)
909
+ * vi_zero(key)
910
+ * vi_change_meta(key)
911
+ * vi_delete_meta(key)
912
+ * vi_yank(key)
913
+ * vi_list_or_eof(key)
914
+ * ed_delete_next_char(key, arg: 1)
915
+ * vi_to_history_line(key)
916
+ * vi_histedit(key)
917
+ * vi_paste_prev(key, arg: 1)
918
+ * vi_paste_next(key, arg: 1)
919
+ * ed_argument_digit(key)
920
+ * vi_to_column(key, arg: 0)
921
+ * vi_next_char(key, arg: 1)
922
+ * search_next_char(key, arg)
923
+
924
+ = Line editing implementation
925
+
926
+ Too many
927
+
928
+ = Line editing implementation
929
+
930
+ operation method list\n(smallester)
931
+
932
+ # enscript ruby
933
+ ed_insert(key)
934
+ ed_quoted_insert(str, arg: 1)
935
+ ed_next_char(key, arg: 1)
936
+ ed_prev_char(key, arg: 1)
937
+ ed_move_to_beg(key)
938
+ ed_move_to_end(key)
939
+ ed_prev_history(key, arg: 1)
940
+ ed_next_history(key, arg: 1)
941
+ ed_newline(key)
942
+ em_delete_prev_char(key)
943
+ ed_kill_line(key)
944
+ em_kill_line(key)
945
+ em_delete_or_list(key)
946
+ em_yank(key)
947
+ em_yank_pop(key)
948
+ ed_clear_screen(key)
949
+ em_next_word(key)
950
+ ed_prev_word(key)
951
+ em_delete_next_word(key)
952
+ ed_delete_prev_word(key)
953
+ ed_transpose_chars(key)
954
+ em_capitol_case(key)
955
+ em_lower_case(key)
956
+ em_upper_case(key)
957
+ em_kill_region(key)
958
+ copy_for_vi(text)
959
+ vi_insert(key)
960
+ vi_add(key)
961
+ vi_command_mode(key)
962
+ vi_next_word(key, arg: 1)
963
+ vi_prev_word(key, arg: 1)
964
+ vi_end_word(key, arg: 1)
965
+ vi_next_big_word(key, arg: 1)
966
+ vi_prev_big_word(key, arg: 1)
967
+ vi_end_big_word(key, arg: 1)
968
+ vi_delete_prev_char(key)
969
+ ed_delete_prev_char(key, arg: 1)
970
+ vi_zero(key)
971
+ vi_change_meta(key)
972
+ vi_delete_meta(key)
973
+ vi_yank(key)
974
+ vi_list_or_eof(key)
975
+ ed_delete_next_char(key, arg: 1)
976
+ vi_to_history_line(key)
977
+ vi_histedit(key)
978
+ vi_paste_prev(key, arg: 1)
979
+ vi_paste_next(key, arg: 1)
980
+ ed_argument_digit(key)
981
+ vi_to_column(key, arg: 0)
982
+ vi_next_char(key, arg: 1)
983
+ search_next_char(key, arg)
984
+
985
+ = Line editing implementation
986
+
987
+ GNU Readline features are:
988
+
989
+ = Line editing implementation
990
+
991
+ * emacs mode
992
+ * kill-ring
993
+ * yank, yank-pop
994
+ * vi mode
995
+ * argumented operations
996
+ * combination of operation and motion
997
+ * undo
998
+ * setting files
999
+ * key binding
1000
+ * macro
1001
+ * blah blah blah
1002
+
1003
+ = It means that I made almost ((*full 2 editors*))
1004
+
1005
+ = Line editing implementation
1006
+
1007
+ Demonstration
1008
+
1009
+ = Multiline editor
1010
+
1011
+ = Multiline editor
1012
+
1013
+ Today's description of this session explains about "Reidline".
1014
+
1015
+ = Multiline editor
1016
+
1017
+ "Reidline" is authored for new IRB by keiju-san who
1018
+ is Ruby's grandfather, it behaves as a multiline editor
1019
+ like JavaScript console on browsers.
1020
+
1021
+ It had many technical problems but I've already solved
1022
+ that when I implemented Reline.
1023
+
1024
+ So I helped to complete Reidline.
1025
+
1026
+ = Multiline editor
1027
+
1028
+ Therefore, I improved Reline for Reidline. It supports multiline a few days ago!
1029
+
1030
+ = Multiline editor
1031
+
1032
+ # image
1033
+ # src = mannequin_4.jpg
1034
+ # relative-height = 80
1035
+ # caption = Stiffness of neck, shoulder, lower back
1036
+ # relative-padding-top = 0
1037
+ # relative-padding-bottom = 0
1038
+ # relative-padding-right = 0
1039
+ # relative-padding-left = 0
1040
+
1041
+ = Multiline editor
1042
+
1043
+ # image
1044
+ # src = editors.png
1045
+ # relative-height = 80
1046
+ # caption = There are 3 editors by Ruby
1047
+ # relative-padding-top = 0
1048
+ # relative-padding-bottom = 0
1049
+ # relative-padding-right = 0
1050
+ # relative-padding-left = 0
1051
+
1052
+ = Multiline editor
1053
+
1054
+ And, I'm the current RDoc maintainer. So I added new feature that shows document after completion.
1055
+
1056
+ = Multiline editor
1057
+
1058
+ Demonstration
1059
+
1060
+ = Multiline editor
1061
+
1062
+ I started development of editor for my wrist, but crash of my body is continued.
1063
+
1064
+ = Multiline editor
1065
+
1066
+ Incredible situation.
1067
+
1068
+ = Multiline editor
1069
+
1070
+ And, at 3rd day of RubyKaigi,\nRuby 2.7.0-preview1 will be released, with Reline and Reidline.
1071
+
1072
+ = Multiline editor
1073
+
1074
+ So I should fix all bugs for the day.
1075
+
1076
+ = Multiline editor
1077
+
1078
+ # image
1079
+ # src = mannequin_gone.jpg
1080
+ # relative-height = 80
1081
+ # caption = My body will be gone
1082
+ # relative-padding-top = 0
1083
+ # relative-padding-bottom = 0
1084
+ # relative-padding-right = 0
1085
+ # relative-padding-left = 0
1086
+
1087
+ = Multiline editor
1088
+
1089
+ # image
1090
+ # src = mannequin_gone.jpg
1091
+ # relative-height = 80
1092
+ # caption = This is my last work of Heisei era
1093
+ # relative-padding-top = 0
1094
+ # relative-padding-bottom = 0
1095
+ # relative-padding-right = 0
1096
+ # relative-padding-left = 0
1097
+
1098
+ = Multiline editor
1099
+
1100
+ # image
1101
+ # src = mannequin_gone.jpg
1102
+ # relative-height = 80
1103
+ # caption = C'mon, Reiwa era...
1104
+ # relative-padding-top = 0
1105
+ # relative-padding-bottom = 0
1106
+ # relative-padding-right = 0
1107
+ # relative-padding-left = 0
1108
+