часто сбрасывать историю IRB в файл - PullRequest
2 голосов
/ 18 ноября 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Много раз взломав 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
3 голосов
/ 18 ноября 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
...