diff options
Diffstat (limited to 'lib/reline/key_actor/base.rb')
-rw-r--r-- | lib/reline/key_actor/base.rb | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/lib/reline/key_actor/base.rb b/lib/reline/key_actor/base.rb index a1cd7fb2a1..ee28c7681e 100644 --- a/lib/reline/key_actor/base.rb +++ b/lib/reline/key_actor/base.rb @@ -1,19 +1,31 @@ class Reline::KeyActor::Base - MAPPING = Array.new(256) + def initialize(mapping = []) + @mapping = mapping + @matching_bytes = {} + @key_bindings = {} + end def get_method(key) - self.class::MAPPING[key] + @mapping[key] + end + + def add(key, func) + (1...key.size).each do |size| + @matching_bytes[key.take(size)] = true + end + @key_bindings[key] = func end - def initialize - @default_key_bindings = {} + def matching?(key) + @matching_bytes[key] end - def default_key_bindings - @default_key_bindings + def get(key) + @key_bindings[key] end - def reset_default_key_bindings - @default_key_bindings.clear + def clear + @matching_bytes.clear + @key_bindings.clear end end |