markpercival (owner)

Revisions

gist: 230239 Download_button fork
public
Description:
The fix for irb history saving in post p83 of 1.8.7 Ruby
Public Clone URL: git://gist.github.com/230239.git
Embed All Files: show embed
save-history.rb #
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/local/bin/ruby
#
# save-history.rb -
# $Release Version: 0.9.5$
# $Revision: 11708 $
# $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
# by Keiju ISHITSUKAkeiju@ruby-lang.org)
#
# --
#
#
#
 
require "readline"
 
module IRB
  module HistorySavingAbility
    @RCS_ID='-$Id: save-history.rb 11708 2007-02-12 23:01:19Z shyouhei $-'
  end
 
  class Context
    def init_save_history
      unless (class<<@io;self;end).include?(HistorySavingAbility)
@io.extend(HistorySavingAbility)
      end
    end
 
    def save_history
      IRB.conf[:SAVE_HISTORY]
    end
 
    def save_history=(val)
      IRB.conf[:SAVE_HISTORY] = val
      if val
main_context = IRB.conf[:MAIN_CONTEXT]
main_context = self unless main_context
main_context.init_save_history
      end
    end
 
    def history_file
      IRB.conf[:HISTORY_FILE]
    end
 
    def history_file=(hist)
      IRB.conf[:HISTORY_FILE] = hist
    end
  end
 
  module HistorySavingAbility
    include Readline
 
    def HistorySavingAbility.create_finalizer
      at_exit do
if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
if hf = IRB.conf[:HISTORY_FILE]
file = File.expand_path(hf)
end
file = IRB.rc_file("_history") unless file
open(file, 'w' ) do |f|
hist = HISTORY.to_a
f.puts(hist[-num..-1] || hist)
end
end
      end
    end
 
    def HistorySavingAbility.extended(obj)
      HistorySavingAbility.create_finalizer
      obj.load_history
      obj
    end
 
    def load_history
      hist = IRB.conf[:HISTORY_FILE]
      hist = IRB.rc_file("_history") unless hist
      if File.exist?(hist)
open(hist) do |f|
f.each {|l| HISTORY << l.chomp}
end
      end
    end
  end
end