SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

作って覚えるRuby再入門

RubyとCursesを使ったテキストエディタに編集と保存機能を追加する

作って覚えるRuby再入門(第3回)

ダウンロード ソースコード (5.3 KB)

組み込み

 Textクラスの機能として当初の予定分はできましたので、これを使うように既存のコードを修正します。

editwind.rb
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箇所です。

handler.rb
class Handler
  def execute(wind,input_ch)
    # コマンド入力を処理
    case input_ch
    ## 中略 ##
    when ?v
      wind.save
   ## 中略 ##
  end
end
editwind.rb
# データ保存
def save
  @data.save(@file_name)
end
text.rb
def save(file_name)
  # ファイルをWriteモードでオープン 
  f = File.open(file_name,"w")
  # 改行を付加してデータを順にファイルに書き込み
  @lines.each {|str| f << str + "\n"}
  f.close
end

 できあがったら、なにか適当なテキストファイルを開け、文字を打ったり消したりして保存してみてください。保存が完了した旨をメッセージとして表示してないので本当に動いているか不安になりますが、編集したファイルを別のエディタで開いて確認してみると、ちゃんと編集した通りに保存できていると思います。

まとめ

 今回でなんとなく動くテキストエディタぽいものができました。

 しかし普通に使うにはまだまだ足りない機能が沢山ありますので、あとの実装は皆さんにお任せしたいと思います。これで3回に渡った連載も終了です。ここまで読んでいただきありがとうございました。ではまたどこかで。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
作って覚えるRuby再入門連載記事一覧

もっと読む

この記事の著者

越智 理夫(オチ マサオ)

株式会社カサレアル プロフェッショナルサービスセンター所属。エンジニア向けトレーニングコースの開発および講師を行う。専門はJava,Ruby,OOAD,DOA,テスト駆動開発など。最近二歳の娘にこき使われている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2365 2008/03/31 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー