Add -init switch to :prompt to set the initial text

Fixes #97
This commit is contained in:
Maxime Coste 2014-04-26 15:09:07 +01:00
parent 0c1b27cfa7
commit b370f91025
4 changed files with 24 additions and 12 deletions

View File

@ -1068,7 +1068,10 @@ const CommandDesc prompt_cmd = {
nullptr, nullptr,
"prompt <prompt> <register> <command>: prompt the use to enter a text string " "prompt <prompt> <register> <command>: prompt the use to enter a text string "
"stores it in <register> and then executes <command>", "stores it in <register> and then executes <command>",
ParameterDesc{ SwitchMap{}, ParameterDesc::Flags::None, 3, 3 }, ParameterDesc{
SwitchMap{ { "init", { true, "set initial prompt content" } } },
ParameterDesc::Flags::None, 3, 3
},
CommandFlags::None, CommandFlags::None,
CommandCompleter{}, CommandCompleter{},
[](const ParametersParser& params, Context& context) [](const ParametersParser& params, Context& context)
@ -1078,8 +1081,12 @@ const CommandDesc prompt_cmd = {
const char reg = params[1][0]; const char reg = params[1][0];
const String& command = params[2]; const String& command = params[2];
String initstr;
if (params.has_option("init"))
initstr = params.option_value("init");
context.input_handler().prompt( context.input_handler().prompt(
params[0], get_color("Prompt"), Completer{}, params[0], std::move(initstr), get_color("Prompt"), Completer{},
[=](const String& str, PromptEvent event, Context& context) [=](const String& str, PromptEvent event, Context& context)
{ {
if (event != PromptEvent::Validate) if (event != PromptEvent::Validate)

View File

@ -353,13 +353,15 @@ class Prompt : public InputMode
{ {
public: public:
Prompt(InputHandler& input_handler, const String& prompt, Prompt(InputHandler& input_handler, const String& prompt,
ColorPair colors, Completer completer, PromptCallback callback) String initstr, ColorPair colors, Completer completer,
PromptCallback callback)
: InputMode(input_handler), m_prompt(prompt), m_prompt_colors(colors), : InputMode(input_handler), m_prompt(prompt), m_prompt_colors(colors),
m_completer(completer), m_callback(callback) m_completer(completer), m_callback(callback)
{ {
m_history_it = ms_history[m_prompt].end(); m_history_it = ms_history[m_prompt].end();
if (context().options()["autoshowcompl"].get<bool>()) if (context().options()["autoshowcompl"].get<bool>())
refresh_completions(CompletionFlags::Fast); refresh_completions(CompletionFlags::Fast);
m_line_editor.reset(std::move(initstr));
display(); display();
} }
@ -1259,11 +1261,13 @@ void InputHandler::repeat_last_insert()
kak_assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr); kak_assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr);
} }
void InputHandler::prompt(const String& prompt, ColorPair prompt_colors, void InputHandler::prompt(const String& prompt, String initstr,
Completer completer, PromptCallback callback) ColorPair prompt_colors, Completer completer,
PromptCallback callback)
{ {
change_input_mode(new InputModes::Prompt(*this, prompt, prompt_colors, change_input_mode(new InputModes::Prompt(*this, prompt, initstr,
completer, callback)); prompt_colors, completer,
callback));
} }
void InputHandler::set_prompt_colors(ColorPair prompt_colors) void InputHandler::set_prompt_colors(ColorPair prompt_colors)

View File

@ -47,8 +47,9 @@ public:
// abort or validation with corresponding PromptEvent value // abort or validation with corresponding PromptEvent value
// returns to normal mode after validation if callback does // returns to normal mode after validation if callback does
// not change the mode itself // not change the mode itself
void prompt(const String& prompt, ColorPair prompt_colors, void prompt(const String& prompt, String initstr,
Completer completer, PromptCallback callback); ColorPair prompt_colors, Completer completer,
PromptCallback callback);
void set_prompt_colors(ColorPair prompt_colors); void set_prompt_colors(ColorPair prompt_colors);
// enter menu mode, callback is called on each selection change, // enter menu mode, callback is called on each selection change,

View File

@ -426,7 +426,7 @@ void for_each_char(Context& context, int)
void command(Context& context, int) void command(Context& context, int)
{ {
context.input_handler().prompt( context.input_handler().prompt(
":", get_color("Prompt"), ":", "", get_color("Prompt"),
std::bind(&CommandManager::complete, &CommandManager::instance(), _1, _2, _3, _4), std::bind(&CommandManager::complete, &CommandManager::instance(), _1, _2, _3, _4),
[](const String& cmdline, PromptEvent event, Context& context) { [](const String& cmdline, PromptEvent event, Context& context) {
if (context.has_ui()) if (context.has_ui())
@ -451,7 +451,7 @@ template<InsertMode mode>
void pipe(Context& context, int) void pipe(Context& context, int)
{ {
const char* prompt = mode == InsertMode::Replace ? "pipe:" : "pipe (ins):"; const char* prompt = mode == InsertMode::Replace ? "pipe:" : "pipe (ins):";
context.input_handler().prompt(prompt, get_color("Prompt"), shell_complete, context.input_handler().prompt(prompt, "", get_color("Prompt"), shell_complete,
[](const String& cmdline, PromptEvent event, Context& context) [](const String& cmdline, PromptEvent event, Context& context)
{ {
if (event != PromptEvent::Validate) if (event != PromptEvent::Validate)
@ -589,7 +589,7 @@ template<typename T>
void regex_prompt(Context& context, const String prompt, T func) void regex_prompt(Context& context, const String prompt, T func)
{ {
DynamicSelectionList selections{context.buffer(), context.selections()}; DynamicSelectionList selections{context.buffer(), context.selections()};
context.input_handler().prompt(prompt, get_color("Prompt"), complete_nothing, context.input_handler().prompt(prompt, "", get_color("Prompt"), complete_nothing,
[=](const String& str, PromptEvent event, Context& context) { [=](const String& str, PromptEvent event, Context& context) {
try try
{ {