Module: Fatty::Curses

Defined in:
lib/fatty/curses/patch.rb,
lib/fatty/curses/context.rb,
lib/fatty/curses/key_decoder.rb,
lib/fatty/curses/curses_coder.rb,
lib/fatty/curses/event_source.rb,
lib/fatty/curses/window_styling.rb

Defined Under Namespace

Modules: MouseConstants, WindowStyling Classes: Context, EventSource, KeyDecoder

Constant Summary collapse

COMMON_KEYNAMES =

These come from special handling in KeyDecoder#fallback_decode.

%i[
  enter
  escape
  return
  space
].freeze
CURSES_TO_EVENT =
{
  # Special case for TAB.  Curses::KEY_CTRL_I may not get defined on all
  # platforms.
  9 => Fatty::KeyEvent.new(key: :tab, raw: 9),
  ::Curses::KEY_RESIZE => Fatty::KeyEvent.new(key: :resize, raw: ::Curses::KEY_RESIZE),
  ::Curses::KEY_BTAB => Fatty::KeyEvent.new(key: :tab, shift: true, raw: ::Curses::KEY_BTAB),
  ::Curses::KEY_BACKSPACE => Fatty::KeyEvent.new(key: :backspace, raw: ::Curses::KEY_BACKSPACE),
  ::Curses::KEY_F1 => Fatty::KeyEvent.new(key: :f1, raw: ::Curses::KEY_F1),
  ::Curses::KEY_F13 => Fatty::KeyEvent.new(key: :f1, shift: true, raw: ::Curses::KEY_F13),
  ::Curses::KEY_F25 => Fatty::KeyEvent.new(key: :f1, ctrl: true, raw: ::Curses::KEY_F25),
  ::Curses::KEY_F37 => Fatty::KeyEvent.new(key: :f1, shift: true, ctrl: true, raw: ::Curses::KEY_F37),
  ::Curses::KEY_F49 => Fatty::KeyEvent.new(key: :f1, meta: true, raw: ::Curses::KEY_F49),
  ::Curses::KEY_F61 => Fatty::KeyEvent.new(key: :f1, shift: true, meta: true, raw: ::Curses::KEY_F61),
  ::Curses::KEY_F2 => Fatty::KeyEvent.new(key: :f2, raw: ::Curses::KEY_F2),
  ::Curses::KEY_F14 => Fatty::KeyEvent.new(key: :f2, shift: true, raw: ::Curses::KEY_F14),
  ::Curses::KEY_F26 => Fatty::KeyEvent.new(key: :f2, ctrl: true, raw: ::Curses::KEY_F26),
  ::Curses::KEY_F38 => Fatty::KeyEvent.new(key: :f2, shift: true, ctrl: true, raw: ::Curses::KEY_F38),
  ::Curses::KEY_F50 => Fatty::KeyEvent.new(key: :f2, meta: true, raw: ::Curses::KEY_F50),
  ::Curses::KEY_F62 => Fatty::KeyEvent.new(key: :f2, shift: true, meta: true, raw: ::Curses::KEY_F62),
  ::Curses::KEY_F3 => Fatty::KeyEvent.new(key: :f3, raw: ::Curses::KEY_F3),
  ::Curses::KEY_F15 => Fatty::KeyEvent.new(key: :f3, shift: true, raw: ::Curses::KEY_F15),
  ::Curses::KEY_F27 => Fatty::KeyEvent.new(key: :f3, ctrl: true, raw: ::Curses::KEY_F27),
  ::Curses::KEY_F39 => Fatty::KeyEvent.new(key: :f3, shift: true, ctrl: true, raw: ::Curses::KEY_F39),
  ::Curses::KEY_F51 => Fatty::KeyEvent.new(key: :f3, meta: true, raw: ::Curses::KEY_F51),
  ::Curses::KEY_F63 => Fatty::KeyEvent.new(key: :f3, shift: true, meta: true, raw: ::Curses::KEY_F63),
  ::Curses::KEY_F4 => Fatty::KeyEvent.new(key: :f4, raw: ::Curses::KEY_F4),
  ::Curses::KEY_F16 => Fatty::KeyEvent.new(key: :f4, shift: true, raw: ::Curses::KEY_F16),
  ::Curses::KEY_F28 => Fatty::KeyEvent.new(key: :f4, ctrl: true, raw: ::Curses::KEY_F28),
  ::Curses::KEY_F40 => Fatty::KeyEvent.new(key: :f4, shift: true, ctrl: true, raw: ::Curses::KEY_F40),
  ::Curses::KEY_F52 => Fatty::KeyEvent.new(key: :f4, meta: true, raw: ::Curses::KEY_F52),
  # KEY_DL: 328 => Fatty::KeyEvent.new(key: :f4, shift: true, meta: true, raw: KEY_DL: 328),
  ::Curses::KEY_F5 => Fatty::KeyEvent.new(key: :f5, raw: ::Curses::KEY_F5),
  ::Curses::KEY_F17 => Fatty::KeyEvent.new(key: :f5, shift: true, raw: ::Curses::KEY_F17),
  ::Curses::KEY_F29 => Fatty::KeyEvent.new(key: :f5, ctrl: true, raw: ::Curses::KEY_F29),
  ::Curses::KEY_F41 => Fatty::KeyEvent.new(key: :f5, shift: true, ctrl: true, raw: ::Curses::KEY_F41),
  ::Curses::KEY_F53 => Fatty::KeyEvent.new(key: :f5, meta: true, raw: ::Curses::KEY_F53),
  # KEY_IL: 329 => Fatty::KeyEvent.new(key: :f5, shift: true, meta: true, raw: KEY_IL: 329),
  ::Curses::KEY_F6 => Fatty::KeyEvent.new(key: :f6, raw: ::Curses::KEY_F6),
  ::Curses::KEY_F18 => Fatty::KeyEvent.new(key: :f6, shift: true, raw: ::Curses::KEY_F18),
  ::Curses::KEY_F30 => Fatty::KeyEvent.new(key: :f6, ctrl: true, raw: ::Curses::KEY_F30),
  ::Curses::KEY_F42 => Fatty::KeyEvent.new(key: :f6, shift: true, ctrl: true, raw: ::Curses::KEY_F42),
  ::Curses::KEY_F54 => Fatty::KeyEvent.new(key: :f6, meta: true, raw: ::Curses::KEY_F54),
  # 330 duplicates the :delete key
  # KEY_DC: 330 => Fatty::KeyEvent.new(key: :f6, shift: true, meta: true, raw: 330 duplicates the :delete key
  # KEY_DC: 330),
  ::Curses::KEY_F7 => Fatty::KeyEvent.new(key: :f7, raw: ::Curses::KEY_F7),
  ::Curses::KEY_F19 => Fatty::KeyEvent.new(key: :f7, shift: true, raw: ::Curses::KEY_F19),
  ::Curses::KEY_F31 => Fatty::KeyEvent.new(key: :f7, ctrl: true, raw: ::Curses::KEY_F31),
  ::Curses::KEY_F43 => Fatty::KeyEvent.new(key: :f7, shift: true, ctrl: true, raw: ::Curses::KEY_F43),
  ::Curses::KEY_F55 => Fatty::KeyEvent.new(key: :f7, meta: true, raw: ::Curses::KEY_F55),
  # 331 duplicates the :insert key
  # KEY_IC: 331 => Fatty::KeyEvent.new(key: :f7, shift: true, meta: true),
  ::Curses::KEY_F8 => Fatty::KeyEvent.new(key: :f8, raw: ::Curses::KEY_F8),
  ::Curses::KEY_F20 => Fatty::KeyEvent.new(key: :f8, shift: true, raw: ::Curses::KEY_F20),
  ::Curses::KEY_F32 => Fatty::KeyEvent.new(key: :f8, ctrl: true, raw: ::Curses::KEY_F32),
  ::Curses::KEY_F44 => Fatty::KeyEvent.new(key: :f8, shift: true, ctrl: true, raw: ::Curses::KEY_F44),
  ::Curses::KEY_F56 => Fatty::KeyEvent.new(key: :f8, meta: true, raw: ::Curses::KEY_F56),
  # KEY_EIC: 332 => Fatty::KeyEvent.new(key: :f8, shift: true, meta: true),
  ::Curses::KEY_F9 => Fatty::KeyEvent.new(key: :f9, raw: ::Curses::KEY_F9),
  ::Curses::KEY_F21 => Fatty::KeyEvent.new(key: :f9, shift: true, raw: ::Curses::KEY_F21),
  ::Curses::KEY_F33 => Fatty::KeyEvent.new(key: :f9, ctrl: true, raw: ::Curses::KEY_F33),
  ::Curses::KEY_F45 => Fatty::KeyEvent.new(key: :f9, shift: true, ctrl: true, raw: ::Curses::KEY_F45),
  ::Curses::KEY_F57 => Fatty::KeyEvent.new(key: :f9, meta: true, raw: ::Curses::KEY_F57),
  # KEY_CLEAR: 333 => Fatty::KeyEvent.new(key: :f9, shift: true, meta: true),
  ::Curses::KEY_F10 => Fatty::KeyEvent.new(key: :f10, raw: ::Curses::KEY_F10),
  ::Curses::KEY_F22 => Fatty::KeyEvent.new(key: :f10, shift: true, raw: ::Curses::KEY_F22),
  ::Curses::KEY_F34 => Fatty::KeyEvent.new(key: :f10, ctrl: true, raw: ::Curses::KEY_F34),
  ::Curses::KEY_F46 => Fatty::KeyEvent.new(key: :f10, shift: true, ctrl: true, raw: ::Curses::KEY_F46),
  ::Curses::KEY_F58 => Fatty::KeyEvent.new(key: :f10, meta: true, raw: ::Curses::KEY_F58),
  # KEY_EOS: 334 => Fatty::KeyEvent.new(key: :f10, shift: true, meta: true),
  ::Curses::KEY_F11 => Fatty::KeyEvent.new(key: :f11, raw: ::Curses::KEY_F11),
  ::Curses::KEY_F23 => Fatty::KeyEvent.new(key: :f11, shift: true, raw: ::Curses::KEY_F23),
  ::Curses::KEY_F35 => Fatty::KeyEvent.new(key: :f11, ctrl: true, raw: ::Curses::KEY_F35),
  ::Curses::KEY_F47 => Fatty::KeyEvent.new(key: :f11, shift: true, ctrl: true, raw: ::Curses::KEY_F47),
  ::Curses::KEY_F59 => Fatty::KeyEvent.new(key: :f11, meta: true, raw: ::Curses::KEY_F59),
  # KEY_EOL: 335 => Fatty::KeyEvent.new(key: :f11, shift: true, meta: true),
  ::Curses::KEY_F12 => Fatty::KeyEvent.new(key: :f12, raw: ::Curses::KEY_F12),
  ::Curses::KEY_F24 => Fatty::KeyEvent.new(key: :f12, shift: true, raw: ::Curses::KEY_F24),
  ::Curses::KEY_F36 => Fatty::KeyEvent.new(key: :f12, ctrl: true, raw: ::Curses::KEY_F36),
  ::Curses::KEY_F48 => Fatty::KeyEvent.new(key: :f12, shift: true, ctrl: true, raw: ::Curses::KEY_F48),
  ::Curses::KEY_F60 => Fatty::KeyEvent.new(key: :f12, meta: true, raw: ::Curses::KEY_F60),
  # 336 duplicates the :down key
  # KEY_SF: 336 => Fatty::KeyEvent.new(key: :f12, shift: true, meta: true),
  ::Curses::KEY_IC => Fatty::KeyEvent.new(key: :insert, raw: ::Curses::KEY_IC),
  ::Curses::KEY_SIC => Fatty::KeyEvent.new(key: :insert, shift: true, raw: ::Curses::KEY_SIC),
  # 550 => Fatty::KeyEvent.new(key: :insert, meta: true, raw: 550),
  # 551 => Fatty::KeyEvent.new(key: :insert, shift: true, meta: true),
  # 552 => Fatty::KeyEvent.new(key: :insert, ctrl: true),
  # 553 => Fatty::KeyEvent.new(key: :insert, shift: true, ctrl: true),
  ::Curses::KEY_DC => Fatty::KeyEvent.new(key: :delete, raw: ::Curses::KEY_DC),
  ::Curses::KEY_SDC => Fatty::KeyEvent.new(key: :delete, shift: true, raw: ::Curses::KEY_SDC),
  # 531 => Fatty::KeyEvent.new(key: :delete, meta: true),
  # 532 => Fatty::KeyEvent.new(key: :delete, shift: true, meta: true),
  # 533 => Fatty::KeyEvent.new(key: :delete, ctrl: true),
  # 534 => Fatty::KeyEvent.new(key: :delete, shift: true, ctrl: true),
  ::Curses::KEY_HOME => Fatty::KeyEvent.new(key: :home, raw: ::Curses::KEY_HOME),
  ::Curses::KEY_SHOME => Fatty::KeyEvent.new(key: :home, shift: true, raw: ::Curses::KEY_SHOME),
  # 545 => Fatty::KeyEvent.new(key: :home, meta: true),
  # 546 => Fatty::KeyEvent.new(key: :home, shift: true, meta: true),
  # 547 => Fatty::KeyEvent.new(key: :home, ctrl: true),
  # 548 => Fatty::KeyEvent.new(key: :home, shift: true, ctrl: true),
  ::Curses::KEY_END => Fatty::KeyEvent.new(key: :end, raw: ::Curses::KEY_END),
  ::Curses::KEY_SEND => Fatty::KeyEvent.new(key: :end, shift: true, raw: ::Curses::KEY_SEND),
  # 540 => Fatty::KeyEvent.new(key: :end, meta: true),
  # 541 => Fatty::KeyEvent.new(key: :end, shift: true, meta: true),
  # 542 => Fatty::KeyEvent.new(key: :end, ctrl: true),
  # 543 => Fatty::KeyEvent.new(key: :end, shift: true, ctrl: true),
  ::Curses::KEY_PPAGE => Fatty::KeyEvent.new(key: :page_up, raw: ::Curses::KEY_PPAGE),
  ::Curses::KEY_SPREVIOUS => Fatty::KeyEvent.new(key: :page_up, shift: true, raw: ::Curses::KEY_SPREVIOUS),
  # 565 => Fatty::KeyEvent.new(key: :page_up, meta: true),
  # 566 => Fatty::KeyEvent.new(key: :page_up, shift: true, meta: true),
  # 567 => Fatty::KeyEvent.new(key: :page_up, ctrl: true),
  # 568 => Fatty::KeyEvent.new(key: :page_up, shift: true, ctrl: true),
  ::Curses::KEY_NPAGE => Fatty::KeyEvent.new(key: :page_down, raw: ::Curses::KEY_NPAGE),
  ::Curses::KEY_SNEXT => Fatty::KeyEvent.new(key: :page_down, shift: true, raw: ::Curses::KEY_SNEXT),
  # 560 => Fatty::KeyEvent.new(key: :page_down, meta: true),
  # 561 => Fatty::KeyEvent.new(key: :page_down, shift: true, meta: true),
  # 562 => Fatty::KeyEvent.new(key: :page_down, ctrl: true),
  # 563 => Fatty::KeyEvent.new(key: :page_down, shift: true, ctrl: true),
  ::Curses::KEY_DOWN => Fatty::KeyEvent.new(key: :down, raw: ::Curses::KEY_DOWN),
  ::Curses::KEY_SF => Fatty::KeyEvent.new(key: :down, shift: true, raw: ::Curses::KEY_SF),
  # 535 => Fatty::KeyEvent.new(key: :down, meta: true),
  # 536 => Fatty::KeyEvent.new(key: :down, shift: true, meta: true),
  # 537 => Fatty::KeyEvent.new(key: :down, ctrl: true),
  # 538 => Fatty::KeyEvent.new(key: :down, shift: true, ctrl: true),
  ::Curses::KEY_UP => Fatty::KeyEvent.new(key: :up, raw: ::Curses::KEY_UP),
  ::Curses::KEY_SR => Fatty::KeyEvent.new(key: :up, shift: true, raw: ::Curses::KEY_SR),
  # 576 => Fatty::KeyEvent.new(key: :up, meta: true),
  # 577 => Fatty::KeyEvent.new(key: :up, shift: true, meta: true),
  # 578 => Fatty::KeyEvent.new(key: :up, ctrl: true),
  # 579 => Fatty::KeyEvent.new(key: :up, shift: true, ctrl: true),
  ::Curses::KEY_LEFT => Fatty::KeyEvent.new(key: :left, raw: ::Curses::KEY_LEFT),
  ::Curses::KEY_SLEFT => Fatty::KeyEvent.new(key: :left, shift: true, raw: ::Curses::KEY_SLEFT),
  # 555 => Fatty::KeyEvent.new(key: :left, meta: true),
  # 556 => Fatty::KeyEvent.new(key: :left, shift: true, meta: true),
  # 557 => Fatty::KeyEvent.new(key: :left, ctrl: true),
  # 558 => Fatty::KeyEvent.new(key: :left, shift: true, ctrl: true),
  ::Curses::KEY_RIGHT => Fatty::KeyEvent.new(key: :right, raw: ::Curses::KEY_RIGHT),
  ::Curses::KEY_SRIGHT => Fatty::KeyEvent.new(key: :right, shift: true, raw: ::Curses::KEY_SRIGHT),
  # 570 => Fatty::KeyEvent.new(key: :right, meta: true),
  # 571 => Fatty::KeyEvent.new(key: :right, shift: true, meta: true),
  # 572 => Fatty::KeyEvent.new(key: :right, ctrl: true),
  # 573 => Fatty::KeyEvent.new(key: :right, shift: true, ctrl: true),
}

Class Method Summary collapse

Class Method Details

.valid_keynamesObject

After this list is read in, return an Array of the known key names.



532
533
534
535
536
537
# File 'lib/fatty/curses/curses_coder.rb', line 532

def self.valid_keynames
  (
    CURSES_TO_EVENT.values.filter_map(&:key) +
    COMMON_KEYNAMES
  ).map(&:to_s).uniq.sort
end