Method: Textbringer::Utils.read_key_sequence

Defined in:
lib/textbringer/utils.rb

.read_key_sequence(prompt) ⇒ Object



300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
# File 'lib/textbringer/utils.rb', line 300

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