Yash 2 その 90: 行編集におけるコマンド履歴の扱い
行編集においてカーソルキー上下でコマンド履歴を辿れるようにする機能の実装に関するメモ。
基本的な操作の流れは、カーソルキー上下でコマンド履歴を検索する→コマンドを編集する→コマンドを実行する、となる。
コマンドの編集を行う際には、その時編集しているコマンドの履歴番号を覚えておく必要がある。編集を始めた後に再び履歴を検索できるようにするためである。編集中にうっかりカーソルキー上下を押してしまった時、逆方向のカーソルキーを押して元に戻せるようにするためには、編集後に検索を行ったときでも編集内容を覚えておく必要がある。すなわち覚えておくべきことは、
- 現在表示しているコマンドの履歴番号と内容・カーソル位置
- 最後に編集したコマンドの履歴番号と編集した後の内容 (とカーソル位置)
カーソルキー上下で履歴項目を選んだ際、選んだ履歴番号と最後に編集した履歴番号とが一致すれば、履歴の内容ではなく編集した内容を表示する。
ただ、これだけでは編集したコマンドを編集前の状態に戻しづらくなってしまう。行編集機能では、コマンドの編集状態をさかのぼることができるアンドゥ機能をすでに実装しているので、これとうまく組み合わせたい。アンドゥ履歴では各編集段階におけるコマンドの内容とカーソル位置を記憶しており、これは最後に編集したコマンドの内容も含んでいる。従って、覚えておくべきは
- 現在表示しているコマンドの履歴番号と内容・カーソル位置
- 最後に編集したコマンドの履歴番号とアンドゥ履歴
現在のリビジョン (r1003) では、現在表示しているコマンドの内容
が le_main_buffer
、現在表示しているコマンドのカーソル位置
が le_main_index
、最後に編集したコマンドのアンドゥ履歴
が undo_history
変数に保存されている。今後のリビジョンで現在表示しているコマンドの履歴番号
と最後に編集したコマンドの履歴番号
を覚える変数を追加する。
| 固定リンク
コメント