Slide 1

Slide 1 text

EXIA slme

Slide 2

Slide 2 text

whoami ・slme_not_found ・好きな言語: Rust / Kotlin ・ゲーム: MHW

Slide 3

Slide 3 text

~10日前の出来事~

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

_人人人人人人_ > 全員発表 <  ̄Y^Y^Y^Y^Y ̄

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

逃げました

Slide 8

Slide 8 text

ある会話が脳裏に浮かんだ

Slide 9

Slide 9 text

自作言語、自作エディタ、自作OSはエンジニアの夢

Slide 10

Slide 10 text

そして出来上がった

Slide 11

Slide 11 text

EXIA

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

エディタを作りました

Slide 15

Slide 15 text

EXIAの機能 ・vimと同じようにmodeを持つ ・vimと同じようなキーバインド ・ただのテキストエディタ ・クッソ効率が悪い

Slide 16

Slide 16 text

だがしかし...

Slide 17

Slide 17 text

_人人人人人人人人人人_ > マルチバイト文字 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Slide 18

Slide 18 text

マルチバイト文字 ・1 byteではない文字 ・全角ひらがな、漢字、カタカナとか ・矢印キーも ( ↑ => “\x1b[A” )

Slide 19

Slide 19 text

ターミナルのmode ・Cooked mode ・標準入力から入力されたデータをバッファリング ・Enter || EOFで送信 ・バッファリングされてるデータを編集できる ・Raw mode ・標準入力から入力されたデータをそのまま送信する

Slide 20

Slide 20 text

Rustのstdin function ・read ・read_to_string ・read_to_end ・read_exact

Slide 21

Slide 21 text

Raw modeとの相性がよろしくない

Slide 22

Slide 22 text

解決法 ・libcのgetcharを使って後続判定を作り適切に処理する ・read_to_stringを使って後続判定を作り適切に処理する (おそらくRaw modeならgetcharと変わらない(?)) ・cursesを使って最高の気分を得る

Slide 23

Slide 23 text

この時点で月曜日

Slide 24

Slide 24 text

curses !!!!

Slide 25

Slide 25 text

curses ・UNIX系システムの端末制御ライブラリ ・TUIアプリケーションの作成に使われる ・cursor optimizationが由来 ・Linux -> ncurses ・Windows -> PDcurses

Slide 26

Slide 26 text

そして出来上がった

Slide 27

Slide 27 text

TRANS-AM

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

TRANS-AMの機能 ・vimと同じようにmodeを持つ ・vimと同じようなキーバインド ・ただのテキストエディタ ・ncursesで制御している

Slide 31

Slide 31 text

基本的な処理の流れ ・キーボードからの入力を監視 ( Raw mode ) ・その入力文字が何なのか、何を意味するかを解析 (Commandにparse) ・Commandを実行 ・実行後に端末に変更を反映

Slide 32

Slide 32 text

軽いデモ

Slide 33

Slide 33 text

これから ・軽い編集しかできないので、機能追加 ・突貫なのでバグが多いので修正 ・シンタックスハイライト欲しい ・ある程度の機能追加が終わり次第公開予定

Slide 34

Slide 34 text

まとめ

Slide 35

Slide 35 text

自作エディタはつらい

Slide 36

Slide 36 text

でも楽しい

Slide 37

Slide 37 text

ご清聴ありがとうございました