組み込み
Textクラスの機能として当初の予定分はできましたので、これを使うように既存のコードを修正します。
require "text" ## 中略 ## def display(file_name) @file_name = file_name begin # ファイルをオープンし、全内容を配列に読み込んでおく @file = open(@file_name, "r") @data = Text.new # "@data=[]"を修正 ## 中略 ## end ## 中略 ## # 1文字(1バイト)入力 def input(input_ch) # ウィンドウ上で一文字挿入 @window.insch(input_ch) # データ上で一文字挿入 @data.insert_char(@cursor_y,@cursor_x,input_ch) # カーソルを微調整 @window.setpos(@cursor_y,@cursor_x+=1) end # 1文字(1バイト)削除 def delete # ウィンドウ上で一文字削除 @window.delch # データ上で一文字削除 @data.delete_char(@cursor_y,@cursor_x) end
ここまでできあがったら動作確認してみてください。
保存
では最後に保存機能を追加します。保存はコマンドモードで[v]と押すことで動作するようにします。修正・追加箇所は下記の3箇所です。
class Handler def execute(wind,input_ch) # コマンド入力を処理 case input_ch ## 中略 ## when ?v wind.save ## 中略 ## end end
# データ保存 def save @data.save(@file_name) end
def save(file_name) # ファイルをWriteモードでオープン f = File.open(file_name,"w") # 改行を付加してデータを順にファイルに書き込み @lines.each {|str| f << str + "\n"} f.close end
できあがったら、なにか適当なテキストファイルを開け、文字を打ったり消したりして保存してみてください。保存が完了した旨をメッセージとして表示してないので本当に動いているか不安になりますが、編集したファイルを別のエディタで開いて確認してみると、ちゃんと編集した通りに保存できていると思います。
まとめ
今回でなんとなく動くテキストエディタぽいものができました。
しかし普通に使うにはまだまだ足りない機能が沢山ありますので、あとの実装は皆さんにお任せしたいと思います。これで3回に渡った連載も終了です。ここまで読んでいただきありがとうございました。ではまたどこかで。
参考資料
- Rubyリファレンスマニュアル
- Rubyist Magazine - 標準添付ライブラリ紹介【第6回】委譲
- 『Rubyist Magazine 出張版 正しいRubyコードの書き方講座』青木 峰郎(著) 毎日コミュニケーションズ刊
