Class: RuVim::KeymapManager
- Inherits:
-
Object
- Object
- RuVim::KeymapManager
show all
- Defined in:
- lib/ruvim/keymap_manager.rb
Defined Under Namespace
Classes: BindingEntry, Match
Instance Method Summary
collapse
-
#bind(mode, seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
-
#bind_buffer(buffer_id, seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
-
#bind_filetype(filetype, seq, id, mode: :normal, argv: [], kwargs: {}, bang: false) ⇒ Object
-
#bind_global(seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
-
#binding_entries_for_context(editor, mode: nil) ⇒ Object
-
#initialize ⇒ KeymapManager
constructor
A new instance of KeymapManager.
-
#resolve(mode, pending_tokens) ⇒ Object
-
#resolve_with_context(mode, pending_tokens, editor:) ⇒ Object
Constructor Details
Returns a new instance of KeymapManager.
8
9
10
11
12
13
|
# File 'lib/ruvim/keymap_manager.rb', line 8
def initialize
@mode_maps = Hash.new { |h, k| h[k] = {} }
@global_map = {}
@buffer_maps = Hash.new { |h, k| h[k] = {} }
@filetype_maps = Hash.new { |h, k| h[k] = Hash.new { |hh, m| hh[m] = {} } }
end
|
Instance Method Details
#bind(mode, seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
15
16
17
18
|
# File 'lib/ruvim/keymap_manager.rb', line 15
def bind(mode, seq, id, argv: [], kwargs: {}, bang: false)
tokens = normalize_seq(seq)
@mode_maps[mode][tokens] = build_invocation(id, argv:, kwargs:, bang:, tokens:)
end
|
#bind_buffer(buffer_id, seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
25
26
27
28
|
# File 'lib/ruvim/keymap_manager.rb', line 25
def bind_buffer(buffer_id, seq, id, argv: [], kwargs: {}, bang: false)
tokens = normalize_seq(seq)
@buffer_maps[buffer_id][tokens] = build_invocation(id, argv:, kwargs:, bang:, tokens:)
end
|
#bind_filetype(filetype, seq, id, mode: :normal, argv: [], kwargs: {}, bang: false) ⇒ Object
30
31
32
33
|
# File 'lib/ruvim/keymap_manager.rb', line 30
def bind_filetype(filetype, seq, id, mode: :normal, argv: [], kwargs: {}, bang: false)
tokens = normalize_seq(seq)
@filetype_maps[filetype.to_s][mode][tokens] = build_invocation(id, argv:, kwargs:, bang:, tokens:)
end
|
#bind_global(seq, id, argv: [], kwargs: {}, bang: false) ⇒ Object
20
21
22
23
|
# File 'lib/ruvim/keymap_manager.rb', line 20
def bind_global(seq, id, argv: [], kwargs: {}, bang: false)
tokens = normalize_seq(seq)
@global_map[tokens] = build_invocation(id, argv:, kwargs:, bang:, tokens:)
end
|
#binding_entries_for_context(editor, mode: nil) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/ruvim/keymap_manager.rb', line 50
def binding_entries_for_context(editor, mode: nil)
buffer = editor.current_buffer
filetype = detect_filetype(buffer)
modes = normalized_mode_filter(mode)
entries = []
entries.concat(snapshot_plain_layer(@buffer_maps[buffer.id], layer: :buffer))
if filetype && @filetype_maps.key?(filetype)
ft_modes = @filetype_maps[filetype]
entries.concat(snapshot_mode_layers(ft_modes, layer: :filetype, modes:))
end
entries.concat(snapshot_mode_layers(@mode_maps, layer: :app, modes:, scope: :mode))
entries.concat(snapshot_plain_layer(@global_map, layer: :app, scope: :global))
entries
end
|
#resolve(mode, pending_tokens) ⇒ Object
35
36
37
|
# File 'lib/ruvim/keymap_manager.rb', line 35
def resolve(mode, pending_tokens)
resolve_layers([@mode_maps[mode]], pending_tokens)
end
|
#resolve_with_context(mode, pending_tokens, editor:) ⇒ Object
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/ruvim/keymap_manager.rb', line 39
def resolve_with_context(mode, pending_tokens, editor:)
buffer = editor.current_buffer
filetype = detect_filetype(buffer)
layers = []
layers << @filetype_maps[filetype][mode] if filetype && @filetype_maps.key?(filetype)
layers << @buffer_maps[buffer.id] if @buffer_maps.key?(buffer.id)
layers << @mode_maps[mode]
layers << @global_map
resolve_layers(layers, pending_tokens)
end
|