mirror of
https://github.com/ruby/ruby.git
synced 2025-09-16 17:14:01 +02:00

key_bindings(escape sequence to symbol)
(https://github.com/ruby/reline/pull/715)
6a7e249374
37 lines
712 B
Ruby
37 lines
712 B
Ruby
class Reline::KeyActor::Base
|
|
def initialize(mappings = nil)
|
|
@matching_bytes = {}
|
|
@key_bindings = {}
|
|
add_mappings(mappings) if mappings
|
|
end
|
|
|
|
def add_mappings(mappings)
|
|
add([27], :ed_ignore)
|
|
128.times do |key|
|
|
func = mappings[key]
|
|
meta_func = mappings[key | 0b10000000]
|
|
add([key], func) if func
|
|
add([27, key], meta_func) if meta_func
|
|
end
|
|
end
|
|
|
|
def add(key, func)
|
|
(1...key.size).each do |size|
|
|
@matching_bytes[key.take(size)] = true
|
|
end
|
|
@key_bindings[key] = func
|
|
end
|
|
|
|
def matching?(key)
|
|
@matching_bytes[key]
|
|
end
|
|
|
|
def get(key)
|
|
@key_bindings[key]
|
|
end
|
|
|
|
def clear
|
|
@matching_bytes.clear
|
|
@key_bindings.clear
|
|
end
|
|
end
|