Class: Textbringer::Keymap

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/textbringer/keymap.rb,
sig/lib/textbringer/keymap.rbs

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKeymap

Returns a new instance of Keymap.



13
14
15
# File 'lib/textbringer/keymap.rb', line 13

def initialize
  @map = {}
end

Class Method Details

.key_name(arg0) ⇒ String .key_name(arg0) ⇒ String

Overloads:

  • .key_name(arg0) ⇒ String

    Parameters:

    • arg0 (String)

    Returns:

    • (String)
  • .key_name(arg0) ⇒ String

    Parameters:

    • arg0 (Symbol)

    Returns:

    • (String)


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/textbringer/keymap.rb', line 63

def self.key_name(key)
  case key
  when Symbol
    "<#{key}>"
  when " "
    "SPC"
  when "\t"
    "TAB"
  when "\e"
    "ESC"
  when "\C-m"
    "RET"
  when /\A[\0-\x1f\x7f]\z/
    "C-" + (key.ord ^ 0x40).chr.downcase
  else
    key.to_s
  end
end

.key_sequence_string(key_sequence) ⇒ String

Parameters:

  • (Array[untyped])

Returns:

  • (String)


82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/textbringer/keymap.rb', line 82

def self.key_sequence_string(key_sequence)
  ks = key_sequence.dup
  key_names = []
  while key = ks.shift
    if key == "\e" && !ks.empty?
      key_names.push("M-" + key_name(ks.shift))
    else
      key_names.push(key_name(key))
    end
  end
  key_names.join(" ")
end

Instance Method Details

#define_key(arg0, arg1) ⇒ Symbol #define_key(arg0, arg1) ⇒ Symbol #define_key(arg0, arg1) ⇒ Symbol #define_key(arg0, arg1) ⇒ Proc #define_key(arg0, arg1) ⇒ nil #define_key(arg0, arg1) ⇒ nil Also known as: []

Overloads:

  • #define_key(arg0, arg1) ⇒ Symbol

    Parameters:

    • arg0 (Symbol)
    • arg1 (Symbol)

    Returns:

    • (Symbol)
  • #define_key(arg0, arg1) ⇒ Symbol

    Parameters:

    • arg0 (String)
    • arg1 (Symbol)

    Returns:

    • (Symbol)
  • #define_key(arg0, arg1) ⇒ Symbol

    Parameters:

    • arg0 (Array[untyped])
    • arg1 (Symbol)

    Returns:

    • (Symbol)
  • #define_key(arg0, arg1) ⇒ Proc

    Parameters:

    • arg0 (String)
    • arg1 (Proc)

    Returns:

    • (Proc)
  • #define_key(arg0, arg1) ⇒ nil

    Parameters:

    • arg0 (Array[untyped])
    • arg1 (Symbol)

    Returns:

    • (nil)
  • #define_key(arg0, arg1) ⇒ nil

    Parameters:

    • arg0 (Hash[untyped, untyped])
    • arg1 (Symbol)

    Returns:

    • (nil)


17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/textbringer/keymap.rb', line 17

def define_key(key, command)
  key_sequence = kbd(key)

  case key_sequence.size
  when 0
    raise ArgumentError, "Empty key"
  when 1
    @map[key_sequence.first] = command
  else
    k, *ks = key_sequence
    (@map[k] ||= Keymap.new).define_key(ks, command)
  end
end

#each(prefixes = [], &block) ⇒ Hash[untyped, untyped]

Parameters:

  • (Array[untyped])

Returns:

  • (Hash[untyped, untyped])


49
50
51
52
53
54
55
56
57
# File 'lib/textbringer/keymap.rb', line 49

def each(prefixes = [], &block)
  @map.each do |key, val|
    if val.is_a?(Keymap)
      val.each([*prefixes, key], &block)
    else
      yield([*prefixes, key], val)
    end
  end
end

#handle_undefined_keyProc

Returns:

  • (Proc)


59
60
61
# File 'lib/textbringer/keymap.rb', line 59

def handle_undefined_key
  @map.default_proc = Proc.new { |h, k| yield(k) }
end

#kbd(arg0) ⇒ Array[untyped] #kbd(arg0) ⇒ Array[untyped] #kbd(arg0) ⇒ Array[untyped] #kbd(arg0) ⇒ nil

Overloads:

  • #kbd(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (Symbol)

    Returns:

    • (Array[untyped])
  • #kbd(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (String)

    Returns:

    • (Array[untyped])
  • #kbd(arg0) ⇒ Array[untyped]

    Parameters:

    • arg0 (Array[untyped])

    Returns:

    • (Array[untyped])
  • #kbd(arg0) ⇒ nil

    Parameters:

    • arg0 (Hash[untyped, untyped])

    Returns:

    • (nil)


97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/textbringer/keymap.rb', line 97

def kbd(key)
  case key
  when Symbol
    [key]
  when String
    key.b.gsub(/[\x80-\xff]/n) { |c| "\e" + (c.ord & 0x7f).chr }.chars
  when Array
    key
  else
    raise TypeError, "invalid key type #{key.class}"
  end
end

#lookup(arg0) ⇒ nil #lookup(arg0) ⇒ Symbol #lookup(arg0) ⇒ Proc #lookup(arg0) ⇒ Textbringer::Keymap

Overloads:

  • #lookup(arg0) ⇒ nil

    Parameters:

    • arg0 (Array[untyped])

    Returns:

    • (nil)
  • #lookup(arg0) ⇒ Symbol

    Parameters:

    • arg0 (Array[untyped])

    Returns:

    • (Symbol)
  • #lookup(arg0) ⇒ Proc

    Parameters:

    • arg0 (Array[untyped])

    Returns:

    • (Proc)
  • #lookup(arg0) ⇒ Textbringer::Keymap

    Parameters:

    • arg0 (Array[untyped])

    Returns:



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/textbringer/keymap.rb', line 32

def lookup(key_sequence)
  case key_sequence.size
  when 0
    raise ArgumentError, "Empty key"
  when 1
    @map[key_sequence.first]
  else
    k, *ks = key_sequence
    km = @map[k]
    if km.is_a?(Keymap)
      km.lookup(ks)
    else
      nil
    end
  end
end