tty-cursor 0.3.0 → 0.4.0

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
  SHA1:
3
- metadata.gz: 1a327e575afda2187a43bf90385fae901872320f
4
- data.tar.gz: bb8ad05a2a7740c63fb0532cd96f295b040f2258
3
+ metadata.gz: 21bae31e727bfc59faaf59b29fe458f9d6c96463
4
+ data.tar.gz: 145f6e5308fc50a95c51e76bff5b076114d6bc06
5
5
  SHA512:
6
- metadata.gz: b9190c8bfe4ccb4987a3880492a6c939e1ca2e2668e3d2d578212dc2fc083bb6c53254dc330baa78d856e16035d2a532a40066e2608ed035551be9e6681bc31e
7
- data.tar.gz: ea66792a3c695eeded5733cac0968ad1f8b85ba0687b02c4e46e64fb25ca50e4ff373caa34c5fcefdef069322a8184adbee7438b24888bfe402f8dc297b85333
6
+ metadata.gz: 38785d325d0a77807bfdc213b87e90e6786a1508c4416a8ecf68bf92d1227e9cdb35aa7fcc43116e1e49759dc07e10bddcd321eb1f5fc4e70d89a5e6cbeca0fd
7
+ data.tar.gz: 12c6e6be868e68e6f0f3bd50b02eea8c409940ed9189d3d99910eeab43c6c4ccd3c85e4d0bd789e04a8b66262e58fe79dfc9198e7abc449c4df500d66231b662
data/.travis.yml CHANGED
@@ -6,22 +6,21 @@ bundler_args: --without yard benchmarks
6
6
  script: "bundle exec rake ci"
7
7
  rvm:
8
8
  - 1.9.3
9
- - 2.0
10
- - 2.1
11
- - 2.2
12
- - 2.3.0
9
+ - 2.0.0
10
+ - 2.1.10
11
+ - 2.2.6
12
+ - 2.3.3
13
+ - 2.4.0
13
14
  - ruby-head
15
+ - jruby-9000
16
+ - jruby-head
17
+ - rbx-3
14
18
  matrix:
15
- include:
16
- - rvm: jruby-19mode
17
- - rvm: jruby-20mode
18
- - rvm: jruby-21mode
19
- - rvm: jruby-9000
20
- - rvm: jruby-head
21
- - rvm: rbx-2
22
19
  allow_failures:
20
+ - rvm: 2.4.0
23
21
  - rvm: ruby-head
24
22
  - rvm: jruby-head
23
+ - rvm: rbx-3
25
24
  fast_finish: true
26
25
  branches:
27
26
  only: master
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Change log
2
2
 
3
+ ## [v0.4.0] - 2017-01-08
4
+
5
+ ### Added
6
+ * Add #clear_char for erasing characters
7
+ * Add #clear_line_before for erasing line before the cursor
8
+ * Add #clear_line_after for erasing line after the cursor
9
+ * Add #column to move the cursor horizontally in the current line
10
+ * Add #row to move the cursor vertically in the current column
11
+
12
+ ### Changed
13
+ * Remove #move_start
14
+ * Change #next_line to move the cursor to beginning of the line
15
+ * Change #clear_line to move the cursor to beginning of the line
16
+ * Change alias_method to alias
17
+
18
+ ### Fixed
19
+ * Fix #clear_line to correctly clear whole line
20
+
3
21
  ## [v0.3.0] - 2016-05-21
4
22
 
5
23
  ### Fixed
@@ -14,6 +32,7 @@
14
32
 
15
33
  * Initial implementation and release
16
34
 
35
+ [v0.4.0]: https://github.com/peter-murach/tty-cursor/compare/v0.3.0...v0.4.0
17
36
  [v0.3.0]: https://github.com/peter-murach/tty-cursor/compare/v0.2.0...v0.3.0
18
37
  [v0.2.0]: https://github.com/peter-murach/tty-cursor/compare/v0.1.0...v0.2.0
19
38
  [v0.1.0]: https://github.com/peter-murach/tty-cursor/compare/v0.1.0
@@ -0,0 +1,49 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, and in the interest of
4
+ fostering an open and welcoming community, we pledge to respect all people who
5
+ contribute through reporting issues, posting feature requests, updating
6
+ documentation, submitting pull requests or patches, and other activities.
7
+
8
+ We are committed to making participation in this project a harassment-free
9
+ experience for everyone, regardless of level of experience, gender, gender
10
+ identity and expression, sexual orientation, disability, personal appearance,
11
+ body size, race, ethnicity, age, religion, or nationality.
12
+
13
+ Examples of unacceptable behavior by participants include:
14
+
15
+ * The use of sexualized language or imagery
16
+ * Personal attacks
17
+ * Trolling or insulting/derogatory comments
18
+ * Public or private harassment
19
+ * Publishing other's private information, such as physical or electronic
20
+ addresses, without explicit permission
21
+ * Other unethical or unprofessional conduct
22
+
23
+ Project maintainers have the right and responsibility to remove, edit, or
24
+ reject comments, commits, code, wiki edits, issues, and other contributions
25
+ that are not aligned to this Code of Conduct, or to ban temporarily or
26
+ permanently any contributor for other behaviors that they deem inappropriate,
27
+ threatening, offensive, or harmful.
28
+
29
+ By adopting this Code of Conduct, project maintainers commit themselves to
30
+ fairly and consistently applying these principles to every aspect of managing
31
+ this project. Project maintainers who do not follow or enforce the Code of
32
+ Conduct may be permanently removed from the project team.
33
+
34
+ This code of conduct applies both within project spaces and in public spaces
35
+ when an individual is representing the project or its community.
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
38
+ reported by contacting a project maintainer at [email]. All
39
+ complaints will be reviewed and investigated and will result in a response that
40
+ is deemed necessary and appropriate to the circumstances. Maintainers are
41
+ obligated to maintain confidentiality with regard to the reporter of an
42
+ incident.
43
+
44
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
45
+ version 1.3.0, available at
46
+ [http://contributor-covenant.org/version/1/3/0/][version]
47
+
48
+ [homepage]: http://contributor-covenant.org
49
+ [version]: http://contributor-covenant.org/version/1/3/0/
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ gemspec
4
4
 
5
5
  group :development do
6
6
  gem 'rake', '~> 10.4.2'
7
- gem 'rspec', '~> 3.4.0'
7
+ gem 'rspec', '~> 3.5.0'
8
8
  gem 'yard', '~> 0.8.7'
9
9
  gem 'benchmark-ips', '~> 2.0.0'
10
10
  end
@@ -13,4 +13,5 @@ group :metrics do
13
13
  gem 'coveralls', '~> 0.8.9'
14
14
  gem 'simplecov', '~> 0.10.0'
15
15
  gem 'yardstick', '~> 0.9.9'
16
+ gem 'term-ansicolor', '=1.3.2'
16
17
  end
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # TTY::Cursor [![Gitter](https://badges.gitter.im/Join%20Chat.svg)][gitter]
2
2
  [![Gem Version](https://badge.fury.io/rb/tty-cursor.svg)][gem]
3
3
  [![Build Status](https://secure.travis-ci.org/piotrmurach/tty-cursor.svg?branch=master)][travis]
4
+ [![Build status](https://ci.appveyor.com/api/projects/status/4k7cd69jscwg7fl7?svg=true)][appveyor]
4
5
  [![Code Climate](https://codeclimate.com/github/piotrmurach/tty-cursor/badges/gpa.svg)][codeclimate]
5
6
  [![Coverage Status](https://coveralls.io/repos/piotrmurach/tty-cursor/badge.svg)][coverage]
6
7
  [![Inline docs](http://inch-ci.org/github/piotrmurach/tty-cursor.svg?branch=master)][inchpages]
@@ -8,13 +9,14 @@
8
9
  [gitter]: https://gitter.im/piotrmurach/tty
9
10
  [gem]: http://badge.fury.io/rb/tty-cursor
10
11
  [travis]: http://travis-ci.org/piotrmurach/tty-cursor
12
+ [appveyor]: https://ci.appveyor.com/project/piotrmurach/tty-cursor
11
13
  [codeclimate]: https://codeclimate.com/github/piotrmurach/tty-cursor
12
14
  [coverage]: https://coveralls.io/r/piotrmurach/tty-cursor
13
15
  [inchpages]: http://inch-ci.org/github/piotrmurach/tty-cursor
14
16
 
15
- > Terminal cursor movement and manipulation of cursor properties such as visibility.
17
+ > Terminal cursor positioning, visibility and text manipulation.
16
18
 
17
- The purpose of this library is to help move terminal cursor around using intuitive commands and help in clearing terminal screen.
19
+ The purpose of this library is to help move the terminal cursor around and manipulate text by using intuitive method calls.
18
20
 
19
21
  **TTY::Cursor** provides independent cursor movement component for [TTY](https://github.com/piotrmurach/tty) toolkit.
20
22
 
@@ -38,27 +40,33 @@ Or install it yourself as:
38
40
 
39
41
  * [1. Usage](#1-usage)
40
42
  * [2. Interface](#2-interface)
41
- * [2.1 Cursor control](#21-cursor-control)
43
+ * [2.1 Cursor Positioning](#21-cursor-positioning)
42
44
  * [2.1.1 move_to(x, y)](#211-move_tox-y)
43
45
  * [2.1.2 move(x, y)](#212-movex-y)
44
- * [2.1.3 up(count)](#213-upcount)
45
- * [2.1.4 down(count)](#214-downcount)
46
- * [2.1.5 forward(count)](#215-forwardcount)
47
- * [2.1.6 backward(count)](#216-backwardcount)
48
- * [2.1.7 save](#217-save)
49
- * [2.1.8 restore](#218-restore)
50
- * [2.1.9 current](#219-current)
51
- * [2.1.10 next_line](#2110-next_line)
52
- * [2.1.11 prev_line](#2111-prev_line)
53
- * [2.1.12 show](#2112-show)
54
- * [2.1.13 hide](#2113-hide)
55
- * [2.1.14 invisible(stream)](#2114-invisiblestream)
56
- * [2.2 Clearing text](#22-clearing-text)
57
- * [2.2.1 clear_line](#221-clear_line)
58
- * [2.2.2 clear_lines(count, direction)](#222-clear_linescount-direction)
59
- * [2.2.3 clear_screen_down](#223-clear_screen_down)
60
- * [2.2.4 clear_screen_up](#224-clear_screen_up)
61
- * [2.2.5 clear_screen](#225-clear_screen)
46
+ * [2.1.3 up(n)](#213-upn)
47
+ * [2.1.4 down(n)](#214-downn)
48
+ * [2.1.5 forward(n)](#215-forwardn)
49
+ * [2.1.6 backward(n)](#216-backwardn)
50
+ * [2.1.7 column(n)](#217-columnn)
51
+ * [2.1.8 row(n)](#218-rown)
52
+ * [2.1.9 next_line](#219-next_line)
53
+ * [2.1.10 prev_line](#2110-prev_line)
54
+ * [2.1.11 save](#2111-save)
55
+ * [2.1.12 restore](#2112-restore)
56
+ * [2.1.13 current](#2113-current)
57
+ * [2.2 Cursor Visibility](#22-cursor-visibility)
58
+ * [2.2.1 show](#221-show)
59
+ * [2.2.2 hide](#222-hide)
60
+ * [2.2.3 invisible(stream)](#2114-invisiblestream)
61
+ * [2.3 Text Modification](#23-text-modification)
62
+ * [2.3.1 clear_char(n)](#231-clear_charn)
63
+ * [2.3.2 clear_line](#232-clear_line)
64
+ * [2.3.3 clear_line_before](#233-clear_line)
65
+ * [2.3.4 clear_line_after](#234-clear_line)
66
+ * [2.3.5 clear_lines(n, direction)](#235-clear_linesn-direction)
67
+ * [2.3.6 clear_screen_down](#236-clear_screen_down)
68
+ * [2.3.7 clear_screen_up](#237-clear_screen_up)
69
+ * [2.3.8 clear_screen](#238-clear_screen)
62
70
 
63
71
  ## 1. Usage
64
72
 
@@ -68,21 +76,31 @@ Or install it yourself as:
68
76
  cursor = TTY::Cursor
69
77
  ```
70
78
 
71
- and then to move cursor 5 rows up and 2 columns forward do:
79
+ and to move the cursor current position by 5 rows up and 2 columns right do:
72
80
 
73
81
  ```ruby
74
82
  print cursor.up(5) + cursor.forward(2)
75
83
  ```
76
84
 
77
- or simple call `move` to move cursor relative to current position:
85
+ or call `move` to move cursor relative to current position:
78
86
 
79
87
  ```ruby
80
88
  print cursor.move(5, 2)
81
89
  ```
82
90
 
91
+ to remove text from the current line do:
92
+
93
+ ```ruby
94
+ print cursor.clear_line
95
+ ```
96
+
83
97
  ## 2. Interface
84
98
 
85
- ### 2.1 Cursor control
99
+ ### 2.1 Cursor Positioning
100
+
101
+ All methods in this section allow to position the cursor around the terminal viewport.
102
+
103
+ Cursor movement will be bounded by the current viewport into the buffer. Scrolling (if available) will not occur.
86
104
 
87
105
  #### 2.1.1 move_to(x, y)
88
106
 
@@ -98,53 +116,65 @@ cursor.move_to
98
116
 
99
117
  Move cursor by x columns and y rows relative to its current position.
100
118
 
101
- #### 2.1.3 up(count)
119
+ #### 2.1.3 up(n)
120
+
121
+ Move the cursor up by `n` rows; the default n is `1`.
122
+
123
+ #### 2.1.4 down(n)
102
124
 
103
- Move the cursor up by `count` rows; the default count is `1`.
125
+ Move the cursor down by `n` rows; the default n is `1`.
104
126
 
105
- #### 2.1.4 down(count)
127
+ #### 2.1.5 forward(n)
106
128
 
107
- Move the cursor down by `count` rows; the default count is `1`.
129
+ Move the cursor forward by `n` columns; the default n is `1`.
108
130
 
109
- #### 2.1.5 forward(count)
131
+ #### 2.1.6 backward(n)
110
132
 
111
- Move the cursor forward by `count` columns; the default count is `1`.
133
+ Move the cursor backward by `n` columns; the default n is `1`.
112
134
 
113
- #### 2.1.6 backward(count)
135
+ #### 2.1.7 column(n)
114
136
 
115
- Move the cursor backward by COUNT columns; the default count is `1`.
137
+ Cursor moves to `<n>`th position horizontally in the current line.
116
138
 
117
- #### 2.1.7 save
139
+ #### 2.1.8 row(n)
140
+
141
+ Cursor moves the the `<n>`th position vertically in the current column.
142
+
143
+ #### 2.1.9 next_line
144
+
145
+ Move the cursor down to the beginning of the next line.
146
+
147
+ #### 2.1.10 prev_line
148
+
149
+ Move the cursor up to the beginning of the previous line.
150
+
151
+ #### 2.1.11 save
118
152
 
119
153
  Save current cursor position.
120
154
 
121
- #### 2.1.8 restore
155
+ #### 2.1.12 restore
122
156
 
123
157
  Restore cursor position after a save cursor was called.
124
158
 
125
- #### 2.1.9 current
159
+ #### 2.1.13 current
126
160
 
127
161
  Query current cursor position
128
162
 
129
- #### 2.1.10 next_line
130
-
131
- Move the cursor to the next line.
163
+ ### 2.2 Cursor Visibility
132
164
 
133
- #### 2.1.11 prev_line
165
+ The following methods control the visibility of the cursor.
134
166
 
135
- Move the cursor to the previous line.
167
+ #### 2.2.1 show
136
168
 
137
- #### 2.1.12 show
169
+ Show the cursor.
138
170
 
139
- Show cursor
171
+ #### 2.2.2 hide
140
172
 
141
- #### 2.1.13 hide
173
+ Hide the cursor.
142
174
 
143
- Hide cursor
175
+ #### 2.2.3 invisible(stream)
144
176
 
145
- #### 2.1.14 invisible(stream)
146
-
147
- To hide cursor for the duration of the block do:
177
+ To hide the cursor for the duration of the block do:
148
178
 
149
179
  ```ruby
150
180
  cursor.invisible { ... }
@@ -156,31 +186,45 @@ By default standard output will be used but you can change that by passing a dif
156
186
  cursor.invisible($stderr) { .... }
157
187
  ```
158
188
 
159
- ### 2.2 Clearing text
189
+ ### 2.3 Text Modification
190
+
191
+ All methods in this section provide APIs to modify text buffer contents.
192
+
193
+ #### 2.3.1 clear_char(n)
194
+
195
+ Erase `<n>` characters from the current cursor position by overwritting them with space character.
196
+
197
+ #### 2.3.2 clear_line
198
+
199
+ Erase the entire current line and return cursor to beginning of the line.
200
+
201
+ #### 2.3.3 clear_line_before
202
+
203
+ Erase from the beginning of the line up to and including the current position.
160
204
 
161
- #### 2.2.1 clear_line
205
+ #### 2.3.4 clear_line_after
162
206
 
163
- Erase the entire current line.
207
+ Erase from the current position (inclusive) to the end of the line/display.
164
208
 
165
- #### 2.2.2 clear_lines(count, direction)
209
+ #### 2.3.5 clear_lines(n, direction)
166
210
 
167
- Erase `count` rows in given direction; the default direction is `:up`.
211
+ Erase `n` rows in given direction; the default direction is `:up`.
168
212
 
169
213
  ```ruby
170
214
  cursor.clear_lines(5, :down)
171
215
  ```
172
216
 
173
- #### 2.2.3 clear_screen_down
217
+ #### 2.3.6 clear_screen
174
218
 
175
- Erase the screen from the current line down to the bottom of the screen.
219
+ Erase the screen with the background colour and moves the cursor to home.
176
220
 
177
- #### 2.2.4 clear_screen_up
221
+ #### 2.3.7 clear_screen_down
178
222
 
179
- Erase the screen from the current line up to the top of the screen.
223
+ Erase the screen from the current line down to the bottom of the screen.
180
224
 
181
- #### 2.2.5 clear_screen
225
+ #### 2.3.8 clear_screen_up
182
226
 
183
- Erase the screen with the background colour and moves the cursor to home.
227
+ Erase the screen from the current line up to the top of the screen.
184
228
 
185
229
  ## Contributing
186
230
 
@@ -190,6 +234,8 @@ Erase the screen with the background colour and moves the cursor to home.
190
234
  4. Push to the branch (`git push origin my-new-feature`)
191
235
  5. Create a new Pull Request
192
236
 
237
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
238
+
193
239
  ## Copyright
194
240
 
195
- Copyright (c) 2015-2016 Piotr Murach. See LICENSE for further details.
241
+ Copyright (c) 2015-2017 Piotr Murach. See LICENSE for further details.
data/appveyor.yml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ install:
3
+ - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
4
+ - ruby --version
5
+ - gem --version
6
+ - bundle install
7
+ build: off
8
+ test_script:
9
+ - bundle exec rake ci
10
+ environment:
11
+ matrix:
12
+ - ruby_version: "193"
13
+ - ruby_version: "200"
14
+ - ruby_version: "200-x64"
15
+ - ruby_version: "21"
16
+ - ruby_version: "21-x64"
17
+ - ruby_version: "22"
18
+ - ruby_version: "22-x64"
19
+ - ruby_version: "23"
20
+ - ruby_version: "23-x64"
21
+ matrix:
22
+ allow_failures:
23
+ - ruby_version: "193"
data/lib/tty/cursor.rb CHANGED
@@ -5,22 +5,22 @@ module TTY
5
5
  module Cursor
6
6
  module_function
7
7
 
8
- ECMA_CSI = "\e[".freeze
8
+ ESC = "\e".freeze
9
+ CSI = "\e[".freeze
9
10
  DEC_RST = 'l'.freeze
10
11
  DEC_SET = 'h'.freeze
11
12
  DEC_TCEM = '?25'.freeze
12
- ECMA_CLR = 'K'.freeze
13
13
 
14
14
  # Make cursor visible
15
15
  # @api public
16
16
  def show
17
- ECMA_CSI + DEC_TCEM + DEC_SET
17
+ CSI + DEC_TCEM + DEC_SET
18
18
  end
19
19
 
20
20
  # Hide cursor
21
21
  # @api public
22
22
  def hide
23
- ECMA_CSI + DEC_TCEM + DEC_RST
23
+ CSI + DEC_TCEM + DEC_RST
24
24
  end
25
25
 
26
26
  # Switch off cursor for the block
@@ -35,19 +35,19 @@ module TTY
35
35
  # Save current position
36
36
  # @api public
37
37
  def save
38
- ECMA_CSI + 's'
38
+ CSI + 's'
39
39
  end
40
40
 
41
41
  # Restore cursor position
42
42
  # @api public
43
43
  def restore
44
- ECMA_CSI + 'u'
44
+ CSI + 'u'
45
45
  end
46
46
 
47
47
  # Query cursor current position
48
48
  # @api public
49
49
  def current
50
- ECMA_CSI + '6n'
50
+ CSI + '6n'
51
51
  end
52
52
 
53
53
  # Set the cursor absolute position
@@ -55,8 +55,8 @@ module TTY
55
55
  # @param [Integer] column
56
56
  # @api public
57
57
  def move_to(row = nil, column = nil)
58
- return ECMA_CSI + 'H' if row.nil? && column.nil?
59
- ECMA_CSI + "#{column + 1};#{row + 1}H"
58
+ return CSI + 'H' if row.nil? && column.nil?
59
+ CSI + "#{column + 1};#{row + 1}H"
60
60
  end
61
61
 
62
62
  # Move cursor relative to its current position
@@ -70,95 +70,124 @@ module TTY
70
70
  (y < 0 ? down(-y) : (y > 0 ? up(y) : ''))
71
71
  end
72
72
 
73
- # Move cursor up by number of lines
74
- #
75
- # @param [Integer] count
76
- #
73
+ # Move cursor up by n
74
+ # @param [Integer] n
77
75
  # @api public
78
- def up(count = nil)
79
- ECMA_CSI + "#{(count || 1)}A"
76
+ def up(n = nil)
77
+ CSI + "#{(n || 1)}A"
80
78
  end
81
- alias_method :cursor_up, :up
79
+ alias cursor_up up
82
80
 
83
- # Move cursor down by number of lines
84
- #
85
- # @param [Integer] count
86
- #
81
+ # Move the cursor down by n
82
+ # @param [Integer] n
87
83
  # @api public
88
- def down(count = nil)
89
- ECMA_CSI + "#{(count || 1)}B"
84
+ def down(n = nil)
85
+ CSI + "#{(n || 1)}B"
90
86
  end
91
- alias_method :cursor_down, :down
87
+ alias cursor_down down
92
88
 
93
- # Move to start of the line
94
- #
89
+ # Move the cursor backward by n
90
+ # @param [Integer] n
95
91
  # @api public
96
- def move_start
97
- backward(1000)
92
+ def backward(n = nil)
93
+ CSI + "#{n || 1}D"
98
94
  end
95
+ alias cursor_backward backward
99
96
 
100
- # @param [Integer] count
101
- # how far to go left
97
+ # Move the cursor forward by n
98
+ # @param [Integer] n
102
99
  # @api public
103
- def backward(count = nil)
104
- ECMA_CSI + "#{count || 1}D"
100
+ def forward(n = nil)
101
+ CSI + "#{n || 1}C"
105
102
  end
106
- alias_method :cursor_backward, :backward
103
+ alias cursor_forward forward
107
104
 
105
+ # Cursor moves to nth position horizontally in the current line
106
+ # @param [Integer] n
107
+ # the nth aboslute position in line
108
108
  # @api public
109
- def forward(count = nil)
110
- ECMA_CSI + "#{count || 1}C"
109
+ def column(n = nil)
110
+ CSI + "#{n || 1}G"
111
111
  end
112
- alias_method :cursor_forward, :forward
113
112
 
113
+ # Cursor moves to the nth position vertically in the current column
114
+ # @param [Integer] n
115
+ # the nth absolute position in column
116
+ # @api public
117
+ def row(n = nil)
118
+ CSI + "#{n || 1}d"
119
+ end
120
+
121
+ # Move cursor down to beginning of next line
114
122
  # @api public
115
123
  def next_line
116
- ECMA_CSI + 'E'
124
+ CSI + 'E' + column(1)
117
125
  end
118
126
 
127
+ # Move cursor up to beginning of previous line
119
128
  # @api public
120
129
  def prev_line
121
- ECMA_CSI + 'A' + ECMA_CSI + '1G'
130
+ CSI + 'A' + column(1)
122
131
  end
123
132
 
124
- # Clear current line
133
+ # Erase n characters from the current cursor position
134
+ # @api public
135
+ def clear_char(n = nil)
136
+ CSI + "#{n}X"
137
+ end
138
+
139
+ # Erase the entire current line and return to beginning of the line
125
140
  # @api public
126
141
  def clear_line
127
- move_start + ECMA_CSI + ECMA_CLR
142
+ CSI + '2K' + column(1)
143
+ end
144
+
145
+ # Erase from the beginning of the line up to and including
146
+ # the current cursor position.
147
+ # @api public
148
+ def clear_line_before
149
+ CSI + '0K'
150
+ end
151
+
152
+ # Erase from the current position (inclusive) to
153
+ # the end of the line
154
+ # @api public
155
+ def clear_line_after
156
+ CSI + '1K'
128
157
  end
129
158
 
130
159
  # Clear a number of lines
131
160
  #
132
- # @param [Integer] count
161
+ # @param [Integer] n
133
162
  # the number of lines to clear
134
163
  # @param [Symbol] :direction
135
164
  # the direction to clear, default :up
136
165
  #
137
166
  # @api public
138
- def clear_lines(count, direction = :up)
139
- count.times.reduce('') do |acc, i|
167
+ def clear_lines(n, direction = :up)
168
+ n.times.reduce('') do |acc, i|
140
169
  dir = direction == :up ? up : down
141
- acc << clear_line + ((i == count - 1) ? '' : dir)
170
+ acc << clear_line + ((i == n - 1) ? '' : dir)
142
171
  end
143
172
  end
144
- alias_method :clear_rows, :clear_lines
173
+ alias clear_rows clear_lines
145
174
 
146
175
  # Clear screen down from current position
147
176
  # @api public
148
177
  def clear_screen_down
149
- ECMA_CSI + 'J'
178
+ CSI + 'J'
150
179
  end
151
180
 
152
181
  # Clear screen up from current position
153
182
  # @api public
154
183
  def clear_screen_up
155
- ECMA_CSI + '1J'
184
+ CSI + '1J'
156
185
  end
157
186
 
158
187
  # Clear the screen with the background colour and moves the cursor to home
159
188
  # @api public
160
189
  def clear_screen
161
- ECMA_CSI + '2J'
190
+ CSI + '2J'
162
191
  end
163
192
  end # Cursor
164
193
  end # TTY
data/lib/tty/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TTY
4
4
  module Cursor
5
- VERSION = '0.3.0'
5
+ VERSION = '0.4.0'
6
6
  end # Cursor
7
7
  end # TTY
@@ -3,27 +3,43 @@
3
3
  RSpec.describe TTY::Cursor, '#clear_lines' do
4
4
  subject(:cursor) { described_class }
5
5
 
6
+ it "clears character" do
7
+ expect(cursor.clear_char).to eq("\e[X")
8
+ end
9
+
10
+ it "clears few characters" do
11
+ expect(cursor.clear_char(5)).to eq("\e[5X")
12
+ end
13
+
6
14
  it "clears line" do
7
- expect(cursor.clear_line).to eq("\e[1000D\e[K")
15
+ expect(cursor.clear_line).to eq("\e[2K\e[1G")
16
+ end
17
+
18
+ it "clears the line before the cursor" do
19
+ expect(cursor.clear_line_before).to eq("\e[0K")
20
+ end
21
+
22
+ it "clears the line after the cursor" do
23
+ expect(cursor.clear_line_after).to eq("\e[1K")
8
24
  end
9
25
 
10
26
  it "clears 5 lines up" do
11
27
  expect(cursor.clear_lines(5)).to eq([
12
- "\e[1000D\e[K\e[1A",
13
- "\e[1000D\e[K\e[1A",
14
- "\e[1000D\e[K\e[1A",
15
- "\e[1000D\e[K\e[1A",
16
- "\e[1000D\e[K"
28
+ "\e[2K\e[1G\e[1A",
29
+ "\e[2K\e[1G\e[1A",
30
+ "\e[2K\e[1G\e[1A",
31
+ "\e[2K\e[1G\e[1A",
32
+ "\e[2K\e[1G"
17
33
  ].join)
18
34
  end
19
35
 
20
36
  it "clears 5 lines down" do
21
37
  expect(cursor.clear_lines(5, :down)).to eq([
22
- "\e[1000D\e[K\e[1B",
23
- "\e[1000D\e[K\e[1B",
24
- "\e[1000D\e[K\e[1B",
25
- "\e[1000D\e[K\e[1B",
26
- "\e[1000D\e[K"
38
+ "\e[2K\e[1G\e[1B",
39
+ "\e[2K\e[1G\e[1B",
40
+ "\e[2K\e[1G\e[1B",
41
+ "\e[2K\e[1G\e[1B",
42
+ "\e[2K\e[1G"
27
43
  ].join)
28
44
  end
29
45
 
@@ -35,7 +51,6 @@ RSpec.describe TTY::Cursor, '#clear_lines' do
35
51
  expect(cursor.clear_screen_up).to eq("\e[1J")
36
52
  end
37
53
 
38
-
39
54
  it "clears entire screen" do
40
55
  expect(cursor.clear_screen).to eq("\e[2J")
41
56
  end
@@ -39,10 +39,6 @@ RSpec.describe TTY::Cursor do
39
39
  expect(cursor.down(5)).to eq("\e[5B")
40
40
  end
41
41
 
42
- it "moves to line start" do
43
- expect(cursor.move_start).to eq("\e[1000D")
44
- end
45
-
46
42
  it "moves cursorleft by 1 line default" do
47
43
  expect(cursor.backward).to eq("\e[1D")
48
44
  end
@@ -59,8 +55,24 @@ RSpec.describe TTY::Cursor do
59
55
  expect(cursor.forward(5)).to eq("\e[5C")
60
56
  end
61
57
 
58
+ it "moves cursor horizontal to start" do
59
+ expect(cursor.column).to eq("\e[1G")
60
+ end
61
+
62
+ it "moves cursor horizontally to 66th position" do
63
+ expect(cursor.column(66)).to eq("\e[66G")
64
+ end
65
+
66
+ it "moves cursor vertically to start" do
67
+ expect(cursor.row).to eq("\e[1d")
68
+ end
69
+
70
+ it "moves cursor vertically to 50th row" do
71
+ expect(cursor.row(50)).to eq("\e[50d")
72
+ end
73
+
62
74
  it "moves cursor to next line" do
63
- expect(cursor.next_line).to eq("\e[E")
75
+ expect(cursor.next_line).to eq("\e[E\e[1G")
64
76
  end
65
77
 
66
78
  it "moves cursor to previous line" do
data/tty-cursor.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = TTY::Cursor::VERSION
9
9
  spec.authors = ["Piotr Murach"]
10
10
  spec.email = [""]
11
- spec.summary = %q{Terminal cursor movement and manipulation of cursor properties such as visibility.}
12
- spec.description = %q{The purpose of this library is to help move terminal cursor around using intuitive commands and help in clearing terminal screen.}
11
+ spec.summary = %q{Terminal cursor positioning, visibility and text manipulation.}
12
+ spec.description = %q{The purpose of this library is to help move the terminal cursor around and manipulate text by using intuitive method calls.}
13
13
  spec.homepage = 'http://piotrmurach.github.io/tty/'
14
14
  spec.license = "MIT"
15
15
 
metadata CHANGED
@@ -1,46 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tty-cursor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Murach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-21 00:00:00.000000000 Z
11
+ date: 2017-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
- description: The purpose of this library is to help move terminal cursor around using
28
- intuitive commands and help in clearing terminal screen.
27
+ description: The purpose of this library is to help move the terminal cursor around
28
+ and manipulate text by using intuitive method calls.
29
29
  email:
30
30
  - ''
31
31
  executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
- - .gitignore
36
- - .rspec
37
- - .ruby-version
38
- - .travis.yml
35
+ - ".gitignore"
36
+ - ".rspec"
37
+ - ".travis.yml"
39
38
  - CHANGELOG.md
39
+ - CODE_OF_CONDUCT.md
40
40
  - Gemfile
41
41
  - LICENSE.txt
42
42
  - README.md
43
43
  - Rakefile
44
+ - appveyor.yml
44
45
  - lib/tty-cursor.rb
45
46
  - lib/tty/cursor.rb
46
47
  - lib/tty/version.rb
@@ -63,20 +64,20 @@ require_paths:
63
64
  - lib
64
65
  required_ruby_version: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - '>='
67
+ - - ">="
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  required_rubygems_version: !ruby/object:Gem::Requirement
70
71
  requirements:
71
- - - '>='
72
+ - - ">="
72
73
  - !ruby/object:Gem::Version
73
74
  version: '0'
74
75
  requirements: []
75
76
  rubyforge_project:
76
- rubygems_version: 2.0.3
77
+ rubygems_version: 2.5.1
77
78
  signing_key:
78
79
  specification_version: 4
79
- summary: Terminal cursor movement and manipulation of cursor properties such as visibility.
80
+ summary: Terminal cursor positioning, visibility and text manipulation.
80
81
  test_files:
81
82
  - spec/spec_helper.rb
82
83
  - spec/unit/clear_lines_spec.rb
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.0.0