8template <
class T,
int N>
12template <
class T,
int N>
17 int fallback_options) {
20 if (
Accept(key_event, ctx, keymap)) {
24 if (key_event.
ctrl() || key_event.
alt()) {
27 if (key_event.
shift()) {
32 if (
Accept(shift_as_control, ctx, keymap)) {
39 if (
Accept(ignore_shift, ctx, keymap)) {
48template <
class T,
int N>
52 return keymaps_[keymap_selector];
55template <
class T,
int N>
59 auto binding = keymap.find(key_event);
60 if (binding != keymap.end()) {
61 auto action = binding->second;
63 DLOG(INFO) <<
"action key accepted: " << key_event.
repr();
70template <
class T,
int N>
74 (*this)[key_event] = action;
76 this->erase(key_event);
80template <
class T,
int N>
82 const string& section,
83 int keymap_selector) {
85 if (
auto bindings = config->
GetMap(section +
"/bindings")) {
86 for (
auto it = bindings->begin(); it != bindings->end(); ++it) {
91 auto* p = action_definitions_;
92 while (p->action && p->name != value->str()) {
95 if (!p->action && p->name != value->str()) {
96 LOG(WARNING) <<
"[" << section <<
"] invalid action: " << value->str();
100 if (!ke.
Parse(it->first)) {
101 LOG(WARNING) <<
"[" << section <<
"] invalid key: " << it->first;
104 keymap.Bind(ke, p->action);
#define DLOG(severity)
Definition no_logging.h:53
#define DCHECK_LT(val1, val2)
Definition no_logging.h:65
#define LOG(severity)
Definition no_logging.h:31
#define RIME_THIS_CALL_AS(T, f)
Definition common.h:37
@ kControlMask
Definition key_table.h:17
@ kShiftMask
Definition key_table.h:15
an< X > As(const an< Y > &ptr)
Definition common.h:67
ProcessResult
Definition processor.h:18
@ kNoop
Definition processor.h:21
@ kAccepted
Definition processor.h:20
Definition config_component.h:21
RIME_DLL an< ConfigMap > GetMap(const string &path)
Definition config_component.cc:111
bool Accept(const KeyEvent &key_event, Context *ctx, Keymap &keymap)
Definition key_binding_processor_impl.h:56
Keymap & get_keymap(int keymap_selector=0)
Definition key_binding_processor_impl.h:50
bool(T::*)(Context *ctx) HandlerPtr
Definition key_binding_processor.h:20
void LoadConfig(Config *config, const string §ion, int kemap_selector=0)
Definition key_binding_processor_impl.h:81
@ ShiftAsControl
Definition key_binding_processor.h:24
@ IgnoreShift
Definition key_binding_processor.h:25
static const ActionDef kActionNoop
Definition key_binding_processor.h:34
ProcessResult ProcessKeyEvent(const KeyEvent &key_event, Context *ctx, int keymap_selector=0, int fallback_options=FallbackOptions::None)
Definition key_binding_processor_impl.h:13
Definition key_binding_processor.h:29
Definition key_binding_processor.h:48
void Bind(KeyEvent key_event, HandlerPtr action)
Definition key_binding_processor_impl.h:71
Definition key_event.h:17
int modifier() const
Definition key_event.h:26
bool ctrl() const
Definition key_event.h:30
RIME_DLL string repr() const
Definition key_event.cc:19
int keycode() const
Definition key_event.h:24
bool alt() const
Definition key_event.h:31
RIME_DLL bool Parse(const string &repr)
Definition key_event.cc:51
bool shift() const
Definition key_event.h:29