Method: Textbringer::Utils.read_key_sequence

Defined in:
lib/textbringer/utils.rb

.read_key_sequence(prompt) ⇒ Object



234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
# File 'lib/textbringer/utils.rb', line 234

def read_key_sequence(prompt)
  buffer = Buffer.current
  key_sequence = []
  map = Keymap.new
  map.define_key("\C-g", :abort_recursive_edit)
  map.handle_undefined_key do |key|
    -> {
      key_sequence.push(key)
      cmd = buffer.keymap&.lookup(key_sequence) ||
        GLOBAL_MAP.lookup(key_sequence)
      if !cmd.is_a?(Keymap)
        exit_recursive_edit
      end
      Buffer.current.clear
      keys = Keymap.key_sequence_string(key_sequence)
      Buffer.current.insert("#{keys}-")
    }
  end
  read_from_minibuffer(prompt, keymap: map)
  if buffer.keymap&.lookup(key_sequence) ||
      GLOBAL_MAP.lookup(key_sequence)
    key_sequence
  else
    keys = Keymap.key_sequence_string(key_sequence)
    raise EditorError, "#{keys} is undefined"
  end
end