Show an info box with available option when waiting for a key
Controled with the autoinfo option (disabled by default)
This commit is contained in:
parent
c91cea9dc3
commit
585c8ba3cf
|
@ -14,6 +14,7 @@
|
||||||
#include "shell_manager.hh"
|
#include "shell_manager.hh"
|
||||||
#include "string.hh"
|
#include "string.hh"
|
||||||
#include "window.hh"
|
#include "window.hh"
|
||||||
|
#include "user_interface.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,17 @@ void repeat_insert(Context& context)
|
||||||
context.input_handler().repeat_last_insert();
|
context.input_handler().repeat_last_insert();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool show_auto_info_ifn(const String& info, const Context& context)
|
||||||
|
{
|
||||||
|
if (not context.options()["autoinfo"].get<bool>() or not context.has_ui())
|
||||||
|
return false;
|
||||||
|
ColorPair col{ Colors::Black, Colors::Yellow };
|
||||||
|
DisplayCoord pos = context.window().dimensions();
|
||||||
|
pos.column -= 1;
|
||||||
|
context.ui().info_show(info, pos , col, MenuStyle::Inline);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
template<SelectMode mode>
|
template<SelectMode mode>
|
||||||
void goto_commands(Context& context)
|
void goto_commands(Context& context)
|
||||||
{
|
{
|
||||||
|
@ -46,7 +58,22 @@ void goto_commands(Context& context)
|
||||||
context.window().center_selection();
|
context.window().center_selection();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
context.input_handler().on_next_key([](const Key& key, Context& context) {
|
{
|
||||||
|
const bool hide = show_auto_info_ifn("╭────────┤goto├───────╮\n"
|
||||||
|
"│ g,k: buffer top │\n"
|
||||||
|
"│ l: line end │\n"
|
||||||
|
"│ h: line begin │\n"
|
||||||
|
"│ j: buffer bottom │\n"
|
||||||
|
"│ e: buffer end │\n"
|
||||||
|
"│ t: window top │\n"
|
||||||
|
"│ b: window bottom │\n"
|
||||||
|
"│ c: window center │\n"
|
||||||
|
"│ a: last buffer │\n"
|
||||||
|
"│ f: file │\n"
|
||||||
|
"╰─────────────────────╯\n", context);
|
||||||
|
context.input_handler().on_next_key([=](const Key& key, Context& context) {
|
||||||
|
if (hide)
|
||||||
|
context.ui().info_hide();
|
||||||
if (key.modifiers != Key::Modifiers::None)
|
if (key.modifiers != Key::Modifiers::None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -130,11 +157,21 @@ void goto_commands(Context& context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void view_commands(Context& context)
|
void view_commands(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().on_next_key([](const Key& key, Context& context) {
|
const bool hide = show_auto_info_ifn("╭─────────┤view├─────────╮\n"
|
||||||
|
"│ v,c: center cursor │\n"
|
||||||
|
"│ t: cursor on top │\n"
|
||||||
|
"│ b: cursor on bottom │\n"
|
||||||
|
"│ j: scroll down │\n"
|
||||||
|
"│ k: scroll up │\n"
|
||||||
|
"╰────────────────────────╯\n", context);
|
||||||
|
context.input_handler().on_next_key([hide](const Key& key, Context& context) {
|
||||||
|
if (hide)
|
||||||
|
context.ui().info_hide();
|
||||||
if (key.modifiers != Key::Modifiers::None or not context.has_window())
|
if (key.modifiers != Key::Modifiers::None or not context.has_window())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -504,8 +541,22 @@ void deindent(Context& context)
|
||||||
template<ObjectFlags flags>
|
template<ObjectFlags flags>
|
||||||
void select_object(Context& context)
|
void select_object(Context& context)
|
||||||
{
|
{
|
||||||
|
const bool hide = show_auto_info_ifn("╭──────┤select object├───────╮\n"
|
||||||
|
"│ b,(,): parenthesis block │\n"
|
||||||
|
"│ B,{,}: braces block │\n"
|
||||||
|
"│ [,]: brackets block │\n"
|
||||||
|
"│ <,>: angle block │\n"
|
||||||
|
"│ \": double quote string │\n"
|
||||||
|
"│ ': single quote string │\n"
|
||||||
|
"│ w: word │\n"
|
||||||
|
"│ W: WORD │\n"
|
||||||
|
"│ s: sentence │\n"
|
||||||
|
"│ p: paragraph │\n"
|
||||||
|
"╰────────────────────────────╯\n", context);
|
||||||
context.input_handler().on_next_key(
|
context.input_handler().on_next_key(
|
||||||
[](const Key& key, Context& context) {
|
[=](const Key& key, Context& context) {
|
||||||
|
if (hide)
|
||||||
|
context.ui().info_hide();
|
||||||
typedef std::function<Selection (const Selection&)> Selector;
|
typedef std::function<Selection (const Selection&)> Selector;
|
||||||
static const std::unordered_map<Key, Selector> key_to_selector =
|
static const std::unordered_map<Key, Selector> key_to_selector =
|
||||||
{
|
{
|
||||||
|
|
|
@ -116,6 +116,7 @@ GlobalOptions::GlobalOptions()
|
||||||
declare_option<String>("shell", "bash");
|
declare_option<String>("shell", "bash");
|
||||||
declare_option<bool>("complete_prefix", true);
|
declare_option<bool>("complete_prefix", true);
|
||||||
declare_option<bool>("incsearch", true);
|
declare_option<bool>("incsearch", true);
|
||||||
|
declare_option<bool>("autoinfo", false);
|
||||||
declare_option<Regex>("ignored_files", Regex{R"(^(\..*|.*\.(o|so|a))$)"});
|
declare_option<Regex>("ignored_files", Regex{R"(^(\..*|.*\.(o|so|a))$)"});
|
||||||
declare_option<String>("filetype", "");
|
declare_option<String>("filetype", "");
|
||||||
declare_option<std::vector<String>>("completions", {});
|
declare_option<std::vector<String>>("completions", {});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user