diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-04-04 19:03:59 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-04-04 19:09:19 +0200 |
| commit | 6e2fa38c15e7e1bdb50498697b22a195782a4018 (patch) | |
| tree | 048afc8cdb6d52fa1079ce8f50ec3611fbe724e4 /src/input_handler.cc | |
| parent | f540566b1b4565f9306101c67fa51776ff7dc0dc (diff) | |
InputHandler::prompt takes a color pair to use
Diffstat (limited to 'src/input_handler.cc')
| -rw-r--r-- | src/input_handler.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index cb9cabbf..1222b379 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -286,12 +286,12 @@ class Prompt : public InputMode { public: Prompt(InputHandler& input_handler, const String& prompt, - Completer completer, PromptCallback callback) - : InputMode(input_handler), m_prompt(prompt), + 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(); - context().ui().print_status(line_with_cursor(m_prompt, m_prompt.char_length())); + display(); } void on_key(const Key& key) override @@ -429,15 +429,22 @@ public: m_current_completion = -1; m_line_editor.handle_key(key); } - auto curpos = m_prompt.char_length() + m_line_editor.cursor_pos(); - context().ui().print_status(line_with_cursor(m_prompt + line, curpos)); + display(); m_callback(line, PromptEvent::Change, context()); } 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; Completer m_completer; const String m_prompt; + ColorPair m_prompt_colors; Completions m_completions; int m_current_completion = -1; String m_prefix; @@ -784,11 +791,12 @@ void InputHandler::repeat_last_insert() assert(dynamic_cast<InputModes::Normal*>(m_mode.get()) != nullptr); } -void InputHandler::prompt(const String& prompt, Completer completer, - PromptCallback callback) +void InputHandler::prompt(const String& prompt, ColorPair prompt_colors, + Completer completer, PromptCallback callback) { 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, |
