class Ncurses::CharCode
Helper class for storing keycodes and multibyte characters.
Attributes
status[R]
Status code allows us to detect printable characters and control codes.
Public Class Methods
character(c)
click to toggle source
Creates new instance of CharCode
that keeps a printable character.
# File lib/sup/util/ncurses.rb, line 42 def self.character(c) generate c, Ncurses::OK end
dumb!()
click to toggle source
Enables dumb mode for any new instance.
# File lib/sup/util/ncurses.rb, line 70 def self.dumb! @dumb = true end
dumb?()
click to toggle source
Asks if dumb mode was set
# File lib/sup/util/ncurses.rb, line 75 def self.dumb? defined?(@dumb) && @dumb end
empty()
click to toggle source
Returns empty singleton.
# File lib/sup/util/ncurses.rb, line 30 def self.empty Empty.instance end
generate(c = nil, status = Ncurses::OK)
click to toggle source
Generates new object like new but for empty or erroneous objects it returns empty singleton.
# File lib/sup/util/ncurses.rb, line 49 def self.generate(c = nil, status = Ncurses::OK) if status == Ncurses::ERR || c.nil? || c === Ncurses::ERR empty else new(c, status) end end
get(handle_interrupt=true)
click to toggle source
Gets character from input. Pretends ctrl-c's are ctrl-g's.
# File lib/sup/util/ncurses.rb, line 59 def self.get handle_interrupt=true begin status, code = nonblocking_getwch generate code, status rescue Interrupt => e raise e unless handle_interrupt keycode Ncurses::KEY_CANCEL end end
keycode(c)
click to toggle source
Creates new instance of CharCode
that keeps a given keycode.
# File lib/sup/util/ncurses.rb, line 36 def self.keycode(c) generate c, Ncurses::KEY_CODE_YES end
new(c = "", status = Ncurses::OK)
click to toggle source
Calls superclass method
# File lib/sup/util/ncurses.rb, line 79 def initialize(c = "", status = Ncurses::OK) @status = status c = "" if c.nil? return super("") if status == Ncurses::ERR c = enc_char(c) if c.is_a?(Fixnum) super c.length > 1 ? c[0,1] : c end
nonblocking_getwch()
click to toggle source
Reads character from user input.
# File lib/sup/util/ncurses.rb, line 19 def self.nonblocking_getwch # If we get input while we're shelled, we'll ignore it for the # moment and use Ncurses.sync to wait until the shell_out is done. begin s, c = Redwood::BufferManager.shelled? ? Ncurses.sync { nil } : Ncurses.get_wch break if s != Ncurses::ERR end until IO.select([$stdin], nil, nil, 2) [s, c] end
Public Instance Methods
character()
click to toggle source
# File lib/sup/util/ncurses.rb, line 110 def character ; try_character end
character!()
click to toggle source
# File lib/sup/util/ncurses.rb, line 112 def character! ; @status = Ncurses::OK ; self end
character?()
click to toggle source
# File lib/sup/util/ncurses.rb, line 111 def character? ; dumb? || @status == Ncurses::OK end
code()
click to toggle source
# File lib/sup/util/ncurses.rb, line 104 def code ; ord end
dumb?()
click to toggle source
# File lib/sup/util/ncurses.rb, line 118 def dumb? ; self.class.dumb? end
is_character?(c)
click to toggle source
# File lib/sup/util/ncurses.rb, line 106 def is_character?(c); character? && self == c end
is_keycode?(c)
click to toggle source
# File lib/sup/util/ncurses.rb, line 105 def is_keycode?(c) ; keycode? && code == c end
keycode()
click to toggle source
# File lib/sup/util/ncurses.rb, line 109 def keycode ; try_keycode end
keycode!()
click to toggle source
# File lib/sup/util/ncurses.rb, line 114 def keycode! ; @status = Ncurses::KEY_CODE_YES ; self end
keycode=(c)
click to toggle source
# File lib/sup/util/ncurses.rb, line 115 def keycode=(c) ; replace(c); keycode! ; self end
keycode?()
click to toggle source
# File lib/sup/util/ncurses.rb, line 113 def keycode? ; dumb? || @status == Ncurses::KEY_CODE_YES end
present?()
click to toggle source
# File lib/sup/util/ncurses.rb, line 116 def present? ; not empty? end
printable?()
click to toggle source
# File lib/sup/util/ncurses.rb, line 117 def printable? ; character? end
replace(c)
click to toggle source
Proxy method for String's replace
Calls superclass method
# File lib/sup/util/ncurses.rb, line 88 def replace(c) return self if c.object_id == object_id if c.is_a?(self.class) @status = c.status super(c) else @status = Ncurses::OK c = "" if c.nil? c = enc_char(c) if c.is_a?(Fixnum) super c.length > 1 ? c[0,1] : c end end
to_character()
click to toggle source
# File lib/sup/util/ncurses.rb, line 101 def to_character ; character? ? self : "<#{code}>" end
to_keycode()
click to toggle source
# File lib/sup/util/ncurses.rb, line 102 def to_keycode ; keycode? ? code : Ncurses::ERR end
to_sequence()
click to toggle source
# File lib/sup/util/ncurses.rb, line 103 def to_sequence ; bytes.to_a end
try_character()
click to toggle source
# File lib/sup/util/ncurses.rb, line 108 def try_character ; character? ? self : nil end
try_keycode()
click to toggle source
# File lib/sup/util/ncurses.rb, line 107 def try_keycode ; keycode? ? code : nil end
Private Instance Methods
enc_char(c)
click to toggle source
Tries to make external character right.
# File lib/sup/util/ncurses.rb, line 161 def enc_char(c) begin character = c.chr($encoding) rescue RangeError, ArgumentError begin character = [c].pack('U') rescue RangeError begin character = c.chr rescue begin character = [c].pack('C') rescue character = "" @status = Ncurses::ERR end end end character.fix_encoding! end end