curses-extension 2.2 → 2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '04280f3b09961bca34f139e055228c7206b28dcae370c22ae0417dca8fbb5fc2'
4
- data.tar.gz: 063e86ad7733dd4c5ee83664a59a3a3dbf59e45bdfda09a8efc1bc4e09cfd392
3
+ metadata.gz: 42000c1ac48e5ea98e193df0c18c8874146f26e53f671cf84f6338a7dda7cce6
4
+ data.tar.gz: ec6dad6abda95da23ecbbabc23be1019860f9da2929f6a0f3962baaede26df7c
5
5
  SHA512:
6
- metadata.gz: 65c963c468c4b9101e59f9208815b58bb4d9f7bb07c34298aa1628a3f783de61cf9de186bed60f6b0246bd1f20be7eb9d4bfbb7cede62e7952e33fa17aa6f1bf
7
- data.tar.gz: c80f69f856b9a4faacdabf5a3bc8b8f69293b463f1b6f9b308319b98146d7ba6a0516387bb2e65cec4a121bfc96d2b06682851b1fb2b84ef293994e49e170198
6
+ metadata.gz: 2ab8dbfc99e8d9a93c030b5c1a24390abb8b747911cd3bed0a4495ec4fe67d91ee79d8a0415b08ca42f09a624d92fd2644c8bb6cc8fcd67e075ff3ae5807a92a
7
+ data.tar.gz: ae787aa46b4e57d114714577ae000992bf7a55c40f90eb6a6ca9982c937a05a7294a9f7f99081f5f4617ce576c0ce473ce9a6c448e8bac1cb5685f3809d88b6e
data/lib/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Ruby-Curses-Class-Extension
2
2
  Extending the Ruby Curses module with some obvious needed functionality.
3
3
 
4
+ No more fiddling with color pairs. No more manual filling lines or framing.
5
+
4
6
  With this extension, you don't need to initiate any color pairs or add text to
5
7
  windows with odd syntax. Use any foreground and backround color you see fit
6
8
  and let this extension take care of the weird need to pair colors and initiate
@@ -13,8 +15,18 @@ default foreground, background and attribute for a window (e.g. `win.fg =
13
15
  to a window with `win.p("Hello World")` where the defaults will be applied.
14
16
  You can override the defaults with e.g. `win.p(124, "Hello World")` to write
15
17
  the text in red or `win.p(76, 240, Curses::A_BOLD, "Hello World")` to write
16
- the text in bold green on a gray background.
18
+ the text in bold green on a gray background.
19
+
20
+ There is also the handy method `nl` that fills the rest of the line with
21
+ spaces and (optional) background color, making it an effective newline.
17
22
 
23
+ And then there is the convenient `frame`method that adds a... frame to the
24
+ window.
25
+
26
+ The `curses-template.rb` contains code that helps you understand how you can
27
+ easily create curses applications in Ruby. It is a fully runnable app that
28
+ doesn't do much - but you can fiddle around with the code and test
29
+ functionality for yourself.
18
30
 
19
31
  ## Attributes
20
32
  Attribute | Description
@@ -26,18 +38,22 @@ update | Whether to update the window on the next refresh
26
38
  index | Used to track an index for each window (used to display lists such as the content of a directory, etc.)
27
39
 
28
40
  ## Functions
41
+ Parameters in square are optional.
42
+
29
43
  Function | Description
30
44
  ------------------------------------|--------------------------------------------------------
31
- clr | Clears window without flicker (win.clear flickers)
32
- clr_to_cur_line | Clears the window up to the current line
33
- clr_from_cur_line | Clears the rest of the window after the current line
34
- fill | Fill window with color as set by :color ( or :bg if not :color is set)
35
- fill_to_cur_pos | Fill the window up to the current line
36
- fill_from_cur_pos | Fill the rest of the window after the current line
37
- p(fg, bg, attr, text) | Write text to window with fg/bg and attributes (will handle the exceptions if no colors are set).
38
- You can use `puts` instead of `p` (it's an alias)
39
- pclr(text) | As `p(text)` but also clears the rest of the window
40
- format(text) | Format text so that it linebreaks neatly inside window
45
+ clr | Clears window without flicker (win.clear flickers)
46
+ clr_to_cur_line | Clears the window up to the current line
47
+ clr_from_cur_line | Clears the rest of the window after the current line
48
+ fill | Fill window with color as set by :color ( or :bg if not :color is set)
49
+ fill_to_cur_pos | Fill the window up to the current line
50
+ fill_from_cur_pos | Fill the rest of the window after the current line
51
+ p([fg], [bg], [attr], text) | Write text to window with fg/bg and attributes (will handle the exceptions if no colors are set)
52
+ You can use `puts` instead of `p` (it's an alias). `fg`, `bg` and `attr` are optional parameters
53
+ pclr(text) | As `p(text)` but also clears the rest of the window
54
+ nl([bg]) | Newline. Puts spaces with (optional) background colors until the end of the line
55
+ frame([fg],[bg]) | Frame the window
56
+ format(text) | Format text so that it linebreaks neatly inside window
41
57
 
42
58
  ## Curses template
43
59
  The `curses_template.rb` includes the class extension and serves as the basis for my curses applications. It is a runnable curses application that does nothing.
@@ -84,6 +84,12 @@ class Curses::Window # CLASS EXTENSION
84
84
  self.p(fg, bg, attr, text)
85
85
  self.clr_from_cur_line
86
86
  end
87
+ def frame(fg = self.fg, bg = self.bg)
88
+ self.setpos(0,0)
89
+ self.p("┌" + "─"*(self.maxx-2) + "┐")
90
+ (self.maxy-2).times {self.p("│" + " "*(self.maxx-2) + "│")}
91
+ self.p("└" + "─"*(self.maxx-2) + "┘")
92
+ end
87
93
  def format(text) # Format text so that it linebreaks neatly inside window
88
94
  return "\n" + text.gsub(/(.{1,#{self.maxx}})( +|$\n?)|(.{1,#{self.maxx}})/, "\\1\\3\n")
89
95
  end
@@ -116,12 +116,19 @@ class Curses::Window # CLASS EXTENSION
116
116
  self.p(fg, bg, attr, text)
117
117
  self.clr_from_cur_line
118
118
  end
119
+ def frame(fg = self.fg, bg = self.bg)
120
+ self.setpos(0,0)
121
+ self.p("┌" + "─"*(self.maxx-2) + "┐")
122
+ (self.maxy-2).times {self.p("│" + " "*(self.maxx-2) + "│")}
123
+ self.p("└" + "─"*(self.maxx-2) + "┘")
124
+ end
119
125
  def format(text) # Format text so that it linebreaks neatly inside window
120
126
  return "\n" + text.gsub(/(.{1,#{self.maxx}})( +|$\n?)|(.{1,#{self.maxx}})/, "\\1\\3\n")
121
127
  end
122
128
  alias :puts :p
123
129
  end
124
130
 
131
+ # GENERAL FUNCTIONS
125
132
  def getchr # Process key presses
126
133
  c = STDIN.getch
127
134
  #c = STDIN.getch(min: 0, time: 1) # Use this if you need to poll for user keys
@@ -170,27 +177,51 @@ def getchr # Process key presses
170
177
  end
171
178
  return chr
172
179
  end
173
-
174
180
  def main_getkey # GET KEY FROM USER
175
181
  chr = getchr
176
182
  case chr
177
- when '?' # Show helptext in right window
178
- # Add code to show help text here
179
- when 'UP' # Examples of moving up and down in a window
180
- @index = @index <= @min_index ? @max_index : @index - 1
183
+ when '?' # Show helptext in right window - add code to show help text here
184
+ @w_t.clr
185
+ @w_t.p("Try pressing 'w'")
186
+ @w_t.nl
187
+ @w_t.update = false
188
+ # Examples of moving up and down in a window
189
+ # You must set @min_index and @max_index in the main loop of the program
190
+ when 'UP'
191
+ @w_l.index = @w_l.index <= @min_index ? @max_index : @w_l.index - 1
181
192
  when 'DOWN'
182
- @index = @index >= @max_index ? @min_index : @index + 1
193
+ @w_l.index = @w_l.index >= @max_index ? @min_index : @w_l.index + 1
183
194
  when 'PgUP'
184
- @index -= @w_l.maxy - 2
185
- @index = @min_index if @index < @min_index
195
+ @w_l.index -= @w_l.maxy - 2
196
+ @w_l.index = @min_index if @w_l.index < @min_index
186
197
  when 'PgDOWN'
187
- @index += @w_l.maxy - 2
188
- @index = @max_index if @index > @max_index
198
+ @w_l.index += @w_l.maxy - 2
199
+ @w_l.index = @max_index if @w_l.index > @max_index
189
200
  when 'HOME'
190
- @index = @min_index
201
+ @w_l.index = @min_index
191
202
  when 'END'
192
- @index = @max_index
193
- when 'l'
203
+ @w_l.index = @max_index
204
+ when 'w' # Shows how you can add a window and get input from there and then close the window
205
+ maxx = Curses.cols
206
+ maxy = Curses.lines
207
+ # Curses::Window.new ( h, w, y, x)
208
+ @w_w = Curses::Window.new( 6, 20, maxy/2-3, maxx/2-10)
209
+ @w_w.fg, @w_w.bg, @w_w.attr = 255, 233, Curses::A_BOLD
210
+ @w_w.frame
211
+ @w_w.setpos(4, 7)
212
+ @w_w.p(255,130," y/n? ")
213
+ chrw = getchr
214
+ case chrw
215
+ when 'y'
216
+ @w_w.setpos(4, 7)
217
+ @w_w.p(255,22," YES! ")
218
+ when 'n'
219
+ @w_w.setpos(4, 7)
220
+ @w_w.p(255,52," NO!! ")
221
+ end
222
+ chrw = getchr
223
+ @w_w.close
224
+ when 'a'
194
225
  # ...etc
195
226
  when 'r'
196
227
  @break = true
@@ -310,13 +341,15 @@ loop do # OUTER LOOP - (catching refreshes via 'r')
310
341
  @w_b.fg, @w_b.bg, @w_b.attr = 231, 238, 0
311
342
  @w_l.fg, @w_l.bg, @w_l.attr = 46, 234, 0
312
343
  @w_r.fg, @w_r.bg, @w_r.attr = 202, 235, 0
344
+ @w_t.fill
313
345
  loop do # INNER, CORE LOOP
314
- @w_t.fill; @w_b.fill; @w_l.fill; @w_r.fill
315
-
346
+ @w_b.fill; @w_l.fill; @w_r.fill
316
347
  # Example code to write to the panes in various ways
317
- @w_t.p("Top window")
318
- @w_b.p("Bottom window")
348
+ @w_t.p("Top window") unless @w_t.update == false
349
+ @w_b.p("Bottom window - try pressing '?'")
350
+ @w_l.setpos(@w_l.maxy/2, @w_l.maxx/2-6)
319
351
  @w_l.p(196,182,Curses::A_BOLD,"Left window")
352
+ @w_r.setpos(@w_r.maxy/2, @w_r.maxx/2-7)
320
353
  @w_r.p("Right window")
321
354
 
322
355
  # Top window (info line)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curses-extension
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.2'
4
+ version: '2.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-09 00:00:00.000000000 Z
11
+ date: 2023-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -35,8 +35,8 @@ description: 'The Ruby curses library is sorely lacking some important features.
35
35
  terminal curses applications in Ruby. See the Github page for information on what
36
36
  properties and functions are included: https://github.com/isene/Ruby-Curses-Class-Extension.
37
37
  The curses_template.rb is also installed in the lib directory and serves as the
38
- basis for my own curses applications. New in 2.2: "Added the method `nl`, an effective
39
- newline"'
38
+ basis for my own curses applications. New in 2.2: Added the method `frame` and made
39
+ the curses-template.rb more informative and sexy'
40
40
  email: g@isene.com
41
41
  executables: []
42
42
  extensions: []