InputHandler::prompt takes a color pair to use
This commit is contained in:
parent
f540566b1b
commit
6e2fa38c15
|
@ -411,6 +411,7 @@ there are some builtins color aliases:
|
||||||
* +Error+: colors of error messages
|
* +Error+: colors of error messages
|
||||||
* +StatusLine+: colors used for the status line
|
* +StatusLine+: colors used for the status line
|
||||||
* +StatusCursor+: colors used for the status line cursor
|
* +StatusCursor+: colors used for the status line cursor
|
||||||
|
* +Prompt+: colors used prompt displayed on the status line
|
||||||
|
|
||||||
Shell expansion
|
Shell expansion
|
||||||
---------------
|
---------------
|
||||||
|
|
|
@ -52,6 +52,7 @@ ColorRegistry::ColorRegistry()
|
||||||
{ "Error", { Color::Black, Color::Red } },
|
{ "Error", { Color::Black, Color::Red } },
|
||||||
{ "StatusLine", { Color::Cyan, Color::Default } },
|
{ "StatusLine", { Color::Cyan, Color::Default } },
|
||||||
{ "StatusCursor", { Color::Black, Color::Cyan } },
|
{ "StatusCursor", { Color::Black, Color::Cyan } },
|
||||||
|
{ "Prompt", { Color::Cyan, Color::Blue} },
|
||||||
}
|
}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -286,12 +286,12 @@ class Prompt : public InputMode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Prompt(InputHandler& input_handler, const String& prompt,
|
Prompt(InputHandler& input_handler, const String& prompt,
|
||||||
Completer completer, PromptCallback callback)
|
ColorPair colors, Completer completer, PromptCallback callback)
|
||||||
: InputMode(input_handler), m_prompt(prompt),
|
: 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();
|
||||||
context().ui().print_status(line_with_cursor(m_prompt, m_prompt.char_length()));
|
display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(const Key& key) override
|
||||||
|
@ -429,15 +429,22 @@ public:
|
||||||
m_current_completion = -1;
|
m_current_completion = -1;
|
||||||
m_line_editor.handle_key(key);
|
m_line_editor.handle_key(key);
|
||||||
}
|
}
|
||||||
auto curpos = m_prompt.char_length() + m_line_editor.cursor_pos();
|
display();
|
||||||
context().ui().print_status(line_with_cursor(m_prompt + line, curpos));
|
|
||||||
m_callback(line, PromptEvent::Change, context());
|
m_callback(line, PromptEvent::Change, context());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void display() const
|
||||||
|
{
|
||||||
|
auto display_line = line_with_cursor(m_line_editor.line(), m_line_editor.cursor_pos());
|
||||||
|
display_line.insert(display_line.begin(), { m_prompt, m_prompt_colors });
|
||||||
|
context().ui().print_status(display_line);
|
||||||
|
}
|
||||||
|
|
||||||
PromptCallback m_callback;
|
PromptCallback m_callback;
|
||||||
Completer m_completer;
|
Completer m_completer;
|
||||||
const String m_prompt;
|
const String m_prompt;
|
||||||
|
ColorPair m_prompt_colors;
|
||||||
Completions m_completions;
|
Completions m_completions;
|
||||||
int m_current_completion = -1;
|
int m_current_completion = -1;
|
||||||
String m_prefix;
|
String m_prefix;
|
||||||
|
@ -784,11 +791,12 @@ void InputHandler::repeat_last_insert()
|
||||||
assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr);
|
assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputHandler::prompt(const String& prompt, Completer completer,
|
void InputHandler::prompt(const String& prompt, ColorPair prompt_colors,
|
||||||
PromptCallback callback)
|
Completer completer, PromptCallback callback)
|
||||||
{
|
{
|
||||||
m_mode_trash.emplace_back(std::move(m_mode));
|
m_mode_trash.emplace_back(std::move(m_mode));
|
||||||
m_mode.reset(new InputModes::Prompt(*this, prompt, completer, callback));
|
m_mode.reset(new InputModes::Prompt(*this, prompt, prompt_colors,
|
||||||
|
completer, callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputHandler::menu(const memoryview<String>& choices,
|
void InputHandler::menu(const memoryview<String>& choices,
|
||||||
|
|
|
@ -47,8 +47,8 @@ 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, Completer completer,
|
void prompt(const String& prompt, ColorPair prompt_colors,
|
||||||
PromptCallback callback);
|
Completer completer, PromptCallback callback);
|
||||||
|
|
||||||
// enter menu mode, callback is called on each selection change,
|
// enter menu mode, callback is called on each selection change,
|
||||||
// abort or validation with corresponding MenuEvent value
|
// abort or validation with corresponding MenuEvent value
|
||||||
|
|
15
src/main.cc
15
src/main.cc
|
@ -145,7 +145,8 @@ void do_swap_case(Context& context)
|
||||||
void do_command(Context& context)
|
void do_command(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().prompt(
|
context.input_handler().prompt(
|
||||||
":", std::bind(&CommandManager::complete, &CommandManager::instance(), _1, _2, _3),
|
":", get_color("StatusLine"),
|
||||||
|
std::bind(&CommandManager::complete, &CommandManager::instance(), _1, _2, _3),
|
||||||
[](const String& cmdline, PromptEvent event, Context& context) {
|
[](const String& cmdline, PromptEvent event, Context& context) {
|
||||||
if (event == PromptEvent::Validate)
|
if (event == PromptEvent::Validate)
|
||||||
CommandManager::instance().execute(cmdline, context);
|
CommandManager::instance().execute(cmdline, context);
|
||||||
|
@ -154,7 +155,7 @@ void do_command(Context& context)
|
||||||
|
|
||||||
void do_pipe(Context& context)
|
void do_pipe(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().prompt("|", complete_nothing,
|
context.input_handler().prompt("|", get_color("StatusLine"), complete_nothing,
|
||||||
[](const String& cmdline, PromptEvent event, Context& context)
|
[](const String& cmdline, PromptEvent event, Context& context)
|
||||||
{
|
{
|
||||||
if (event != PromptEvent::Validate)
|
if (event != PromptEvent::Validate)
|
||||||
|
@ -174,7 +175,7 @@ template<SelectMode mode, bool forward>
|
||||||
void do_search(Context& context)
|
void do_search(Context& context)
|
||||||
{
|
{
|
||||||
SelectionList selections = context.editor().selections();
|
SelectionList selections = context.editor().selections();
|
||||||
context.input_handler().prompt("/", complete_nothing,
|
context.input_handler().prompt("/", get_color("StatusLine"), complete_nothing,
|
||||||
[selections](const String& str, PromptEvent event, Context& context) {
|
[selections](const String& str, PromptEvent event, Context& context) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -313,7 +314,7 @@ void do_paste(Context& context)
|
||||||
|
|
||||||
void do_select_regex(Context& context)
|
void do_select_regex(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().prompt("select: ", complete_nothing,
|
context.input_handler().prompt("select: ", get_color("Prompt"), complete_nothing,
|
||||||
[](const String& str, PromptEvent event, Context& context) {
|
[](const String& str, PromptEvent event, Context& context) {
|
||||||
if (event == PromptEvent::Validate)
|
if (event == PromptEvent::Validate)
|
||||||
{
|
{
|
||||||
|
@ -330,7 +331,7 @@ void do_select_regex(Context& context)
|
||||||
|
|
||||||
void do_split_regex(Context& context)
|
void do_split_regex(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().prompt("split: ", complete_nothing,
|
context.input_handler().prompt("split: ", get_color("Prompt"), complete_nothing,
|
||||||
[](const String& str, PromptEvent event, Context& context) {
|
[](const String& str, PromptEvent event, Context& context) {
|
||||||
if (event == PromptEvent::Validate)
|
if (event == PromptEvent::Validate)
|
||||||
{
|
{
|
||||||
|
@ -375,7 +376,7 @@ template<bool matching>
|
||||||
void do_keep(Context& context)
|
void do_keep(Context& context)
|
||||||
{
|
{
|
||||||
constexpr const char* prompt = matching ? "keep matching: " : "keep not matching: ";
|
constexpr const char* prompt = matching ? "keep matching: " : "keep not matching: ";
|
||||||
context.input_handler().prompt(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) {
|
||||||
if (event == PromptEvent::Validate)
|
if (event == PromptEvent::Validate)
|
||||||
{
|
{
|
||||||
|
@ -484,7 +485,7 @@ void do_rotate_selections(Context& context)
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
count = 1;
|
count = 1;
|
||||||
context.editor().rotate_selections(count);
|
context.editor().rotate_selections(count);
|
||||||
};
|
}
|
||||||
|
|
||||||
enum class SelectFlags
|
enum class SelectFlags
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user