ruco 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.19
1
+ 0.0.20
@@ -12,15 +12,6 @@ class String
12
12
  found
13
13
  end
14
14
 
15
- def nth_index(text, n)
16
- offset = -1
17
- (n+1).times do
18
- offset += 1
19
- offset = index(text, offset) or return
20
- end
21
- offset
22
- end
23
-
24
15
  # stub for 1.8
25
16
  unless method_defined?(:force_encoding)
26
17
  def force_encoding(encoding)
data/lib/ruco/editor.rb CHANGED
@@ -13,7 +13,7 @@ module Ruco
13
13
 
14
14
  def find(text)
15
15
  index = text_area.content.index(text, text_area.cursor_index+1) || text_area.cursor_index
16
- move :to, *text_area.cursor_for_index(index)
16
+ move :to, *text_area.position_for_index(index)
17
17
  end
18
18
 
19
19
  def reset;end
@@ -1,9 +1,9 @@
1
1
  module Ruco
2
2
  class TextArea
3
- attr_reader :content
3
+ attr_reader :lines
4
4
 
5
5
  def initialize(content, options)
6
- @content = tabs_to_spaces(content)
6
+ @lines = tabs_to_spaces(content).naive_split("\n")
7
7
  @options = options
8
8
  @line = 0
9
9
  @column = 0
@@ -16,7 +16,6 @@ module Ruco
16
16
  end
17
17
 
18
18
  def view
19
- lines = self.lines
20
19
  Array.new(@options[:lines]).map_with_index do |_,i|
21
20
  (lines[i + @scrolled_lines] || "").slice(@scrolled_columns, @options[:columns])
22
21
  end * "\n" + "\n"
@@ -54,29 +53,27 @@ module Ruco
54
53
  next_whitespace = lines[@line+1].to_s.match(/^\s*/)[0]
55
54
  text = text + [current_whitespace, next_whitespace].max
56
55
  end
57
- insert_into_content cursor_index, text
58
- move_according_to_insert(text)
56
+ insert_into_content text
57
+ move_according_to_insert text
59
58
  end
60
59
 
61
60
  def delete(count)
62
61
  if count > 0
63
- @content.slice!(cursor_index, count)
62
+ if current_line[@column..-1].size >= count
63
+ current_line.slice!(@column, count)
64
+ else
65
+ with_lines_as_string do |content|
66
+ content.slice!(cursor_index, count)
67
+ end
68
+ end
64
69
  else
65
70
  backspace(count.abs)
66
71
  end
67
72
  end
68
73
 
69
- # TODO this should go into editor
70
74
  def delete_line
71
- old_position = position
72
- move :to_column, 0
73
- delete current_line.size
74
- if position == [0,0]
75
- delete(1)
76
- else
77
- delete(-1)
78
- end
79
- move :to, *old_position
75
+ lines.slice!(@line, 1)
76
+ adjust_view
80
77
  end
81
78
 
82
79
  def cursor
@@ -89,13 +86,23 @@ module Ruco
89
86
  index
90
87
  end
91
88
 
92
- def cursor_for_index(index)
93
- jump = @content.slice(0, index).to_s.naive_split("\n")
89
+ def position_for_index(index)
90
+ jump = content.slice(0, index).to_s.naive_split("\n")
94
91
  [jump.size - 1, jump.last.size]
95
92
  end
96
93
 
94
+ def content
95
+ (lines * "\n").freeze
96
+ end
97
+
97
98
  protected
98
99
 
100
+ def with_lines_as_string
101
+ string = @lines * "\n"
102
+ yield string
103
+ @lines = string.naive_split("\n")
104
+ end
105
+
99
106
  def after_last_word
100
107
  current_line.index(/\s*$/)
101
108
  end
@@ -125,18 +132,23 @@ module Ruco
125
132
  end
126
133
 
127
134
  def backspace(count)
128
- start_index = cursor_index - count
129
- if start_index < 0
130
- count += start_index
131
- start_index = 0
132
- end
135
+ if @column >= count
136
+ new_colum = @column - count
137
+ current_line.slice!(new_colum, count)
138
+ move :to_column, new_colum
139
+ else
140
+ start_index = cursor_index - count
141
+ if start_index < 0
142
+ count += start_index
143
+ start_index = 0
144
+ end
133
145
 
134
- @content.slice!(start_index, count)
135
- move :to, *cursor_for_index(start_index)
136
- end
146
+ with_lines_as_string do |content|
147
+ content.slice!(start_index, count)
148
+ end
137
149
 
138
- def lines
139
- @content.naive_split("\n")
150
+ move :to, *position_for_index(start_index)
151
+ end
140
152
  end
141
153
 
142
154
  def adjust_view
@@ -181,12 +193,19 @@ module Ruco
181
193
  @cursor_line = @line - @scrolled_lines
182
194
  end
183
195
 
184
- def insert_into_content(index, text)
185
- # expand with newlines when inserting after maximum position
186
- if index > @content.size
187
- @content << "\n" * (index - @content.size)
196
+ def insert_into_content(text)
197
+ if text.include?("\n")
198
+ with_lines_as_string do |content|
199
+ content.insert(cursor_index, text)
200
+ end
201
+ else
202
+ # faster but complicated for newlines
203
+ lines[@line].insert(@column, text)
188
204
  end
189
- @content.insert(index, text)
205
+ end
206
+
207
+ def position_inside_content?
208
+ @line < lines.size and @column < lines[@line].to_s.size
190
209
  end
191
210
 
192
211
  def current_line
data/ruco.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruco}
8
- s.version = "0.0.19"
8
+ s.version = "0.0.20"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2011-01-16}
12
+ s.date = %q{2011-01-19}
13
13
  s.default_executable = %q{ruco}
14
14
  s.email = %q{michael@grosser.it}
15
15
  s.executables = ["ruco"]
@@ -47,7 +47,7 @@ Gem::Specification.new do |s|
47
47
  ]
48
48
  s.homepage = %q{http://github.com/grosser/ruco}
49
49
  s.require_paths = ["lib"]
50
- s.rubygems_version = %q{1.4.2}
50
+ s.rubygems_version = %q{1.3.7}
51
51
  s.summary = %q{Commandline editor written in ruby}
52
52
  s.test_files = [
53
53
  "spec/ruco/application_spec.rb",
@@ -62,6 +62,7 @@ Gem::Specification.new do |s|
62
62
  ]
63
63
 
64
64
  if s.respond_to? :specification_version then
65
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
65
66
  s.specification_version = 3
66
67
 
67
68
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -14,19 +14,4 @@ describe String do
14
14
  "".naive_split('a').should == ['']
15
15
  end
16
16
  end
17
-
18
- describe :nth_index do
19
- it "finds the first by default" do
20
- "a a a".nth_index('a',0).should == 0
21
- end
22
-
23
- it "finds the n-th index" do
24
- "a a a".nth_index('a',2).should == 4
25
- end
26
-
27
- it "is nil when not found" do
28
- "b b b".nth_index('a',0).should == nil
29
- "b b b".nth_index('a',1).should == nil
30
- end
31
- end
32
17
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruco
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 19
10
- version: 0.0.19
8
+ - 20
9
+ version: 0.0.20
11
10
  platform: ruby
12
11
  authors:
13
12
  - Michael Grosser
@@ -15,25 +14,24 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2011-01-16 00:00:00 +01:00
17
+ date: 2011-01-19 00:00:00 +01:00
19
18
  default_executable: ruco
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
21
+ name: clipboard
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- hash: 51
28
27
  segments:
29
28
  - 0
30
29
  - 9
31
30
  - 4
32
31
  version: 0.9.4
32
+ type: :runtime
33
33
  prerelease: false
34
34
  version_requirements: *id001
35
- type: :runtime
36
- name: clipboard
37
35
  description:
38
36
  email: michael@grosser.it
39
37
  executables:
@@ -87,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
85
  requirements:
88
86
  - - ">="
89
87
  - !ruby/object:Gem::Version
90
- hash: 3
88
+ hash: 588820097
91
89
  segments:
92
90
  - 0
93
91
  version: "0"
@@ -96,14 +94,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
94
  requirements:
97
95
  - - ">="
98
96
  - !ruby/object:Gem::Version
99
- hash: 3
100
97
  segments:
101
98
  - 0
102
99
  version: "0"
103
100
  requirements: []
104
101
 
105
102
  rubyforge_project:
106
- rubygems_version: 1.4.2
103
+ rubygems_version: 1.3.7
107
104
  signing_key:
108
105
  specification_version: 3
109
106
  summary: Commandline editor written in ruby