summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-04-26 15:09:07 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-04-27 12:37:41 +0100
commitb370f91025a6847fe3204e34f5e9016b34ef4f0f (patch)
tree2b5be86a0727082149768dea05f3c0f5cafc9480 /src
parent0c1b27cfa7d85f08677e7784580c2869ad6602cd (diff)
Add -init switch to :prompt to set the initial text
Fixes #97
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc11
-rw-r--r--src/input_handler.cc14
-rw-r--r--src/input_handler.hh5
-rw-r--r--src/normal.cc6
4 files changed, 24 insertions, 12 deletions
diff --git a/src/commands.cc b/src/commands.cc
index 7a621647..ae0115a7 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -1068,7 +1068,10 @@ const CommandDesc prompt_cmd = {
nullptr,
"prompt <prompt> <register> <command>: prompt the use to enter a text string "
"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,
CommandCompleter{},
[](const ParametersParser& params, Context& context)
@@ -1078,8 +1081,12 @@ const CommandDesc prompt_cmd = {
const char reg = params[1][0];
const String& command = params[2];
+ String initstr;
+ if (params.has_option("init"))
+ initstr = params.option_value("init");
+
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)
{
if (event != PromptEvent::Validate)
diff --git a/src/input_handler.cc b/src/input_handler.cc
index 49c02367..d7274b6d 100644
--- a/src/input_handler.cc
+++ b/src/input_handler.cc
@@ -353,13 +353,15 @@ class Prompt : public InputMode
{
public:
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),
m_completer(completer), m_callback(callback)
{
m_history_it = ms_history[m_prompt].end();
if (context().options()["autoshowcompl"].get<bool>())
refresh_completions(CompletionFlags::Fast);
+ m_line_editor.reset(std::move(initstr));
display();
}
@@ -1259,11 +1261,13 @@ void InputHandler::repeat_last_insert()
kak_assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr);
}
-void InputHandler::prompt(const String& prompt, ColorPair prompt_colors,
- Completer completer, PromptCallback callback)
+void InputHandler::prompt(const String& prompt, String initstr,
+ ColorPair prompt_colors, Completer completer,
+ PromptCallback callback)
{
- change_input_mode(new InputModes::Prompt(*this, prompt, prompt_colors,
- completer, callback));
+ change_input_mode(new InputModes::Prompt(*this, prompt, initstr,
+ prompt_colors, completer,
+ callback));
}
void InputHandler::set_prompt_colors(ColorPair prompt_colors)
diff --git a/src/input_handler.hh b/src/input_handler.hh
index 1d2e992e..0d9d34cc 100644
--- a/src/input_handler.hh
+++ b/src/input_handler.hh
@@ -47,8 +47,9 @@ public:
// abort or validation with corresponding PromptEvent value
// returns to normal mode after validation if callback does
// not change the mode itself
- void prompt(const String& prompt, ColorPair prompt_colors,
- Completer completer, PromptCallback callback);
+ void prompt(const String& prompt, String initstr,
+ ColorPair prompt_colors, Completer completer,
+ PromptCallback callback);
void set_prompt_colors(ColorPair prompt_colors);
// enter menu mode, callback is called on each selection change,
diff --git a/src/normal.cc b/src/normal.cc
index 8b691190..1e2edd82 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -426,7 +426,7 @@ void for_each_char(Context& context, int)
void command(Context& context, int)
{
context.input_handler().prompt(
- ":", get_color("Prompt"),
+ ":", "", get_color("Prompt"),
std::bind(&CommandManager::complete, &CommandManager::instance(), _1, _2, _3, _4),
[](const String& cmdline, PromptEvent event, Context& context) {
if (context.has_ui())
@@ -451,7 +451,7 @@ template<InsertMode mode>
void pipe(Context& context, int)
{
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)
{
if (event != PromptEvent::Validate)
@@ -589,7 +589,7 @@ template<typename T>
void regex_prompt(Context& context, const String prompt, T func)
{
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) {
try
{