Module: LessCurse

Defined in:
lib/less_curse.rb,
lib/less_curse/grid.rb,
lib/less_curse/screen.rb,
lib/less_curse/actions.rb,
lib/less_curse/version.rb,
lib/less_curse/geometry.rb,
lib/less_curse/renderer.rb,
lib/less_curse/null_logger.rb,
lib/less_curse/widgets/base.rb,
lib/less_curse/widgets/list.rb,
lib/less_curse/widgets/text_area.rb,
lib/less_curse/widgets/text_view.rb

Overview

The LessCurse module which gives you static access to your “Screen” and all the UI glory within it.

Defined Under Namespace

Modules: Actions, Geometry, Renderer, Widgets Classes: Grid, NullLogger, Screen

Constant Summary collapse

VERSION =
"0.6.0"
@@actions =
{
FFI::NCurses::KEY_TAB  => lambda { screen.focus_next },
FFI::NCurses::KEY_BTAB => lambda { screen.focus_previous }
}

Class Method Summary collapse

Class Method Details

.close_screenObject



31
32
33
34
# File 'lib/less_curse.rb', line 31

def self.close_screen
  FFI::NCurses.endwin
  # flushinp, delwin?
end

.debug_msg(msg) ⇒ Object



65
66
67
# File 'lib/less_curse.rb', line 65

def self.debug_msg msg
  logger.debug msg
end

.enter_loop!Object



41
42
43
44
45
46
# File 'lib/less_curse.rb', line 41

def self.enter_loop!
  loop do
    break if !handle_input
    screen.repaint
  end
end

.handle_inputObject

Read from keyboard, handle keypress oneself or dispatch to focused widget.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/less_curse.rb', line 50

def self.handle_input
  key = FFI::NCurses.wgetch FFI::NCurses::stdscr
  debug_msg "key press: #{key} / keyname: #{FFI::NCurses::keyname key} / #{FFI::NCurses::KEY_CTRL_Q}"

  # That will let us break out of the loop
  return false if key == FFI::NCurses::KEY_CTRL_Q

  if @@actions[key]
    # Global actions first
    @@actions[key].call
  else
    screen.focused_widget.handle_input key
  end
end

.log_to!(file) ⇒ Object



73
74
75
# File 'lib/less_curse.rb', line 73

def self.log_to! file
  @@logger = Logger.new(file)
end

.loggerObject



69
70
71
# File 'lib/less_curse.rb', line 69

def self.logger
  @@logger ||= LessCurse::NullLogger.new
end

.screenObject



23
24
25
# File 'lib/less_curse.rb', line 23

def self.screen
  @@screen ||= Screen.new
end

.show_screenObject



27
28
29
# File 'lib/less_curse.rb', line 27

def self.show_screen
  @@screen.show
end

.window(rectangle) ⇒ Object



36
37
38
39
# File 'lib/less_curse.rb', line 36

def self.window rectangle
  FFI::NCurses.newwin rectangle.size.height, rectangle.size.width,
    rectangle.position.y, rectangle.position.x
end