часто сбрасывать историю irb в файл

irb может записывать историю команд в файл, но делает это только после завершения сеанса irb.

Я хотел бы записывать свою историю команд чаще: так же часто, как и для каждой команды (например, историю оболочки), но это не должно быть так часто.

Есть ли для этого настройка .irbrc? Или мне придется взломать источник irb...


person jmay    schedule 18.11.2010    source источник


Ответы (2)


Много раз взломав irb, удачи с чистым решением. Вместо этого я бы рекомендовал ripl, альтернативу irb. По умолчанию он сохраняет историю более разумно (например, даже когда вы резко выходите с помощью Control-D).

Если вы хотите писать историю после каждой команды, это легко сделать с помощью ripl, так как он создан для расширения с помощью плагинов:

# add to your ~/.riplrc
module Ripl::ImmediateHistory
  # write to history after every eval
  def eval_input(input)
    super
    File.open(history_file, 'a') {|f| f.puts input }
  end

  # disable writing to history when ripl exits
  def write_history; end
end
Ripl::Shell.send :include, Ripl::ImmediateHistory
person cldwalker    schedule 19.11.2010

Отсюда: http://blog.nicksieger.com/articles/2006/04/23/tweaking-irb

module Readline
  module History
    LOG = "#{ENV['HOME']}/.irb-history"

    def self.write_log(line)
      File.open(LOG, 'ab') {|f| f << "#{line}
"}
    end

    def self.start_session_log
      write_log("
# session start: #{Time.now}

")
      at_exit { write_log("
# session stop: #{Time.now}
") }
    end
  end

  alias :old_readline :readline
  def readline(*args)
    ln = old_readline(*args)
    begin
      History.write_log(ln)
    rescue
    end
    ln
  end
end

Readline::History.start_session_log
person robbrit    schedule 18.11.2010