3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

自作エディタをつくるAdvent Calendar 2016

Day 12

コンソールで動くエディタを作る(12日目) カーソル位置の編集その3(文字の追加)

Last updated at Posted at 2016-12-13

本稿は自作エディタをつくる Advent Calendar 2016の12日目です、レポジトリはこちら

更新遅れて申し訳ないです。

テキストを挿入する

前回まででカーソル位置に対するデータは取得できていた雰囲気になっていたのですが、
いくつかバグを修正ました

  • 0始まりと1始まりを勘違いしていた
  • 変にキャッシュした計算結果が実際のデータと食い違っていた

が主な要因です。
前者は0始まりに揃えるといった対策を、後者は早すぎる最適化は・・・、といった感じの反省でしょうか。

その取得した位置に対して、以下の処理を順に実行していきます。

  • 格納しきれない時は、挿入したい文字列の後ろに空の構造体を追加
  • 格納しきれない時は、末尾の文字を後ろの構造体の先頭へ移す(再帰呼び出し)
  • 挿入する文字サイズ分、配列を後ろにずらす
  • 挿入する文字を配列にコピーする

以上で、カーソルの位置に文字を追加することができました。

わりと私生活と職場などの外部要因でここまで3日に分けて書きましたが(しかも更新遅れた)、
これを読んでエディタを作ろうと思う人がいたら、「ほんとはそこまで難しくないよ」と伝えたいです。

逆に、もっと考えておけばよかったと思うのは以下の3点です

カーソルの位置を文字数で保持しているが、半角と全角が入り乱れる文でカーソルを上下移動する際は、文字幅で保持していないと違和感がある

(例)「|」の文字をカーソルと思ってください

あいう|えお
0123456789abcdef

(カーソルを1つ下に移動)

理想(文字幅を考慮)
あいうえお
012345|6789abcdef

現状(文字数のみで計算)
あいうえお
012|3456789abcdef

いまは後者の実装になっています

普通のエディタ(atomとかvs codeとか)は文字幅を考慮してる・・・いや、してないですね。後者っぽい。
でも動かすと違和感があります。普段半角しか打たないからかな?

保持しているカーソルの位置と、実際のカーソル位置がズレたほうが使いやすそう

(例)「|」の文字をカーソルと思ってください

状態1
abc|de
(空行)
012345

(カーソルを1つ下に移動)

状態2
abcde
|(空行)
012345

(カーソルを1つ下に移動)

状態3
abcde
(空行)
012|345

状態2のときに、カーソル位置を先頭に戻してしまうと、状態3の時に文字0の位置にカーソルが動きます。

好みもあると思いますが、いっぱんにソースコードを書く時は上のようなカーソル移動をしてほしい気がします。今後の課題ですね。

文字を打つと、カーソル位置が1個後ろに行く

気にしたことがなかったですが、言われてみるとそうですね。
盲点でした。直さなきゃ・・・。

今日のまとめ

  • 文字を打てるようになった

eb7e9dd63f9ab41317871f56923ce916.gif

明日は文字を削除できるようにしたい(忙しくて更新できてなかったので、今日ですが・・)

毎日更新はなかなか大変です。定時退社とはいったい・・・

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?