Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix history-saving feature #642

Merged
merged 2 commits into from
Jul 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions lib/irb/context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,12 @@ def initialize(irb, workspace = nil, input_method = nil)

def save_history=(val)
IRB.conf[:SAVE_HISTORY] = val

if val
(IRB.conf[:MAIN_CONTEXT] || self).init_save_history
context = (IRB.conf[:MAIN_CONTEXT] || self)
if context.io.support_history_saving? && !context.io.singleton_class.include?(HistorySavingAbility)
context.io.extend(HistorySavingAbility)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I decided to put these in the same place to make future refactor easier.

end
end
end

Expand Down Expand Up @@ -576,11 +580,5 @@ def transform_args?(command)
command = command_aliases.fetch(command.to_sym, command)
ExtendCommandBundle.load_command(command)&.respond_to?(:transform_args)
end

def init_save_history# :nodoc:
unless (class<<@io;self;end).include?(HistorySavingAbility)
@io.extend(HistorySavingAbility)
end
end
end
end
2 changes: 0 additions & 2 deletions lib/irb/history.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ def HistorySavingAbility.extended(obj)
end

def load_history
return unless self.class.const_defined?(:HISTORY)
history = self.class::HISTORY
if history_file = IRB.conf[:HISTORY_FILE]
history_file = File.expand_path(history_file)
Expand All @@ -31,7 +30,6 @@ def load_history
end

def save_history
return unless self.class.const_defined?(:HISTORY)
history = self.class::HISTORY
if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) != 0
if history_file = IRB.conf[:HISTORY_FILE]
Expand Down
13 changes: 13 additions & 0 deletions lib/irb/input-method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ def readable_after_eof?
false
end

def support_history_saving?
false
end

# For debug message
def inspect
'Abstract InputMethod'
Expand Down Expand Up @@ -229,6 +233,10 @@ def readable_after_eof?
true
end

def support_history_saving?
true
end

# Returns the current line number for #io.
#
# #line counts the number of times #gets is called.
Expand All @@ -255,6 +263,7 @@ def inspect
end

class RelineInputMethod < InputMethod
HISTORY = Reline::HISTORY
# Creates a new input method object using Reline
def initialize
IRB.__send__(:set_encoding, Reline.encoding_system_needs.name, override: false)
Expand Down Expand Up @@ -457,6 +466,10 @@ def inspect
str += " and #{inputrc_path}" if File.exist?(inputrc_path)
str
end

def support_history_saving?
true
end
end

class ReidlineInputMethod < RelineInputMethod
Expand Down