blight 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/Rakefile +2 -0
- data/blight.gemspec +22 -0
- data/lib/blight.rb +119 -0
- data/lib/blight/version.rb +3 -0
- metadata +66 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/blight.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "blight/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'blight'
|
7
|
+
s.version = Blight::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.summary = "ncurses with less cursing"
|
10
|
+
s.description = "Blight provides a sane interface to the very procedural ncurses API"
|
11
|
+
s.authors = ["Justin Searls"]
|
12
|
+
s.email = 'searls@gmail.com'
|
13
|
+
s.homepage = 'https://github.com/searls/blight'
|
14
|
+
|
15
|
+
s.add_dependency "ncurses-ruby"
|
16
|
+
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
end
|
data/lib/blight.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'ncurses'
|
2
|
+
|
3
|
+
module Blight
|
4
|
+
|
5
|
+
class RunsLoop
|
6
|
+
def run(options = {})
|
7
|
+
config = default_options.merge(options)
|
8
|
+
|
9
|
+
begin
|
10
|
+
Ncurses.initscr
|
11
|
+
Ncurses.raw
|
12
|
+
Ncurses.start_color if config[:color]
|
13
|
+
config[:echo] ? Ncurses.echo : Ncurses.noecho
|
14
|
+
|
15
|
+
yield window = Window.new
|
16
|
+
|
17
|
+
while window.open?
|
18
|
+
key = Ncurses.stdscr.getch
|
19
|
+
config[:listeners].each { |l| l.listen({value: key.chr}, window) }
|
20
|
+
end
|
21
|
+
|
22
|
+
ensure
|
23
|
+
Ncurses.endwin
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_options
|
30
|
+
{
|
31
|
+
color: true,
|
32
|
+
listeners: [ListensForQuitters.new],
|
33
|
+
echo: false
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class Window
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
@window = Ncurses.stdscr
|
43
|
+
end
|
44
|
+
|
45
|
+
def x
|
46
|
+
Ncurses.getcurx(@window)
|
47
|
+
end
|
48
|
+
|
49
|
+
def y
|
50
|
+
Ncurses.getcury(@window)
|
51
|
+
end
|
52
|
+
|
53
|
+
def width
|
54
|
+
Ncurses.getmaxx(@window)
|
55
|
+
end
|
56
|
+
|
57
|
+
def height
|
58
|
+
Ncurses.getmaxy(@window)
|
59
|
+
end
|
60
|
+
|
61
|
+
def print(string, x = x, y = y)
|
62
|
+
Ncurses.mvwprintw(@window, y, x, string)
|
63
|
+
refresh
|
64
|
+
end
|
65
|
+
|
66
|
+
def open?
|
67
|
+
!@closed
|
68
|
+
end
|
69
|
+
|
70
|
+
def close
|
71
|
+
@closed = true
|
72
|
+
end
|
73
|
+
|
74
|
+
def refresh
|
75
|
+
Ncurses.refresh
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
class RendersCenteredText
|
81
|
+
def initialize(window)
|
82
|
+
@window = window
|
83
|
+
end
|
84
|
+
|
85
|
+
def render(text)
|
86
|
+
center_x = @window.x + (@window.width - text.length) / 2
|
87
|
+
center_y = @window.height / 2
|
88
|
+
@window.print(text, center_x, center_y)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class UsesColors
|
93
|
+
def initialize(window)
|
94
|
+
@window = window
|
95
|
+
end
|
96
|
+
|
97
|
+
def use(foreground, background)
|
98
|
+
Ncurses.init_pair(1, find(foreground), find(background))
|
99
|
+
Ncurses.attron(Ncurses.COLOR_PAIR(1))
|
100
|
+
yield
|
101
|
+
Ncurses.attroff(Ncurses.COLOR_PAIR(1))
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def find(color)
|
107
|
+
Ncurses.const_get("COLOR_#{color.to_s.upcase}")
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
class ListensForQuitters
|
113
|
+
def listen(event, window)
|
114
|
+
window.close if event[:value] == 'q'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blight
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Justin Searls
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-06-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ncurses-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Blight provides a sane interface to the very procedural ncurses API
|
31
|
+
email: searls@gmail.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- .gitignore
|
37
|
+
- Gemfile
|
38
|
+
- Rakefile
|
39
|
+
- blight.gemspec
|
40
|
+
- lib/blight.rb
|
41
|
+
- lib/blight/version.rb
|
42
|
+
homepage: https://github.com/searls/blight
|
43
|
+
licenses: []
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.8.24
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: ncurses with less cursing
|
66
|
+
test_files: []
|