diff --git a/lib/msf/ui/console/command_dispatcher/core.rb b/lib/msf/ui/console/command_dispatcher/core.rb index efc65be435..4d2781e94a 100644 --- a/lib/msf/ui/console/command_dispatcher/core.rb +++ b/lib/msf/ui/console/command_dispatcher/core.rb @@ -107,6 +107,7 @@ class Core "connect" => "Communicate with a host", "color" => "Toggle color", "exit" => "Exit the console", + "edit" => "Edit the current module with $VISUAL or $EDITOR", "go_pro" => "Launch Metasploit web GUI", "grep" => "Grep the output of another command", "help" => "Help menu", @@ -627,6 +628,37 @@ class Core true end + def local_editor + Rex::Compat.getenv('VISUAL') || Rex::Compat.getenv('EDITOR') || '/usr/bin/vim' + end + + def cmd_edit_help + msg = "Edit the currently active module" + msg = "#{msg} #{local_editor ? "with #{local_editor}" : "($VISUAL or $EDITOR must be set first)"}." + print_line "Usage: edit" + print_line + print_line msg + print_line "When done editing, you must reload the module with 'reload' or 'rexploit'." + print_line + end + + # + # Edit the currently active module + # + def cmd_edit + unless local_editor + print_error "$VISUAL or $EDITOR must be set first. Try 'export EDITOR=/usr/bin/vim'" + return + end + if active_module + path = active_module.file_path + print_status "Launching #{local_editor} #{path}" + system(local_editor,path) + else + print_error "Nothing to edit -- try using a module first." + end + end + # # Instructs the driver to stop executing. # diff --git a/plugins/editor.rb b/plugins/editor.rb deleted file mode 100644 index f460d86c59..0000000000 --- a/plugins/editor.rb +++ /dev/null @@ -1,87 +0,0 @@ -# -# $Id$ -# $Revision$ -# - -module Msf - -### -# -# This plugin is a simple editor command, designed to make it easy to edit modules in the console. -# -### -class Plugin::Editor < Msf::Plugin - - ### - # - # This class implements a single edit command. - # - ### - class EditorCommandDispatcher - include Msf::Ui::Console::ModuleCommandDispatcher - - # - # The dispatcher's name. - # - def name - "Editor" - end - - # - # Returns the hash of commands supported by this dispatcher. - # - def commands - # Don't update super here since we don't want the commands from - # super, just the methods - { - "edit" => "A handy editor commmand" - } - end - - # - # This method handles the edit command. - # - def cmd_edit(*args) - print_line("Launching editor...") - - e = Rex::Compat.getenv("EDITOR") || "vi" - - if (not mod) or (not (path = mod.file_path)) - print_line("Error: No active module selected") - return nil - end - - ret = system(e, path) - if not ret - print_line("Failed to execute your editor (#{e})") - return - end - - reload - ret - end - end - - def initialize(framework, opts) - super - - # console dispatcher commands. - add_console_dispatcher(EditorCommandDispatcher) - end - - def cleanup - remove_console_dispatcher('Editor') - end - - def name - "editor" - end - - def desc - "Simple Editor Plugin" - end - -protected -end - -end