Key: always pass by value

This commit is contained in:
Maxime Coste 2013-07-26 01:44:25 +02:00
parent eedd37c09a
commit a4138201b0
5 changed files with 21 additions and 21 deletions

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;

View File

@ -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;
} }

View File

@ -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;