class Byebug::SaveCommand

def description

def description
  %{save[ FILE]
    Saves current byebug state to FILE as a script file. This includes
    breakpoints, catchpoints, display expressions and some settings. If
    no filename is given, we will fabricate one.
    Use the "source" command in another debug session to restore them.}
end

def execute

def execute
  if not @match[1]
    file = open_save()
  else
    file = open(@match[1], 'w')
  end
  save_breakpoints(file)
  save_catchpoints(file)
  save_displays(file)
  save_settings(file)
  print "Saved to '#{file.path}'\n"
  if @state and @state.interface
    @state.interface.restart_file = file.path
  end
  file.close
end

def names

def names
  %w(save)
end

def regexp

def regexp
  /^\s* sa(?:ve)? (?:\s+(\S+))? \s*$/x
end

def save_breakpoints(file)

def save_breakpoints(file)
  Byebug.breakpoints.each do |b|
    file.puts "break #{b.source}:#{b.pos}#{" if #{b.expr}" if b.expr}"
  end
end

def save_catchpoints(file)

def save_catchpoints(file)
  Byebug.catchpoints.keys.each do |c|
    file.puts "catch #{c}"
  end
end

def save_displays(file)

def save_displays(file)
  for d in @state.display
    if d[0]
      file.puts "display #{d[1]}"
    end
  end
end

def save_settings(file)

def save_settings(file)
  # FIXME put routine in set
  %w(autoeval basename testing).each do |setting|
    on_off = show_onoff(Command.settings[setting.to_sym])
    file.puts "set #{setting} #{on_off}"
  end
  %w(autolist autoirb).each do |setting|
    on_off = show_onoff(Command.settings[setting.to_sym] > 0)
    file.puts "set #{setting} #{on_off}"
  end
end