Hatena::Grouprubyist

たばさの RSSフィード

07/17(金) 2009

コマンドライン履歴 補助

| コマンドライン履歴 補助 - たばさの を含むブックマーク はてなブックマーク - コマンドライン履歴 補助 - たばさの

履歴をいじりたい。readlineというのを使う。

#!ruby
require 'readline'

class Mylog
  def initialize
    @lo="d:/simpleshell-log.txt"
  end
  def w log
    open(@lo,"a"){|f| f.puts log.uniq}
    puts"(log write)"
  end
  def r
    File.readlines(@lo).uniq
  end
end


def help
h=%q(
・log ..ログを番号つき表示
・/key ..keyでログを検索して番号つき表示
・番号 ..実行
・exit ..ログを保存して終了(ログは起動時に読み込み)
・それ以外 ..コマンドとして実行してログに追加
)
puts h
end

def sub cmd,log
  case cmd
  when /^log$/
    log.each_with_index{|v,i| puts"#{i}: #{v}"}
  when /^help$/
    help
  when /^\d+$/
    sub(log[$&.to_i],log)
  when /^\/(.+)$/
    k=$1
    tmp=log.select{|i| i=~/#{k}/ }
    tmp.each_with_index{|v,i| puts"#{i}: #{v}"}
    gets
    sub(tmp[$_.to_i],log) if $_!="\n"
  when /^exit$/
    raise "end"
  else
    puts system(cmd)
  end
end

def main log,prmpt
  cmd=Readline.readline(prmpt,true).chomp
  log << cmd
  sub cmd,log
end

mylog=Mylog.new
log=mylog.r
oldlog=log.dup
log.each{|v|
  Readline::HISTORY << v
}

Readline.completion_proc = proc {|word|
    Readline::HISTORY.grep(/\A#{Regexp.quote word}/)
}
begin
  loop{main log,">"}
rescue =>e
  puts e
  mylog.w log-oldlog
  exit
end

参考

windows doskey

ruby readline

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090717
カレンダー
<< 2009/07 >>
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
archive Error : RSSが取得できませんでした。