ruco 0.2.0.beta12 → 0.2.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.
- data/.travis.yml +7 -0
- data/Readme.md +32 -9
- data/VERSION +1 -1
- data/lib/ruco/editor/colors.rb +4 -4
- data/lib/ruco/screen.rb +3 -3
- data/lib/ruco/syntax_parser.rb +2 -1
- data/ruco.gemspec +27 -3
- data/spec/ruco/editor_spec.rb +4 -9
- data/spec/ruco/screen_spec.rb +7 -16
- metadata +37 -20
data/.travis.yml
ADDED
data/Readme.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Simple, extendable, test-driven commandline editor written in ruby, for Linux/Mac/Windows.
|
2
2
|
|
3
|
-
Features
|
3
|
+
### Features
|
4
4
|
|
5
|
-
- **
|
5
|
+
- **Desktop-like / intuitive interface**
|
6
6
|
- TextMate Syntax and Theme support
|
7
7
|
- selecting via Shift + arrow-keys (only Linux or iTerm) or 'select mode' Ctrl+b + arrow-keys
|
8
8
|
- move line up/down (Alt+Ctrl+up/down)
|
@@ -10,12 +10,12 @@ Features:
|
|
10
10
|
- keeps indentation (+ paste-detection e.g. via Cmd+v)
|
11
11
|
- change (*) + writable (!) indicators
|
12
12
|
- find / go to line / delete line / search & replace
|
13
|
-
- configuration via `~/.ruco.rb`
|
14
|
-
-
|
15
|
-
- undo / redo
|
13
|
+
- configuration via `~/.ruco.rb` in Ruby
|
14
|
+
- Full clipboard support -> Ctrl+x/c/v
|
15
|
+
- undo / redo -> Ctrl+z/y
|
16
16
|
- stays at last position when reopening a file
|
17
|
-
- opens file at line
|
18
|
-
-
|
17
|
+
- opens file at line e.g. `ruco foo/bar.rb:32`
|
18
|
+
- supports all newline formats
|
19
19
|
- surrounds selection with quotes/braces (select abc + " --> "abc")
|
20
20
|
- shortens long file names in the middle
|
21
21
|
- (optional) remove trailing whitespace on save
|
@@ -25,14 +25,17 @@ Features:
|
|
25
25
|
<br/>
|
26
26
|
[Colors in Ruby 1.8](#colors)
|
27
27
|
|
28
|
+
|
28
29
|
Install
|
29
30
|
=======
|
30
31
|
sudo gem install ruco
|
31
32
|
|
33
|
+
|
32
34
|
Usage
|
33
35
|
=====
|
34
36
|
ruco file.rb
|
35
37
|
|
38
|
+
|
36
39
|
Customize
|
37
40
|
=========
|
38
41
|
|
@@ -80,12 +83,13 @@ Customize
|
|
80
83
|
bind :"Ctrl+u", :first_line
|
81
84
|
end
|
82
85
|
|
86
|
+
|
83
87
|
TIPS
|
84
88
|
====
|
85
89
|
- [Mac] arow-keys + Shift/Alt does not work in default terminal (use iTerm)
|
86
|
-
- [Tabs] Ruco does not like tabs. Existing tabs are displayed as
|
90
|
+
- [Tabs] Ruco does not like tabs. Existing tabs are displayed as single space and pressing tab inserts 2*space
|
87
91
|
- [RVM] `alias r="rvm 1.9.2 exec ruco"` and you only have to install ruco once
|
88
|
-
- [Ruby1.9] Unicode support -> install libncursesw5-dev before installing ruby
|
92
|
+
- [Ruby1.9] Unicode support -> install libncursesw5-dev before installing ruby
|
89
93
|
- [ssh vs clipboard] access your desktops clipboard by installing `xauth` on the server and then using `ssh -X`
|
90
94
|
- [Alt key] if Alt does not work try your Meta/Win/Cmd key
|
91
95
|
|
@@ -102,6 +106,24 @@ TIPS
|
|
102
106
|
gem install oniguruma
|
103
107
|
|
104
108
|
|
109
|
+
Architecture
|
110
|
+
============
|
111
|
+
Ruco is basically a lot of String manipulation separated in HTML style elements.
|
112
|
+
The only component dealing with the commandline interface are Screen and Keyboard. Therefore
|
113
|
+
everything is very simple to build and test since it returns a string or a e.g. cursor position.
|
114
|
+
|
115
|
+
Writing/reading is done in a TextArea or a TextField (a TextArea with 1 line)
|
116
|
+
which are placed in Form`s.
|
117
|
+
|
118
|
+
The Application consists of a StatusBar, Editor, CommandBar and delegates actions to the currently active element.
|
119
|
+
|
120
|
+
To build the commandline output Editor/CommandBar return:
|
121
|
+
|
122
|
+
- view -- text that should be displayed on the screen (complete content cropped via Window)
|
123
|
+
- style_map -- a big Array with style infos, e.g. 'on line 1 chars 5 to 7 are red'
|
124
|
+
- cursor -- where to draw the cursor
|
125
|
+
|
126
|
+
|
105
127
|
TODO
|
106
128
|
=====
|
107
129
|
- only do syntax parsing for changed lines + selected lines <-> will not be redrawn anyhow
|
@@ -125,6 +147,7 @@ TODO
|
|
125
147
|
- 1.8: unicode support <-> already finished but unusable due to Curses (see encoding branch)
|
126
148
|
- add double quotes/braces when typing one + skip over quote/brace when its already typed at current position
|
127
149
|
|
150
|
+
|
128
151
|
Authors
|
129
152
|
=======
|
130
153
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.0
|
1
|
+
0.2.0
|
data/lib/ruco/editor/colors.rb
CHANGED
@@ -7,9 +7,12 @@ module Ruco
|
|
7
7
|
STYLING_TIMEOUT = 4
|
8
8
|
|
9
9
|
def style_map
|
10
|
-
|
10
|
+
$ruco_foreground = theme.foreground
|
11
|
+
$ruco_background = theme.background
|
11
12
|
map = super
|
12
13
|
|
14
|
+
return map if @colors_took_too_long or not @options[:language]
|
15
|
+
|
13
16
|
# disable colors if syntax-parsing takes too long
|
14
17
|
begin
|
15
18
|
syntax = Timeout.timeout(STYLING_TIMEOUT) do
|
@@ -22,9 +25,6 @@ module Ruco
|
|
22
25
|
return map
|
23
26
|
end
|
24
27
|
|
25
|
-
$ruco_foreground = theme.foreground
|
26
|
-
$ruco_background = theme.background
|
27
|
-
|
28
28
|
if syntax
|
29
29
|
add_syntax_highlighting_to_style_map(map, syntax)
|
30
30
|
|
data/lib/ruco/screen.rb
CHANGED
@@ -74,7 +74,7 @@ module Ruco
|
|
74
74
|
# position at start of line and draw
|
75
75
|
Curses.setpos(line_number,0)
|
76
76
|
Ruco::StyleMap.styled(line, styles).each do |style, part|
|
77
|
-
Curses.attrset self.class.curses_style(style)
|
77
|
+
Curses.attrset self.class.curses_style(style, $ruco_colors)
|
78
78
|
Curses.addstr part
|
79
79
|
end
|
80
80
|
|
@@ -91,8 +91,8 @@ module Ruco
|
|
91
91
|
yield # render the line
|
92
92
|
end
|
93
93
|
|
94
|
-
def self.curses_style(style)
|
95
|
-
if
|
94
|
+
def self.curses_style(style, colors)
|
95
|
+
if colors
|
96
96
|
foreground = $ruco_foreground || '#ffffff'
|
97
97
|
background = $ruco_background || '#000000'
|
98
98
|
|
data/lib/ruco/syntax_parser.rb
CHANGED
data/ruco.gemspec
CHANGED
@@ -5,15 +5,16 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruco}
|
8
|
-
s.version = "0.2.0
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
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-10-
|
12
|
+
s.date = %q{2011-10-06}
|
13
13
|
s.default_executable = %q{ruco}
|
14
14
|
s.email = %q{michael@grosser.it}
|
15
15
|
s.executables = ["ruco"]
|
16
16
|
s.files = [
|
17
|
+
".travis.yml",
|
17
18
|
"Gemfile",
|
18
19
|
"Gemfile.lock",
|
19
20
|
"Rakefile",
|
@@ -86,6 +87,29 @@ Gem::Specification.new do |s|
|
|
86
87
|
s.require_paths = ["lib"]
|
87
88
|
s.rubygems_version = %q{1.6.2}
|
88
89
|
s.summary = %q{Commandline editor written in ruby}
|
90
|
+
s.test_files = [
|
91
|
+
"spec/ruco/application_spec.rb",
|
92
|
+
"spec/ruco/array_processor_spec.rb",
|
93
|
+
"spec/ruco/command_bar_spec.rb",
|
94
|
+
"spec/ruco/core_ext/array_spec.rb",
|
95
|
+
"spec/ruco/core_ext/range_spec.rb",
|
96
|
+
"spec/ruco/core_ext/string_spec.rb",
|
97
|
+
"spec/ruco/editor_spec.rb",
|
98
|
+
"spec/ruco/file_store_spec.rb",
|
99
|
+
"spec/ruco/form_spec.rb",
|
100
|
+
"spec/ruco/history_spec.rb",
|
101
|
+
"spec/ruco/keyboard_spec.rb",
|
102
|
+
"spec/ruco/option_accessor_spec.rb",
|
103
|
+
"spec/ruco/screen_spec.rb",
|
104
|
+
"spec/ruco/status_bar_spec.rb",
|
105
|
+
"spec/ruco/style_map_spec.rb",
|
106
|
+
"spec/ruco/syntax_parser_spec.rb",
|
107
|
+
"spec/ruco/text_area_spec.rb",
|
108
|
+
"spec/ruco/tm_theme_spec.rb",
|
109
|
+
"spec/ruco/window_spec.rb",
|
110
|
+
"spec/ruco_spec.rb",
|
111
|
+
"spec/spec_helper.rb"
|
112
|
+
]
|
89
113
|
|
90
114
|
if s.respond_to? :specification_version then
|
91
115
|
s.specification_version = 3
|
data/spec/ruco/editor_spec.rb
CHANGED
@@ -722,15 +722,10 @@ describe Ruco::Editor do
|
|
722
722
|
end
|
723
723
|
|
724
724
|
it "times out when styling takes too long" do
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
write(File.read('lib/ruco.rb'))
|
730
|
-
editor.style_map.flatten.should == [nil,nil,nil]
|
731
|
-
ensure
|
732
|
-
silence_warnings{ Ruco::Editor::Colors::STYLING_TIMEOUT = old }
|
733
|
-
end
|
725
|
+
STDERR.should_receive(:puts)
|
726
|
+
Timeout.should_receive(:timeout).and_raise Timeout::Error
|
727
|
+
write(File.read('lib/ruco.rb'))
|
728
|
+
editor.style_map.flatten.should == [nil,nil,nil]
|
734
729
|
end
|
735
730
|
|
736
731
|
describe 'with theme' do
|
data/spec/ruco/screen_spec.rb
CHANGED
@@ -3,44 +3,35 @@ require File.expand_path('spec/spec_helper')
|
|
3
3
|
describe Ruco::Screen do
|
4
4
|
describe :curses_style do
|
5
5
|
it "is 'normal' for nothing" do
|
6
|
-
Ruco::Screen.curses_style(:normal).should == 256
|
6
|
+
Ruco::Screen.curses_style(:normal, true).should == 256
|
7
7
|
end
|
8
8
|
|
9
9
|
it "is red for red" do
|
10
10
|
pending
|
11
|
-
Ruco::Screen.curses_style(:red).should == Curses::color_pair( Curses::COLOR_RED )
|
11
|
+
Ruco::Screen.curses_style(:red, true).should == Curses::color_pair( Curses::COLOR_RED )
|
12
12
|
end
|
13
13
|
|
14
14
|
it "is reverse for reverse" do
|
15
|
-
Ruco::Screen.curses_style(:reverse).should == 512
|
15
|
+
Ruco::Screen.curses_style(:reverse, true).should == 512
|
16
16
|
end
|
17
17
|
|
18
18
|
it "raises on unknown style" do
|
19
19
|
lambda{
|
20
|
-
Ruco::Screen.curses_style(:foo)
|
20
|
+
Ruco::Screen.curses_style(:foo, true)
|
21
21
|
}.should raise_error
|
22
22
|
end
|
23
23
|
|
24
24
|
describe 'without colors' do
|
25
|
-
before do
|
26
|
-
Ruco::Screen.class_eval '@@styles = {}' # clear cache
|
27
|
-
$ruco_colors = false
|
28
|
-
end
|
29
|
-
|
30
|
-
after do
|
31
|
-
$ruco_colors = true
|
32
|
-
end
|
33
|
-
|
34
25
|
it "is 'normal' for normal" do
|
35
|
-
Ruco::Screen.curses_style(:normal).should == Curses::A_NORMAL
|
26
|
+
Ruco::Screen.curses_style(:normal, false).should == Curses::A_NORMAL
|
36
27
|
end
|
37
28
|
|
38
29
|
it "is reverse for reverse" do
|
39
|
-
Ruco::Screen.curses_style(:reverse).should == Curses::A_REVERSE
|
30
|
+
Ruco::Screen.curses_style(:reverse, false).should == Curses::A_REVERSE
|
40
31
|
end
|
41
32
|
|
42
33
|
it "is normal for unknown style" do
|
43
|
-
Ruco::Screen.curses_style(:foo).should == Curses::A_NORMAL
|
34
|
+
Ruco::Screen.curses_style(:foo, false).should == Curses::A_NORMAL
|
44
35
|
end
|
45
36
|
end
|
46
37
|
end
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
9
|
- 0
|
10
|
-
|
11
|
-
- 12
|
12
|
-
version: 0.2.0.beta12
|
10
|
+
version: 0.2.0
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Michael Grosser
|
@@ -17,11 +15,11 @@ autorequire:
|
|
17
15
|
bindir: bin
|
18
16
|
cert_chain: []
|
19
17
|
|
20
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-06 00:00:00 +02:00
|
21
19
|
default_executable: ruco
|
22
20
|
dependencies:
|
23
21
|
- !ruby/object:Gem::Dependency
|
24
|
-
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
@@ -32,12 +30,12 @@ dependencies:
|
|
32
30
|
- 9
|
33
31
|
- 8
|
34
32
|
version: 0.9.8
|
35
|
-
requirement: *id001
|
36
33
|
type: :runtime
|
37
34
|
name: clipboard
|
35
|
+
version_requirements: *id001
|
38
36
|
prerelease: false
|
39
37
|
- !ruby/object:Gem::Dependency
|
40
|
-
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
@@ -46,12 +44,12 @@ dependencies:
|
|
46
44
|
segments:
|
47
45
|
- 1
|
48
46
|
version: "1"
|
49
|
-
requirement: *id002
|
50
47
|
type: :runtime
|
51
48
|
name: textpow1x
|
49
|
+
version_requirements: *id002
|
52
50
|
prerelease: false
|
53
51
|
- !ruby/object:Gem::Dependency
|
54
|
-
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
53
|
none: false
|
56
54
|
requirements:
|
57
55
|
- - ">="
|
@@ -60,9 +58,9 @@ dependencies:
|
|
60
58
|
segments:
|
61
59
|
- 0
|
62
60
|
version: "0"
|
63
|
-
requirement: *id003
|
64
61
|
type: :runtime
|
65
62
|
name: language_sniffer
|
63
|
+
version_requirements: *id003
|
66
64
|
prerelease: false
|
67
65
|
description:
|
68
66
|
email: michael@grosser.it
|
@@ -73,6 +71,7 @@ extensions: []
|
|
73
71
|
extra_rdoc_files: []
|
74
72
|
|
75
73
|
files:
|
74
|
+
- .travis.yml
|
76
75
|
- Gemfile
|
77
76
|
- Gemfile.lock
|
78
77
|
- Rakefile
|
@@ -160,14 +159,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
160
|
none: false
|
162
161
|
requirements:
|
163
|
-
- - "
|
162
|
+
- - ">="
|
164
163
|
- !ruby/object:Gem::Version
|
165
|
-
hash:
|
164
|
+
hash: 3
|
166
165
|
segments:
|
167
|
-
-
|
168
|
-
|
169
|
-
- 1
|
170
|
-
version: 1.3.1
|
166
|
+
- 0
|
167
|
+
version: "0"
|
171
168
|
requirements: []
|
172
169
|
|
173
170
|
rubyforge_project:
|
@@ -175,5 +172,25 @@ rubygems_version: 1.6.2
|
|
175
172
|
signing_key:
|
176
173
|
specification_version: 3
|
177
174
|
summary: Commandline editor written in ruby
|
178
|
-
test_files:
|
179
|
-
|
175
|
+
test_files:
|
176
|
+
- spec/ruco/application_spec.rb
|
177
|
+
- spec/ruco/array_processor_spec.rb
|
178
|
+
- spec/ruco/command_bar_spec.rb
|
179
|
+
- spec/ruco/core_ext/array_spec.rb
|
180
|
+
- spec/ruco/core_ext/range_spec.rb
|
181
|
+
- spec/ruco/core_ext/string_spec.rb
|
182
|
+
- spec/ruco/editor_spec.rb
|
183
|
+
- spec/ruco/file_store_spec.rb
|
184
|
+
- spec/ruco/form_spec.rb
|
185
|
+
- spec/ruco/history_spec.rb
|
186
|
+
- spec/ruco/keyboard_spec.rb
|
187
|
+
- spec/ruco/option_accessor_spec.rb
|
188
|
+
- spec/ruco/screen_spec.rb
|
189
|
+
- spec/ruco/status_bar_spec.rb
|
190
|
+
- spec/ruco/style_map_spec.rb
|
191
|
+
- spec/ruco/syntax_parser_spec.rb
|
192
|
+
- spec/ruco/text_area_spec.rb
|
193
|
+
- spec/ruco/tm_theme_spec.rb
|
194
|
+
- spec/ruco/window_spec.rb
|
195
|
+
- spec/ruco_spec.rb
|
196
|
+
- spec/spec_helper.rb
|