Page 1
平成時代に憧れてた
あのエディタを実装してみる
Implement the text editor I admired in Heisei era
新元号決定!平成最後のLT大会&PARTY
2019年4月30日 #engineers_lt
公開日:
by USAMI Kenta @tadsan
に東京都港区の赤坂台クラブで開催された『新元号決定!平成最後のLT大会&PARTY』でライトニングトーク(5分)として発表しました。
平成時代に憧れてた
あのエディタを実装してみる
Implement the text editor I admired in Heisei era
新元号決定!平成最後のLT大会&PARTY
2019年4月30日 #engineers_lt
お前誰よ
うさみけんた (@tadsan) / Zonu.EXE
時は遡る
Laravel JP
Conference
直後
何か話さな
いと…
|
\ __ / ピコーン
_ (m) _
そうだ、テキストエディタ作ろう
|ミ|
/ `´ \
('A`)
ノヽノヽ くく
最初に考え
てた内容
秀丸上にEmacs
を実現しよう
先行実装
昨晩手を
つけてみた
もう20年アップデートされて ないし、現代風に書き直して
みたら楽しいのでは???
めちゃくちゃ手間が かかるし予想以上に
おもしろくない
🤔
はてさて
どうしよう
第2案発動
(本当に手をつける
つもりはなかった)
平成時代に憧れてた
あのエディタを実装してみる
Implement the text editor I admired in Heisei era
新元号決定!平成最後のLT大会&PARTY
2019年4月30日 #engineers_lt
平成時代に憧れてた
あのエディタを実装してみる
Implement a text editor I admired in Heisei era
新元号決定!平成最後のLT大会&PARTY
2019年4月30日 #engineers_lt
|
\ __ / ピコーン
_ (m) _
そうだ、PHPでエディタ作ろう
|ミ|
/ `´ \
('A`)
ノヽノヽ くく
ということで今朝 起きてから実装を
始めました
そもそもテキスト エディタとは何か
歴史的にはed, ex,
のような
MS-DOSのEDLIN
ラインエディタがあった
ファイルを部分的に プリントして編集し
ていくスタイル
(今日「プリント」は画面上 に文字を出力することを意 味するが、1970年代前半で はテレタイプ端末で本当に
印刷されてたらしい)
話がそれた
本質的な
仕事
(ファイルを読み込む)
↓
ユーザにごにょごにょさせる
↓
ファイルに書き戻す
僕にも
できそう
どうやって
「ごにょごにょ」
させるかが問題
方針
PHPでやる
端末でやる
定石
||
ncursesを使う
"
やったことない
簡単な方法
画面を全部消す
↓
内容を全部出力
↓
無限に繰り返し…
#
簡単じゃん
PHPでやるには
どうすればいいか
概ねいい
感じにできる
基本はWebアプリ
ケーションフレーム ワークの実装と同じ
HTTPじゃなくて 端末の入力に対し
て処理していく
画面を消す
||
Hoa\Console\Console::clear()
文字列を貯める
バッファの実装は とことん楽をする
余談:エディタはテキストファ イルの途中に文字を消したり 追加したりするので、文字列 (=文字の配列)と相性が悪い
(途中挿入・削除コスト高)
そんなわけで実装 していきましょう
実装しなかったけど
面倒くさかったところ
カーソル
UTF-8は
可変長
カーソルを移動させるた めには一文字づつ表示幅
を調べないといけない
「カーソル」位置を
文字数で持つか
バイト数で持つか
文字列をUTF-32 で持てば固定長に なるのでは???
🙃
だめです
Unicodeの
書記素クラスタ
%
この絵文字のバイト数
strlen(' ');
%
この絵文字のバイト数
strlen(' ');
%
// => 25
この絵文字のUTF-8文字数
mb_strlen(' ', 'UTF-8');
%
この絵文字のUTF-8文字数
mb_strlen(' ', 'UTF-8');
%
// => 7
%
| | |
👨👩👦👦
Zero Width
Joiner
Unicodeにおいて、
1バイト
1コードポイント
人間に見える文字
まったく
一致しません
エディタは完成
してないです!!
でも行きあたりばったり
で設計しながら
実装していくのは楽しい
私からは
異常です