ruco 0.1.2 → 0.1.3

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -52,24 +52,17 @@ module Ruco
52
52
  when :home then move_with_select_mode :to_bol
53
53
  when :page_up then move_with_select_mode :page_up
54
54
  when :page_down then move_with_select_mode :page_down
55
+ when :"Ctrl+right" then move_with_select_mode :jump, :right
56
+ when :"Ctrl+left" then move_with_select_mode :jump, :left
55
57
 
56
58
  # select
57
- when :"Shift+down" then
58
- @focused.selecting do
59
- move(:relative, 1, 0)
60
- end
61
- when :"Shift+right"
62
- @focused.selecting do
63
- move(:relative, 0, 1)
64
- end
65
- when :"Shift+up"
66
- @focused.selecting do
67
- move(:relative, -1, 0)
68
- end
69
- when :"Shift+left" then
70
- @focused.selecting do
71
- move(:relative, 0, -1)
72
- end
59
+ when :"Shift+down" then @focused.selecting { move(:relative, 1, 0) }
60
+ when :"Shift+right" then @focused.selecting { move(:relative, 0, 1) }
61
+ when :"Shift+up" then @focused.selecting { move(:relative, -1, 0) }
62
+ when :"Shift+left" then @focused.selecting { move(:relative, 0, -1) }
63
+ when :"Ctrl+Shift+left" then @focused.selecting{ move(:jump, :left) }
64
+ when :"Ctrl+Shift+right" then @focused.selecting{ move(:jump, :right) }
65
+
73
66
 
74
67
  # modify
75
68
  when :tab then
@@ -29,37 +29,22 @@ module Ruco
29
29
  def move(where, *args)
30
30
  case where
31
31
  when :relative
32
- line_change, column_change = args
33
- new_column = column + column_change
34
-
35
- # user moves right on end of line -> next line
36
- if line_change == 0 and line != lines.size - 1 and new_column > current_line.size
37
- self.column = 0
38
- self.line += 1
39
-
40
- # user moves left on start of line -> prev line
41
- elsif line_change == 0 and line != 0 and new_column <= 0
42
- self.line -= 1
43
- self.column = current_line.size
44
-
45
- # normal movement
46
- else
47
- self.line += line_change
48
- self.column += column_change
49
- end
50
- when :to then
32
+ move_relative(*args)
33
+ when :to
51
34
  self.line, self.column = args
52
35
  when :to_bol then move_to_bol(*args)
53
36
  when :to_eol then move_to_eol(*args)
54
37
  when :to_line then self.line = args.first
55
38
  when :to_column then self.column = args.first
56
39
  when :to_index then move(:to, *position_for_index(*args))
57
- when :page_down then
40
+ when :page_down
58
41
  self.line += @window.lines
59
42
  @window.set_top(@window.top + @window.lines, @lines.size)
60
- when :page_up then
43
+ when :page_up
61
44
  self.line -= @window.lines
62
45
  @window.set_top(@window.top - @window.lines, @lines.size)
46
+ when :jump
47
+ move_jump(args.first)
63
48
  else
64
49
  raise "Unknown move type #{where} with #{args.inspect}"
65
50
  end
@@ -125,9 +110,7 @@ module Ruco
125
110
  end
126
111
 
127
112
  def index_for_position(position=self.position)
128
- index = lines[0...position.line].join("\n").size + position.column
129
- index += 1 if position.line > 0 # account for missing newline
130
- index
113
+ lines[0...position.line].sum{|l| l.size + 1} + position.column
131
114
  end
132
115
 
133
116
  def content
@@ -180,6 +163,30 @@ module Ruco
180
163
  move :to_column, column
181
164
  end
182
165
 
166
+ def move_relative(line_change, column_change)
167
+ if line_change == 0
168
+ # let user wrap around start/end of line
169
+ move :to_index, index_for_position + column_change
170
+ else
171
+ # normal movement
172
+ self.line += line_change
173
+ self.column += column_change
174
+ end
175
+ end
176
+
177
+ def move_jump(direction)
178
+ regex = /\b/m
179
+ text = content
180
+
181
+ next_index = if direction == :right
182
+ text.index(regex, index_for_position + 1) || text.size
183
+ else
184
+ text.rindex(regex,[index_for_position - 1, 0].max) || 0
185
+ end
186
+
187
+ move :to_index, next_index
188
+ end
189
+
183
190
  def backspace(count)
184
191
  if @column >= count
185
192
  new_colum = @column - count
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.1.2"
8
+ s.version = "0.1.3"
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-05-25}
12
+ s.date = %q{2011-05-30}
13
13
  s.default_executable = %q{ruco}
14
14
  s.email = %q{michael@grosser.it}
15
15
  s.executables = ["ruco"]
@@ -349,6 +349,62 @@ describe Ruco::Editor do
349
349
  editor.cursor.should == [1,2]
350
350
  end
351
351
  end
352
+
353
+ describe 'jumping' do
354
+ it "can jump right" do
355
+ write("abc def")
356
+ editor.move(:jump, :right)
357
+ editor.cursor.should == [0,3]
358
+ end
359
+
360
+ it "does not jump over braces" do
361
+ write("abc(def")
362
+ editor.move(:jump, :right)
363
+ editor.cursor.should == [0,3]
364
+ end
365
+
366
+ it "can jump over whitespace and newlines" do
367
+ write("abc\n 123")
368
+ editor.move(:jump, :right)
369
+ editor.cursor.should == [0,3]
370
+ editor.move(:jump, :right)
371
+ editor.cursor.should == [1,1]
372
+ end
373
+
374
+ it "can jump left" do
375
+ write("abc def")
376
+ editor.move(:relative, 0,3)
377
+ editor.move(:jump, :left)
378
+ editor.cursor.should == [0,0]
379
+ end
380
+
381
+ it "can jump to start" do
382
+ write("abc\ndef")
383
+ editor.move(:relative, 0,2)
384
+ editor.move(:jump, :left)
385
+ editor.cursor.should == [0,0]
386
+ end
387
+
388
+ it "stays at start" do
389
+ write("abc\ndef")
390
+ editor.move(:jump, :left)
391
+ editor.cursor.should == [0,0]
392
+ end
393
+
394
+ it "can jump to end" do
395
+ write("abc\ndef")
396
+ editor.move(:relative, 1,1)
397
+ editor.move(:jump, :right)
398
+ editor.cursor.should == [1,3]
399
+ end
400
+
401
+ it "stays at end" do
402
+ write("abc\ndef")
403
+ editor.move(:to, 1,3)
404
+ editor.move(:jump, :right)
405
+ editor.cursor.should == [1,3]
406
+ end
407
+ end
352
408
  end
353
409
 
354
410
  describe :move_line do
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruco
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
5
+ version: 0.1.3
11
6
  platform: ruby
12
7
  authors:
13
8
  - Michael Grosser
@@ -15,25 +10,20 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-05-25 00:00:00 +02:00
13
+ date: 2011-05-30 00:00:00 +02:00
19
14
  default_executable: ruco
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ name: clipboard
18
+ requirement: &id001 !ruby/object:Gem::Requirement
23
19
  none: false
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- hash: 43
28
- segments:
29
- - 0
30
- - 9
31
- - 8
32
23
  version: 0.9.8
33
- requirement: *id001
34
- prerelease: false
35
24
  type: :runtime
36
- name: clipboard
25
+ prerelease: false
26
+ version_requirements: *id001
37
27
  description:
38
28
  email: michael@grosser.it
39
29
  executables:
@@ -95,11 +85,7 @@ has_rdoc: true
95
85
  homepage: http://github.com/grosser/ruco
96
86
  licenses: []
97
87
 
98
- post_install_message: |+
99
-
100
- Mac: shift/ctrl + arrow-keys only work in iterm (not Terminal.app)
101
- Ubuntu: sudo apt-get install xclip # to use the clipboard
102
-
88
+ post_install_message: "\n Mac: shift/ctrl + arrow-keys only work in iterm (not Terminal.app)\n Ubuntu: sudo apt-get install xclip # to use the clipboard\n\n"
103
89
  rdoc_options: []
104
90
 
105
91
  require_paths:
@@ -109,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
95
  requirements:
110
96
  - - ">="
111
97
  - !ruby/object:Gem::Version
112
- hash: 3
98
+ hash: 472274319
113
99
  segments:
114
100
  - 0
115
101
  version: "0"
@@ -118,9 +104,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
104
  requirements:
119
105
  - - ">="
120
106
  - !ruby/object:Gem::Version
121
- hash: 3
122
- segments:
123
- - 0
124
107
  version: "0"
125
108
  requirements: []
126
109