Key: always pass by value
This commit is contained in:
parent
eedd37c09a
commit
a4138201b0
|
@ -24,7 +24,7 @@ public:
|
||||||
InputMode(const InputMode&) = delete;
|
InputMode(const InputMode&) = delete;
|
||||||
InputMode& operator=(const InputMode&) = delete;
|
InputMode& operator=(const InputMode&) = delete;
|
||||||
|
|
||||||
virtual void on_key(const Key& key) = 0;
|
virtual void on_key(Key key) = 0;
|
||||||
Context& context() const { return m_input_handler.context(); }
|
Context& context() const { return m_input_handler.context(); }
|
||||||
|
|
||||||
using Insertion = InputHandler::Insertion;
|
using Insertion = InputHandler::Insertion;
|
||||||
|
@ -58,7 +58,7 @@ public:
|
||||||
context().hooks().run_hook("NormalEnd", "", context());
|
context().hooks().run_hook("NormalEnd", "", context());
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(Key key) override
|
||||||
{
|
{
|
||||||
if (key.modifiers == Key::Modifiers::None and isdigit(key.key))
|
if (key.modifiers == Key::Modifiers::None and isdigit(key.key))
|
||||||
m_count = m_count * 10 + key.key - '0';
|
m_count = m_count * 10 + key.key - '0';
|
||||||
|
@ -84,7 +84,7 @@ private:
|
||||||
class LineEditor
|
class LineEditor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void handle_key(const Key& key)
|
void handle_key(Key key)
|
||||||
{
|
{
|
||||||
if (key == Key::Left or
|
if (key == Key::Left or
|
||||||
key == Key{Key::Modifiers::Control, 'b'})
|
key == Key{Key::Modifiers::Control, 'b'})
|
||||||
|
@ -172,7 +172,7 @@ public:
|
||||||
get_color("MenuBackground"), MenuStyle::Prompt);
|
get_color("MenuBackground"), MenuStyle::Prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(Key key) override
|
||||||
{
|
{
|
||||||
auto match_filter = [this](const String& str) {
|
auto match_filter = [this](const String& str) {
|
||||||
return boost::regex_match(str.begin(), str.end(), m_filter);
|
return boost::regex_match(str.begin(), str.end(), m_filter);
|
||||||
|
@ -299,7 +299,7 @@ public:
|
||||||
display();
|
display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(Key key) override
|
||||||
{
|
{
|
||||||
std::vector<String>& history = ms_history[m_prompt];
|
std::vector<String>& history = ms_history[m_prompt];
|
||||||
const String& line = m_line_editor.line();
|
const String& line = m_line_editor.line();
|
||||||
|
@ -476,7 +476,7 @@ public:
|
||||||
NextKey(InputHandler& input_handler, KeyCallback callback)
|
NextKey(InputHandler& input_handler, KeyCallback callback)
|
||||||
: InputMode(input_handler), m_callback(callback) {}
|
: InputMode(input_handler), m_callback(callback) {}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(Key key) override
|
||||||
{
|
{
|
||||||
reset_normal_mode();
|
reset_normal_mode();
|
||||||
m_callback(key, context());
|
m_callback(key, context());
|
||||||
|
@ -746,7 +746,7 @@ public:
|
||||||
context().hooks().run_hook("InsertBegin", "", context());
|
context().hooks().run_hook("InsertBegin", "", context());
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_key(const Key& key) override
|
void on_key(Key key) override
|
||||||
{
|
{
|
||||||
if (&context().editor() != &m_inserter.editor())
|
if (&context().editor() != &m_inserter.editor())
|
||||||
return reset_normal_mode().on_key(key);
|
return reset_normal_mode().on_key(key);
|
||||||
|
@ -892,7 +892,7 @@ void InputHandler::on_next_key(KeyCallback callback)
|
||||||
m_mode.reset(new InputModes::NextKey(*this, callback));
|
m_mode.reset(new InputModes::NextKey(*this, callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_valid(const Key& key)
|
bool is_valid(Key key)
|
||||||
{
|
{
|
||||||
return key != Key::Invalid and key.key <= 0x10FFFF;
|
return key != Key::Invalid and key.key <= 0x10FFFF;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ enum class PromptEvent
|
||||||
Validate
|
Validate
|
||||||
};
|
};
|
||||||
using PromptCallback = std::function<void (const String&, PromptEvent, Context&)>;
|
using PromptCallback = std::function<void (const String&, PromptEvent, Context&)>;
|
||||||
using KeyCallback = std::function<void (const Key&, Context&)>;
|
using KeyCallback = std::function<void (Key, Context&)>;
|
||||||
|
|
||||||
class InputMode;
|
class InputMode;
|
||||||
enum class InsertMode : unsigned;
|
enum class InsertMode : unsigned;
|
||||||
|
|
|
@ -87,7 +87,7 @@ KeyList parse_keys(const String& str)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
String key_to_str(const Key& key)
|
String key_to_str(Key key)
|
||||||
{
|
{
|
||||||
bool named = false;
|
bool named = false;
|
||||||
String res;
|
String res;
|
||||||
|
|
|
@ -44,17 +44,17 @@ struct Key
|
||||||
constexpr Key(Codepoint key)
|
constexpr Key(Codepoint key)
|
||||||
: modifiers(Modifiers::None), key(key) {}
|
: modifiers(Modifiers::None), key(key) {}
|
||||||
|
|
||||||
constexpr bool operator==(const Key& other) const
|
constexpr bool operator==(Key other) const
|
||||||
{ return modifiers == other.modifiers and key == other.key; }
|
{ return modifiers == other.modifiers and key == other.key; }
|
||||||
|
|
||||||
constexpr bool operator!=(const Key& other) const
|
constexpr bool operator!=(Key other) const
|
||||||
{ return modifiers != other.modifiers or key != other.key; }
|
{ return modifiers != other.modifiers or key != other.key; }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Key> KeyList;
|
typedef std::vector<Key> KeyList;
|
||||||
|
|
||||||
KeyList parse_keys(const String& str);
|
KeyList parse_keys(const String& str);
|
||||||
String key_to_str(const Key& key);
|
String key_to_str(Key key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ namespace std
|
||||||
template<>
|
template<>
|
||||||
struct hash<Kakoune::Key> : unary_function<const Kakoune::Key&, size_t>
|
struct hash<Kakoune::Key> : unary_function<const Kakoune::Key&, size_t>
|
||||||
{
|
{
|
||||||
size_t operator()(const Kakoune::Key& key) const
|
size_t operator()(Kakoune::Key key) const
|
||||||
{
|
{
|
||||||
return static_cast<size_t>(key.modifiers) * 1024 + key.key;
|
return static_cast<size_t>(key.modifiers) * 1024 + key.key;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ void goto_commands(Context& context)
|
||||||
"│ a: last buffer │\n"
|
"│ a: last buffer │\n"
|
||||||
"│ f: file │\n"
|
"│ f: file │\n"
|
||||||
"╰─────────────────────╯\n", context);
|
"╰─────────────────────╯\n", context);
|
||||||
context.input_handler().on_next_key([=](const Key& key, Context& context) {
|
context.input_handler().on_next_key([=](Key key, Context& context) {
|
||||||
if (hide)
|
if (hide)
|
||||||
context.ui().info_hide();
|
context.ui().info_hide();
|
||||||
if (key.modifiers != Key::Modifiers::None)
|
if (key.modifiers != Key::Modifiers::None)
|
||||||
|
@ -169,7 +169,7 @@ void view_commands(Context& context)
|
||||||
"│ j: scroll down │\n"
|
"│ j: scroll down │\n"
|
||||||
"│ k: scroll up │\n"
|
"│ k: scroll up │\n"
|
||||||
"╰────────────────────────╯\n", context);
|
"╰────────────────────────╯\n", context);
|
||||||
context.input_handler().on_next_key([hide](const Key& key, Context& context) {
|
context.input_handler().on_next_key([hide](Key key, Context& context) {
|
||||||
if (hide)
|
if (hide)
|
||||||
context.ui().info_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())
|
||||||
|
@ -206,7 +206,7 @@ void view_commands(Context& context)
|
||||||
|
|
||||||
void replace_with_char(Context& context)
|
void replace_with_char(Context& context)
|
||||||
{
|
{
|
||||||
context.input_handler().on_next_key([](const Key& key, Context& context) {
|
context.input_handler().on_next_key([](Key key, Context& context) {
|
||||||
if (not isprint(key.key))
|
if (not isprint(key.key))
|
||||||
return;
|
return;
|
||||||
Editor& editor = context.editor();
|
Editor& editor = context.editor();
|
||||||
|
@ -573,7 +573,7 @@ void select_object(Context& context)
|
||||||
"│ p: paragraph │\n"
|
"│ p: paragraph │\n"
|
||||||
"╰────────────────────────────╯\n", context);
|
"╰────────────────────────────╯\n", context);
|
||||||
context.input_handler().on_next_key(
|
context.input_handler().on_next_key(
|
||||||
[=](const Key& key, Context& context) {
|
[=](Key key, Context& context) {
|
||||||
if (hide)
|
if (hide)
|
||||||
context.ui().info_hide();
|
context.ui().info_hide();
|
||||||
typedef std::function<Selection (const Buffer&, const Selection&)> Selector;
|
typedef std::function<Selection (const Buffer&, const Selection&)> Selector;
|
||||||
|
@ -660,7 +660,7 @@ template<SelectFlags flags>
|
||||||
void select_to_next_char(Context& context)
|
void select_to_next_char(Context& context)
|
||||||
{
|
{
|
||||||
int param = context.numeric_param();
|
int param = context.numeric_param();
|
||||||
context.input_handler().on_next_key([param](const Key& key, Context& context) {
|
context.input_handler().on_next_key([param](Key key, Context& context) {
|
||||||
context.editor().select(
|
context.editor().select(
|
||||||
std::bind(flags & SelectFlags::Reverse ? select_to_reverse : select_to,
|
std::bind(flags & SelectFlags::Reverse ? select_to_reverse : select_to,
|
||||||
_1, _2, key.key, param, flags & SelectFlags::Inclusive),
|
_1, _2, key.key, param, flags & SelectFlags::Inclusive),
|
||||||
|
@ -673,7 +673,7 @@ void start_or_end_macro_recording(Context& context)
|
||||||
if (context.input_handler().is_recording())
|
if (context.input_handler().is_recording())
|
||||||
context.input_handler().stop_recording();
|
context.input_handler().stop_recording();
|
||||||
else
|
else
|
||||||
context.input_handler().on_next_key([](const Key& key, Context& context) {
|
context.input_handler().on_next_key([](Key key, Context& context) {
|
||||||
if (key.modifiers == Key::Modifiers::None)
|
if (key.modifiers == Key::Modifiers::None)
|
||||||
context.input_handler().start_recording(key.key);
|
context.input_handler().start_recording(key.key);
|
||||||
});
|
});
|
||||||
|
@ -682,7 +682,7 @@ void start_or_end_macro_recording(Context& context)
|
||||||
void replay_macro(Context& context)
|
void replay_macro(Context& context)
|
||||||
{
|
{
|
||||||
int count = context.numeric_param();
|
int count = context.numeric_param();
|
||||||
context.input_handler().on_next_key([count](const Key& key, Context& context) mutable {
|
context.input_handler().on_next_key([count](Key key, Context& context) mutable {
|
||||||
if (key.modifiers == Key::Modifiers::None)
|
if (key.modifiers == Key::Modifiers::None)
|
||||||
{
|
{
|
||||||
static std::unordered_set<char> running_macros;
|
static std::unordered_set<char> running_macros;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user