Method: Rex::Ui::Text::DispatcherShell::CommandDispatcher#tab_complete_generic
- Defined in:
- lib/rex/ui/text/dispatcher_shell.rb
#tab_complete_generic(fmt, str, words) ⇒ Object
Provide a generic tab completion function based on the specification pass as fmt. The fmt argument in a hash where values are an array defining how the command should be completed. The first element of the array can be one of:
nil - This argument is a flag and takes no option.
true - This argument takes an option with no suggestions.
:address - This option is a source address.
:bool - This option is a boolean.
:file - This option is a file path.
Array - This option is an array of possible values.
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 |
# File 'lib/rex/ui/text/dispatcher_shell.rb', line 337 def tab_complete_generic(fmt, str, words) last_word = words[-1] fmt = fmt.select { |key, value| last_word == key || !words.include?(key) } val = fmt[last_word] return fmt.keys if !val # the last word does not look like a fmtspec arg = val[0] return fmt.keys if !arg # the last word is a fmtspec that takes no argument tabs = [] if arg.to_s.to_sym == :address tabs = tab_complete_source_address elsif arg.to_s.to_sym == :bool tabs = ['true', 'false'] elsif arg.to_s.to_sym == :file tabs = tab_complete_filenames(str, words) elsif arg.kind_of?(Array) tabs = arg.map {|a| a.to_s} end tabs end |