def parse!(args=ARGV)
general, sub = split_args(args)
options.parse!(general)
command = general.shift
if command =~ /^(list|discover|install|source|unsource|sources|remove|update|about|search)$/
command = Commands.const_get(command.capitalize).new(self)
command.parse!(sub)
elsif command =~ /^(pack:install|pack:uninstall|pack:about)$/
command_name = command.split(':')[1]
command = Commands::Pack.const_get(command_name.capitalize).new(self)
command.parse!(sub)
else
puts "Unknown command: #{command}"
puts options
exit 1
end
end