readline-ng 0.0.3 → 0.0.4

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.
@@ -2,7 +2,7 @@ module ReadlineNG
2
2
 
3
3
  VERSION_MAJOR = 0
4
4
  VERSION_MINOR = 0
5
- VERSION_PATCH = 3
5
+ VERSION_PATCH = 4
6
6
  VERSION = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_PATCH}"
7
7
 
8
8
  CONTROL_BS = "\x08"
@@ -12,6 +12,8 @@ module ReadlineNG
12
12
 
13
13
  KB_BS = "\x7F"
14
14
  KB_CR = "\x0d"
15
+ KB_LEFT = "LEFT" # XXX PLACEHOLDERS
16
+ KB_RIGHT = "RIGHT"
15
17
 
16
18
  BLANK = " "
17
19
 
@@ -24,15 +26,17 @@ module ReadlineNG
24
26
  # make a whole lot of sense, although potentially giving out rope is not a
25
27
  # terrible idea here
26
28
 
27
- attr_accessor :lines, :visible
29
+ attr_accessor :lines, :visible, :polling_resolution
28
30
 
29
31
  def filter
30
32
  end
31
33
 
32
- def initialize(visible=true)
34
+ def initialize(visible=true, opts = {})
33
35
  @buf = ""
36
+ @ind = 0
34
37
  @visible = visible
35
38
  @lines = []
39
+ @polling_resolution = opts[:polling_resolution] || 20
36
40
  if @@initialized
37
41
  STDERR.puts "A ReadlineNG reader is already instanciated, expect weirdness"
38
42
  else
@@ -46,10 +50,17 @@ module ReadlineNG
46
50
  end
47
51
  end
48
52
 
53
+ def sleep(n)
54
+ (n * polling_resolution).times do
55
+ tick
56
+ sleep 1.0/polling_resolution
57
+ end
58
+ end
59
+
49
60
  def puts_above(string)
50
61
  if visible
51
62
  backspace(@buf.length)
52
- _print string
63
+ _print string.gsub("\n", "\n\r")
53
64
  _puts CONTROL_CR
54
65
  _print @buf
55
66
  end
@@ -92,9 +103,25 @@ module ReadlineNG
92
103
  when KB_BS
93
104
  @buf.chop!
94
105
  backspace
106
+ when KB_LEFT
107
+ unless @ind == 0
108
+ _print CONTROL_BS
109
+ @ind -= 1
110
+ end
111
+ when KB_RIGHT
112
+ unless @ind == @buf.length
113
+ _print @buf[@ind]
114
+ @ind += 1
115
+ end
95
116
  else
96
- @buf += c
97
- _print c
117
+ @buf.insert(@ind, c)
118
+ @ind += 1
119
+ if @ind == @buf.length
120
+ _print c
121
+ else
122
+ # TODO Only backspace to the new character
123
+ redraw
124
+ end
98
125
  end
99
126
  end
100
127
 
@@ -102,6 +129,11 @@ module ReadlineNG
102
129
  print CONTROL_BS*n,BLANK*n,CONTROL_BS*n
103
130
  end
104
131
 
132
+ def redraw
133
+ backspace(@buf.length)
134
+ _print(@buf)
135
+ end
136
+
105
137
  def _print(c)
106
138
  print c if visible
107
139
  end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ require './lib/readline-ng'
3
+
4
+ puts "Should output"
5
+ puts "line1\nline2"
6
+ puts ""
7
+
8
+ reader = ReadlineNG::Reader.new
9
+
10
+ reader.puts_above("line1\nline2")
11
+
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readline-ng
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-12 00:00:00.000000000 Z
12
+ date: 2012-02-19 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Essentially, readline++
15
15
  email:
@@ -22,6 +22,8 @@ files:
22
22
  - README
23
23
  - lib/readline-ng.rb
24
24
  - readline-ng.gemspec
25
+ - test/newline.rb
26
+ - test/test_helper.rb
25
27
  homepage: http://github.com/richoH/readline-ng
26
28
  licenses: []
27
29
  post_install_message: