開発

[binllion] 編集用バッファに削除機能を追加する

上書き、挿入、とくれば削除も必要でしょう。削除機能を追加しましょう。

まずはキー入力の処理から。

            // 削除
            KeyCode::Delete => {
                let index = cursor.index();

                // 最後尾の場合は、カーソルを移動
                if index == len.saturating_sub(1) {
                    cursor.move_to_left();
                }

                message.bin_data_mut().remove(index);

                // データが1つの場合はゼロフィル
                if len == 1 {
                    message.bin_data_mut().update(0, 0);
                }

                self.reset_input_buf(message);
            }Code language: JavaScript (javascript)

KeyCode::Deleteのマッチパターンを追加しています。

カーソルの位置のデータを削除すればよいのですが、最後尾のデータの場合はカーソル位置がズレてしまうので一つ戻す処理を入れています。

また、データが一つのみの場合は削除するとデータが無くなってしまうので0でデータを書き込んでいます。

    pub(crate) fn remove(&mut self, index: usize) {
        self.buf.make_contiguous();
        if self.buf.len() > 1 {
            self.buf.remove(index);
            self.buf.make_contiguous();
        }
    }Code language: PHP (php)

remove()の処理は単純です。

make_contiguous()の処理がイマイチ理解できておらず何度も呼び出しているのですが、実験して呼び出す回数を減らしていきたいと思います。

GitHubにコードをアップロードしています。0.1.0バージョン

コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。

# Example
$ cargo run --example first_stepCode language: Bash (bash)
管理人

Recent Posts

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

2か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

2か月 ago

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることで…

5か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

5か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

5か月 ago