2010-11-18 26 views
2

irb peut écrire l'historique des commandes dans un fichier, mais uniquement lorsque votre session IRB se termine.Vider fréquemment l'historique de l'IRB dans le fichier

Je voudrais écrire mon historique de commandes plus souvent: aussi souvent que sur toutes les commandes (comme l'histoire du shell), mais cela ne doit pas être si souvent.

Existe-t-il un paramètre .irbrc pour cela? Ou vais-je devoir pirater la source ... irb

Répondre

4

Après avoir piraté irb Maintes fois, bonne chance avec une solution propre. Au lieu de cela, je recommanderais ripl, une alternative irb. Par défaut, il enregistre l'histoire plus intelligemment (c'est-à-dire même lorsque vous quittez brutalement avec Control-D).

Si vous voulez écrire l'histoire après chaque commande, il est facile avec RIPL car il est conçu pour être étendu avec des plugins:

# 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

A partir de là: 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