Class: RubyText::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/settings.rb

Overview

Hmm, all these are module-level…?

Constant Summary collapse

ValidArgs =
[:raw, :_raw, :echo, :_echo, :cbreak, :_cbreak, 
:keypad, :_keypad, :cursor, :_cursor]

Instance Method Summary collapse

Constructor Details

#initializeSettings

Returns a new instance of Settings.



7
8
9
10
11
12
13
14
# File 'lib/settings.rb', line 7

def initialize
  @defaults = {raw: false, echo: false, cbreak: true, keypad: true, cursor: true}
  @current = @defaults.dup
  @stack = []
  @stack.push @current   # Note: Never let stack be empty
  set_curses(@current)   # Set them for real
  # FIXME To be continued...
end

Instance Method Details

#resetObject



66
67
68
# File 'lib/settings.rb', line 66

def reset
  # FIXME - call reset_boolean
end

#reset_booleanObject



45
46
47
48
# File 'lib/settings.rb', line 45

def reset_boolean
  @current = @stack.pop rescue @stack[0]
  set_curses(@current)
end

#set(*syms) ⇒ Object

Raises:

  • (ArgumentError)


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

def set(*syms)
File.open("/tmp/dammit1", "w") {|f| f.puts "-- set: syms = #{syms.inspect}" }
  raise ArgumentError unless syms - ValidArgs == []
  # FIXME - call set_boolean
  list = {}
  syms.each do |sym|
    str = sym.to_s
    val = str[0] != "_"
    sym0 = val ? sym : str[1..-1].to_sym
    list[sym0] = val
  end
File.open("/tmp/dammit2", "w") {|f| f.puts "-- list = #{list.inspect}" }
  set_boolean(list)
  # allow a block here?
end

#set_boolean(raw: nil, echo: nil, cbreak: nil, keypad: nil, cursor: nil) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/settings.rb', line 34

def set_boolean(raw: nil, echo: nil, cbreak: nil, keypad: nil, cursor: nil)
  raw    ||= @current[:raw]
  echo   ||= @current[:echo]
  cbreak ||= @current[:cbreak]
  keypad ||= @current[:keypad]
  cursor ||= @current[:cursor]
  @stack.push @current
  @current = {raw: raw, echo: echo, cbreak: cbreak, keypad: keypad, cursor: cursor}
  set_curses(@current)
end

#set_curses(**hash) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/settings.rb', line 16

def set_curses(**hash)
  # Later: check for bad keys
  hash.each_pair do |sym, val|
    case [sym, val]
      when [:cbreak, true];  Curses.cbreak
      when [:cbreak, false]; Curses.nocbreak
      when [:raw, true];     Curses.raw
      when [:raw, false];    Curses.noraw
      when [:echo, true];    Curses.echo
      when [:echo, false];   Curses.noecho
      when [:keypad, true];  Curses.stdscr.keypad(true)
      when [:keypad, false]; Curses.stdscr.keypad(false)
      when [:cursor, true];  Curses.curs_set(1)
      when [:cursor, false]; Curses.curs_set(0)
    end
  end
end