class Byebug::History

Handles byebug's history of commands.

Attributes

size[RW]

Public Class Methods

new() click to toggle source
# File lib/byebug/history.rb, line 21
def initialize
  self.size = 0
end

Public Instance Methods

buffer() click to toggle source

Array holding the list of commands in history

# File lib/byebug/history.rb, line 28
def buffer
  Readline::HISTORY.to_a
end
clear() click to toggle source

Discards history.

# File lib/byebug/history.rb, line 57
def clear
  size.times { pop }
end
default_max_size() click to toggle source

Max number of commands to be displayed when no size has been specified.

Never more than Setting.

# File lib/byebug/history.rb, line 104
def default_max_size
  [Setting[:histsize], self.size].min
end
ignore?(buf) click to toggle source

Whether a specific command should not be stored in history.

For now, empty lines and consecutive duplicates.

# File lib/byebug/history.rb, line 122
def ignore?(buf)
  return true if /^\s*$/.match?(buf)
  return false if Readline::HISTORY.empty?

  buffer[Readline::HISTORY.length - 1] == buf
end
last_ids(number) click to toggle source

Array of ids of the last number commands.

# File lib/byebug/history.rb, line 95
def last_ids(number)
  (1 + size - number..size).to_a
end
pop() click to toggle source

Removes a command from Readline's history.

# File lib/byebug/history.rb, line 74
def pop
  self.size -= 1
  Readline::HISTORY.pop
end
push(cmd) click to toggle source

Adds a new command to Readline's history.

# File lib/byebug/history.rb, line 64
def push(cmd)
  return if ignore?(cmd)

  self.size += 1
  Readline::HISTORY.push(cmd)
end
restore() click to toggle source

Restores history from disk.

# File lib/byebug/history.rb, line 35
def restore
  return unless File.exist?(Setting[:histfile])

  File.readlines(Setting[:histfile]).reverse_each { |l| push(l.chomp) }
end
save() click to toggle source

Saves history to disk.

# File lib/byebug/history.rb, line 44
def save
  n_cmds = Setting[:histsize] > size ? size : Setting[:histsize]

  File.open(Setting[:histfile], "w") do |file|
    n_cmds.times { file.puts(pop) }
  end

  clear
end
specific_max_size(number) click to toggle source

Max number of commands to be displayed when a size has been specified.

The only bound here is not showing more items than available.

# File lib/byebug/history.rb, line 113
def specific_max_size(number)
  [self.size, number].min
end
to_s(n_cmds) click to toggle source

Prints the requested numbers of history entries.

# File lib/byebug/history.rb, line 82
def to_s(n_cmds)
  show_size = n_cmds ? specific_max_size(n_cmds) : default_max_size

  commands = buffer.last(show_size)

  last_ids(show_size).zip(commands).map do |l|
    format("%<position>5d  %<command>s", position: l[0], command: l[1])
  end.join("\n") + "\n"
end