[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000395] Re: improved NumArray
ごとけんです
ただいまバイトから帰って来ました。
In message "[dennou-ruby:000394] Re: improved NumArray"
on 00/09/07, Masato Shiotani <shiotani@xxxxxx> writes:
>まず readline をインストールして, ruby を make し直したらいいというこ
>となんでしょうか, それとも ruby に readline のライブラリがついていると
>か?
そうです。
ftp://ftp.eos.hokudai.ac.jp/pub/GNU/gnu.org/readline/readline-4.1.tar.gz
In message "[dennou-ruby:000393] Re: improved NumArray"
on 00/09/07, Takeshi Horinouchi <horinout@xxxxxx> writes:
>ところで、さらに history と打ち込むと過去数10件の一覧が出るとか、
>必要に応じて打ち込んだものの log がとれたりしないかなと思うので
>すが、そんな機能知りません? > ごとけんさん
書いてみた雛型を送りますね。Readline::completion_proc はコマ
ンドライン補完のためのProcで、これを設定しておくとbashのよう
なコマンドラインが使えます。Readline::HISTORY は配列もどきで
す。もどきなので、配列にするには to_a を使う必要があります。
Readlineの他の機能は
http://www.math.sci.hokudai.ac.jp/~gotoken/ruby/r/readline.shtml
のUSAGEを見て下さい。INSTALLATIONの項目はreadlineが標準配布
でなかった頃の話なので無視して下さいまし。
#!/usr/bin/env ruby
require "readline"
class Frontend
include Readline
Me = File.basename($0)
Prompt = "#{Me}> "
History = true
Command = {}
Readline::completion_proc =
lambda{|s| Command.keys.find_all{|elm| elm =~ s}}
def start
catch(:exit) {
while line = readline(Prompt, History)
next if /^\s*$/ =~ line
argv0, *argv = line.split
job = Command[argv0]
if job
job.call(argv)
else
puts "#{Me}: #{argv0}: no such command"
end
end
print "\n"
}
end
def define_command(*name, &job)
name.each do |n|
Command[n] = job
end
end
def initialize
define_command("history") do |*max|
max = (max[0]||10).to_i
s = Readline::HISTORY.size
(s-1).downto([0, s-max].max){|i|
puts HISTORY[i]
}
end
define_command("exit", "quit", "bye") do
throw(:exit)
end
end
end
if __FILE__ == $0
f = Frontend.new
f.define_command("date") do puts Time.now end
f.start
end