diff --git a/src/main.cc b/src/main.cc index 1c37fbfc..27f8f09e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -529,13 +529,21 @@ Buffer* open_or_create(const std::string& filename) return buffer; } +template void edit(const CommandParameters& params, const Context& context) { if (params.size() != 1) throw wrong_argument_count(); std::string filename = params[0]; - main_context = Context(*open_or_create(filename)->get_or_create_window()); + + Buffer* buffer = nullptr; + if (not force_reload) + buffer = BufferManager::instance().get_buffer(filename); + if (not buffer) + buffer = open_or_create(filename); + + main_context = Context(*buffer->get_or_create_window()); } void write_buffer(const CommandParameters& params, const Context& context) @@ -1145,7 +1153,10 @@ int main(int argc, char* argv[]) FilterRegistry filter_registry; GlobalHooksManager hooks_manager; - command_manager.register_commands({ "e", "edit" }, edit, + command_manager.register_commands({ "e", "edit" }, edit, + CommandManager::None, + PerArgumentCommandCompleter({ complete_filename })); + command_manager.register_commands({ "e!", "edit!" }, edit, CommandManager::None, PerArgumentCommandCompleter({ complete_filename })); command_manager.register_commands({ "q", "quit" }, quit);