rcurses 2.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81d2dc35832251275d8a1ffb15c8480e5824a19c4643fddf4c74a7ee2fd850d2
4
- data.tar.gz: a3f96eb853a6a4700037a13623aca7e2d242894da905edc295067475cb7675a7
3
+ metadata.gz: c193555f436c0c4c0b2b3f41c8ba4045987ac9f35bdbc8258c0018584ef79f8a
4
+ data.tar.gz: e704f5c7356ebc779a23092de1b50c54b6aea1b50703578b3614fe82dd04e3bc
5
5
  SHA512:
6
- metadata.gz: 64971c51e33f0068c2dab3f0e2a3bae2b35e17ec2b6e2d81b5fd5cc35b61a5a8f7561f7af08d3147a043f93237d62dcea31c4860d2ebf5c7be2d08555c979303
7
- data.tar.gz: aeb2ff504b4dd02822cac01fd25f5ff8423464e5b9f4cf12c08bf3b591d6c2b480e0ea3ab77d1d5ee51db6173913d74fbea528189b826e7139fe661b27141957
6
+ metadata.gz: 4cb46397b2629300cb28caec54f0fcf2679f51a8e1417f8f4f89be7e7fde4da6245c532af54a8a53d98eb71e4a17ddb9a8cee3727f452e6d94f08997c6d87e3b
7
+ data.tar.gz: d90157ceb59ddafd9679d5f164339d3fe0a540a2fc3d25f5abfb825aadcfb35b49f704c5589caaf1b8fac07a7fca23521cb495f31f4ac327f663399cb0599e0e
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <https://unlicense.org>
@@ -16,7 +16,7 @@ pane_left.border = true # Adding a border to the left pane
16
16
  # Add content to the panes
17
17
  pane_top.text = Time.now.to_s[0..15].b + " Welcome to the rcurses example program"
18
18
  pane_left.text = `ls --color`
19
- pane_right.text = "Output of lsblk:\n\n" + `lsblk`
19
+ pane_right.text = "Output of free:\n\n" + `free`
20
20
  pane_bottom.prompt = "Enter any text and press ENTER: ".b # The prompt text before the user starts writing content
21
21
 
22
22
  pane_top.refresh # This is the order of drawing/refreshing the panes
@@ -0,0 +1,79 @@
1
+ module Rcurses
2
+ module Cursor
3
+ # Terminal cursor movement ANSI codes (inspired by https://github.com/piotrmurach/tty-cursor)
4
+ module_function
5
+ ESC = "\e".freeze
6
+ CSI = "\e[".freeze
7
+ def save # Save current position
8
+ print(Gem.win_platform? ? CSI + 's' : ESC + '7')
9
+ end
10
+ def restore # Restore cursor position
11
+ print(Gem.win_platform? ? CSI + 'u' : ESC + '8')
12
+ end
13
+ def pos # Query cursor current position
14
+ res = ''
15
+ $stdin.raw do |stdin|
16
+ $stdout << CSI + '6n' # The actual ANSI get-position
17
+ $stdout.flush
18
+ while (c = stdin.getc) != 'R'
19
+ res << c if c
20
+ end
21
+ end
22
+ m = res.match(/(?<row>\d+);(?<col>\d+)/)
23
+ return m[:row].to_i, m[:col].to_i
24
+ end
25
+ def rowget
26
+ row, _col = pos
27
+ row
28
+ end
29
+ def colget
30
+ _row, col = pos
31
+ col
32
+ end
33
+ def up(n = 1) # Move cursor up by n
34
+ print(CSI + "#{(n || 1)}A")
35
+ end
36
+ def down(n = 1) # Move the cursor down by n
37
+ print(CSI + "#{(n || 1)}B")
38
+ end
39
+ def left(n = 1) # Move the cursor backward by n
40
+ print(CSI + "#{n || 1}D")
41
+ end
42
+ def right(n = 1) # Move the cursor forward by n
43
+ print(CSI + "#{n || 1}C")
44
+ end
45
+ def col(n = 1) # Cursor moves to nth position horizontally in the current line
46
+ print(CSI + "#{n || 1}G")
47
+ end
48
+ def row(n = 1) # Cursor moves to the nth position vertically in the current column
49
+ print(CSI + "#{n || 1}d")
50
+ end
51
+ def next_line # Move cursor down to beginning of next line
52
+ print(CSI + 'E' + CSI + "1G")
53
+ end
54
+ def prev_line # Move cursor up to beginning of previous line
55
+ print(CSI + 'A' + CSI + "1G")
56
+ end
57
+ def clear_char(n = 1) # Erase n characters from the current cursor position
58
+ print(CSI + "#{n}X")
59
+ end
60
+ def clear_line # Erase the entire current line and return to beginning of the line
61
+ print(CSI + '2K' + CSI + "1G")
62
+ end
63
+ def clear_line_before # Erase from the beginning of the line up to and including the current cursor position.
64
+ print(CSI + '1K')
65
+ end
66
+ def clear_line_after # Erase from the current position (inclusive) to the end of the line
67
+ print(CSI + '0K')
68
+ end
69
+ def clear_screen_down # Clear screen down from current row
70
+ print(CSI + 'J')
71
+ end
72
+ def scroll_up # Scroll display up one line
73
+ print(ESC + 'M')
74
+ end
75
+ def scroll_down # Scroll display down one line
76
+ print(ESC + 'D')
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,83 @@
1
+ module Rcurses
2
+ module Input
3
+ def getchr
4
+ # Function to process key presses
5
+ c = $stdin.getch
6
+ case c
7
+ when "\e" # ANSI escape sequences
8
+ return "ESC" if !$stdin.ready?
9
+ second_char = $stdin.getc
10
+ case second_char
11
+ when '[' # CSI
12
+ third_char = $stdin.getc
13
+ case third_char
14
+ when 'A' then chr = "UP"
15
+ when 'B' then chr = "DOWN"
16
+ when 'C' then chr = "RIGHT"
17
+ when 'D' then chr = "LEFT"
18
+ when 'Z' then chr = "S-TAB"
19
+ when '2'
20
+ fourth_char = $stdin.getc
21
+ chr = fourth_char == '~' ? "INS" : ""
22
+ when '3'
23
+ fourth_char = $stdin.getc
24
+ chr = fourth_char == '~' ? "DEL" : ""
25
+ when '5'
26
+ fourth_char = $stdin.getc
27
+ chr = fourth_char == '~' ? "PgUP" : ""
28
+ when '6'
29
+ fourth_char = $stdin.getc
30
+ chr = fourth_char == '~' ? "PgDOWN" : ""
31
+ when '1', '7'
32
+ fourth_char = $stdin.getc
33
+ chr = fourth_char == '~' ? "HOME" : ""
34
+ when '4', '8'
35
+ fourth_char = $stdin.getc
36
+ chr = fourth_char == '~' ? "END" : ""
37
+ else chr = ""
38
+ end
39
+ when 'O' # Function keys
40
+ third_char = $stdin.getc
41
+ case third_char
42
+ when 'a' then chr = "C-UP"
43
+ when 'b' then chr = "C-DOWN"
44
+ when 'c' then chr = "C-RIGHT"
45
+ when 'd' then chr = "C-LEFT"
46
+ else chr = ""
47
+ end
48
+ else
49
+ chr = ""
50
+ end
51
+ when "\r" then chr = "ENTER"
52
+ when "\t" then chr = "TAB"
53
+ when "\u007F", "\b" then chr = "BACK"
54
+ when "\u0001" then chr = "C-A"
55
+ when "\u0002" then chr = "C-B"
56
+ when "\u0003" then chr = "C-C"
57
+ when "\u0004" then chr = "C-D"
58
+ when "\u0005" then chr = "C-E"
59
+ when "\u0006" then chr = "C-F"
60
+ when "\u0007" then chr = "C-G"
61
+ when "\u000B" then chr = "C-K"
62
+ when "\u000C" then chr = "C-L"
63
+ when "\u000D" then chr = "C-M"
64
+ when "\u000E" then chr = "C-N"
65
+ when "\u000F" then chr = "C-O"
66
+ when "\u0010" then chr = "C-P"
67
+ when "\u0011" then chr = "C-Q"
68
+ when "\u0012" then chr = "C-R"
69
+ when "\u0014" then chr = "C-T"
70
+ when "\u0015" then chr = "C-U"
71
+ when "\u0016" then chr = "C-V"
72
+ when "\u0018" then chr = "C-X"
73
+ when "\u0019" then chr = "C-Y"
74
+ when "\u001A" then chr = "C-Z"
75
+ when "\u0017" then chr = "WBACK"
76
+ when "\u0013" then chr = "C-S"
77
+ when /[[:print:]]/ then chr = c
78
+ else chr = ""
79
+ end
80
+ chr
81
+ end
82
+ end
83
+ end