Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EXIA.pdf

9170344325d8c88e2d77ab50c9b5d6a6?s=47 slme
January 25, 2018
47

 EXIA.pdf

9170344325d8c88e2d77ab50c9b5d6a6?s=128

slme

January 25, 2018
Tweet

Transcript

  1. EXIA slme

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

  3. ~10日前の出来事~

  4. None
  5. _人人人人人人_ > 全員発表 <  ̄Y^Y^Y^Y^Y ̄

  6. None
  7. 逃げました

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

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

  10. そして出来上がった

  11. EXIA

  12. None
  13. None
  14. エディタを作りました

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

  16. だがしかし...

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

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

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

    ・標準入力から入力されたデータをそのまま送信する
  20. Rustのstdin function ・read ・read_to_string ・read_to_end ・read_exact

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

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

  23. この時点で月曜日

  24. curses !!!!

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

    PDcurses
  26. そして出来上がった

  27. TRANS-AM

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

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

  32. 軽いデモ

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

  34. まとめ

  35. 自作エディタはつらい

  36. でも楽しい

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