vimmate 0.8.1

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.
Files changed (85) hide show
  1. data/.autotest +10 -0
  2. data/CHANGELOG +108 -0
  3. data/COPYING +20 -0
  4. data/README +221 -0
  5. data/Rakefile +31 -0
  6. data/TODO +21 -0
  7. data/bin/vimmate +105 -0
  8. data/config/environment.rb +35 -0
  9. data/controllers/file_filter_controller.rb +101 -0
  10. data/controllers/file_popup_menu_controller.rb +40 -0
  11. data/controllers/vim_controller.rb +28 -0
  12. data/controllers/vim_mate_controller.rb +76 -0
  13. data/images/file.png +0 -0
  14. data/images/file_green.png +0 -0
  15. data/images/file_orange.png +0 -0
  16. data/images/file_red.png +0 -0
  17. data/images/folder.png +0 -0
  18. data/images/folder_green.png +0 -0
  19. data/images/folder_orange.png +0 -0
  20. data/images/folder_red.png +0 -0
  21. data/images/processing.png +0 -0
  22. data/images/svn_added.png +0 -0
  23. data/images/svn_conflict.png +0 -0
  24. data/images/svn_deleted.png +0 -0
  25. data/images/svn_locked.png +0 -0
  26. data/images/svn_modified.png +0 -0
  27. data/images/svn_normal.png +0 -0
  28. data/images/svn_readonly.png +0 -0
  29. data/images/vimmate16.png +0 -0
  30. data/images/vimmate32.png +0 -0
  31. data/images/vimmate48.png +0 -0
  32. data/lib/active_window/active_column.rb +218 -0
  33. data/lib/active_window/active_tree_store/columns.rb +88 -0
  34. data/lib/active_window/active_tree_store/extentions.rb +81 -0
  35. data/lib/active_window/active_tree_store/index.rb +53 -0
  36. data/lib/active_window/active_tree_store.rb +26 -0
  37. data/lib/active_window/application.rb +137 -0
  38. data/lib/active_window/controller.rb +58 -0
  39. data/lib/active_window/dot_file.rb +29 -0
  40. data/lib/active_window/filtered_active_tree_store.rb +113 -0
  41. data/lib/active_window/listed_item.rb +127 -0
  42. data/lib/active_window/signal.rb +46 -0
  43. data/lib/active_window.rb +8 -0
  44. data/lib/config_window.rb +90 -0
  45. data/lib/file_tree_store.rb +74 -0
  46. data/lib/filtered_file_tree_store.rb +34 -0
  47. data/lib/gtk_thread_helper.rb +73 -0
  48. data/lib/listed_directory.rb +45 -0
  49. data/lib/listed_file.rb +67 -0
  50. data/lib/try.rb +9 -0
  51. data/lib/vim/buffers.rb +18 -0
  52. data/lib/vim/integration.rb +38 -0
  53. data/lib/vim/netbeans.rb +154 -0
  54. data/lib/vim/source.vim +18 -0
  55. data/lib/vim_mate/config.rb +132 -0
  56. data/lib/vim_mate/dummy_window.rb +14 -0
  57. data/lib/vim_mate/files_menu.rb +110 -0
  58. data/lib/vim_mate/icons.rb +156 -0
  59. data/lib/vim_mate/nice_singleton.rb +53 -0
  60. data/lib/vim_mate/plugins/inotify/init.rb +4 -0
  61. data/lib/vim_mate/plugins/inotify/lib/INotify.rb +208 -0
  62. data/lib/vim_mate/plugins/inotify/lib/directory.rb +58 -0
  63. data/lib/vim_mate/plugins/subversion/init.rb +7 -0
  64. data/lib/vim_mate/plugins/subversion/lib/file.rb +59 -0
  65. data/lib/vim_mate/plugins/subversion/lib/menu.rb +96 -0
  66. data/lib/vim_mate/plugins/subversion/lib/subversion.rb +157 -0
  67. data/lib/vim_mate/plugins.rb +6 -0
  68. data/lib/vim_mate/requirer.rb +68 -0
  69. data/lib/vim_mate/search_window.rb +227 -0
  70. data/lib/vim_mate/tags_window.rb +167 -0
  71. data/lib/vim_mate/terminals_window.rb +163 -0
  72. data/lib/vim_mate/version.rb +29 -0
  73. data/lib/vim_mate/vim_widget.rb +143 -0
  74. data/spec/active_window/active_column_spec.rb +41 -0
  75. data/spec/active_window/active_tree_store_spec.rb +312 -0
  76. data/spec/active_window/controller_spec.rb +6 -0
  77. data/spec/lib/file_tree_store_spec.rb +40 -0
  78. data/spec/lib/listed_directory_spec.rb +26 -0
  79. data/spec/lib/listed_file_spec.rb +53 -0
  80. data/spec/nice_singleton_spec.rb +23 -0
  81. data/spec/spec.opts +6 -0
  82. data/spec/spec_helper.rb +10 -0
  83. data/views/vim_mate.glade +500 -0
  84. data/vimmate.gemspec +138 -0
  85. metadata +146 -0
@@ -0,0 +1,312 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe ActiveWindow::ActiveTreeStore do
4
+ before( :each ) do
5
+ @ats = ActiveWindow::ActiveTreeStore
6
+ end
7
+ it "should inherit from Gtk::TreeStore" do
8
+ @ats.should < Gtk::TreeStore
9
+ end
10
+ it "should store columns" do
11
+ @ats.column_id.should_not be_nil
12
+ @ats.column_id.should be_a(Hash)
13
+ end
14
+
15
+ it "should have basic columns" do
16
+ @ats.column_id.should have_key(:visible)
17
+ @ats.column_id.should have_key(:object)
18
+ end
19
+
20
+ it "should store column index in constants" do
21
+ @ats::VISIBLE.should == 0
22
+ @ats::OBJECT.should == 1
23
+ end
24
+
25
+ it "should provide classes for columns" do
26
+ @ats.column_classes.should == [TrueClass, Object]
27
+ end
28
+
29
+ describe "subclassing for Person with name and age" do
30
+ before( :each ) do
31
+ class PersonTree < @ats
32
+ column :name, String
33
+ column :age, Fixnum
34
+ end
35
+ end
36
+
37
+ after( :each ) do
38
+ Object::send :remove_const, :PersonTree
39
+ end
40
+
41
+ it "should still have basic columns" do
42
+ PersonTree.column_id.should have_key(:visible)
43
+ PersonTree.column_id.should have_key(:object)
44
+ end
45
+ it "should have both new columns defined" do
46
+ PersonTree.column_id.should have_key(:name)
47
+ PersonTree.column_id.should have_key(:age)
48
+ end
49
+ it "should have 4 columns" do
50
+ PersonTree.column_count.should == 4
51
+ end
52
+ it "should store column index in constants" do
53
+ PersonTree::VISIBLE.should == 0
54
+ PersonTree::OBJECT.should == 1
55
+ PersonTree::NAME.should == 2
56
+ PersonTree::AGE.should == 3
57
+ end
58
+ it "should provde classes for columns" do
59
+ PersonTree.column_classes.should == [TrueClass, Object, String, Integer]
60
+ end
61
+ it "should store column index in hash" do
62
+ PersonTree.column_id.should == {:visible => 0, :object => 1, :name => 2, :age => 3}
63
+ end
64
+
65
+ describe "with index on name" do
66
+ before( :each ) do
67
+ PersonTree.index_by :name
68
+ end
69
+
70
+ it "should define a method to remember People by name" do
71
+ PersonTree.public_instance_methods.should include('remember_iter_by_name')
72
+ end
73
+
74
+ it "should define a method to find People by name" do
75
+ PersonTree.public_instance_methods.should include('find_by_name')
76
+ end
77
+
78
+ describe "added Peter, Paul and Mary" do
79
+ before( :each ) do
80
+ @person_tree = PersonTree.new
81
+ @person_tree.add :name => 'Peter', :age => 23
82
+ @person_tree.add :name => 'Paul', :age => 42
83
+ @person_tree.add :name => 'Mary', :age => 19
84
+ end
85
+
86
+ it "should have indexed the items" do
87
+ @person_tree.index_by_name.should be_a(Hash)
88
+ @person_tree.index_by_name.should have_key('Peter')
89
+ @person_tree.index_by_name.should have_key('Paul')
90
+ @person_tree.index_by_name.should have_key('Mary')
91
+ end
92
+
93
+ it "should index by Strings (the names)" do
94
+ @person_tree.index_by_name.keys.each do |key|
95
+ key.should be_a(String)
96
+ end
97
+ end
98
+
99
+ it "should index TreeRowReferences" do
100
+ @person_tree.index_by_name.values.each do |value|
101
+ value.should be_a(Gtk::TreeRowReference)
102
+ end
103
+ end
104
+
105
+ it "should find the row for Peter by its name" do
106
+ peter = nil
107
+ lambda { peter = @person_tree.find_by_name('Peter') }.should_not raise_error
108
+ peter.should_not be_nil
109
+ peter.should be_a(Gtk::TreeIter)
110
+ peter[2].should == 'Peter'
111
+ end
112
+
113
+ end
114
+ end
115
+
116
+
117
+ describe "instancing" do
118
+ before( :each ) do
119
+ @person_tree = PersonTree.new
120
+ end
121
+
122
+ describe "adding a Person" do
123
+ before( :each ) do
124
+ @person = mock(:name => 'Kate', :age => 23)
125
+ end
126
+
127
+ it "should succeed" do
128
+ lambda { @person_tree.add @person }.should_not raise_error
129
+ end
130
+
131
+ end
132
+
133
+ end
134
+
135
+
136
+ end
137
+
138
+ describe "subclassing twice with different columns" do
139
+ before( :each ) do
140
+ class AppleTree < @ats
141
+ column :apple_count, Fixnum
142
+ end
143
+ class LemonTree < @ats
144
+ column :lemon_count, Fixnum
145
+ end
146
+ end
147
+
148
+ after( :each ) do
149
+ Object::send :remove_const, :AppleTree
150
+ Object::send :remove_const, :LemonTree
151
+ end
152
+
153
+
154
+ it "should both still have basic columns" do
155
+ AppleTree.column_id[:visible].should == 0
156
+ AppleTree.column_id[:object].should == 1
157
+ LemonTree.column_id[:visible].should == 0
158
+ LemonTree.column_id[:object].should == 1
159
+ end
160
+ it "should define columns for both subclasses" do
161
+ AppleTree.column_id[:apple_count].should == 2
162
+ LemonTree.column_id[:lemon_count].should == 2
163
+ end
164
+ it "should keep the new columns to their Classes" do
165
+ AppleTree.column_id.should_not have_key(:lemon_count)
166
+ LemonTree.column_id.should_not have_key(:apple_count)
167
+ end
168
+ it "should both have 3 columns" do
169
+ AppleTree.column_count.should == 3
170
+ LemonTree.column_count.should == 3
171
+ end
172
+ it "should store first column index in constants" do
173
+ AppleTree::VISIBLE.should == 0
174
+ AppleTree::OBJECT.should == 1
175
+ AppleTree::APPLE_COUNT.should == 2
176
+ end
177
+ it "should store second column index in constants" do
178
+ LemonTree::VISIBLE.should == 0
179
+ LemonTree::OBJECT.should == 1
180
+ LemonTree::LEMON_COUNT.should == 2
181
+ end
182
+ it "should provde classes for columns" do
183
+ AppleTree.column_classes.should == [TrueClass, Object, Integer]
184
+ LemonTree.column_classes.should == [TrueClass, Object, Integer]
185
+ end
186
+ end
187
+
188
+ describe "Adding a column to a subclass" do
189
+ before( :each ) do
190
+ @sc = Class.new(@ats)
191
+ end
192
+
193
+ it "should return it to use it somewhere else" do
194
+ col = @sc.column(:name, :string)
195
+ col.should_not be_nil
196
+ col.should be_a(ActiveWindow::ActiveColumn)
197
+ end
198
+ end
199
+
200
+ describe "subclassing with a composite column with 2 subcolumns" do
201
+ before( :each ) do
202
+ class ComplexTree < @ats
203
+ composite_column "Name and Age" do |pack|
204
+ pack.add column(:name, :string)
205
+ pack.add column(:age, :integer)
206
+ end
207
+ end
208
+ end
209
+
210
+ after( :each ) do
211
+ Object::send :remove_const, :ComplexTree
212
+ end
213
+
214
+ it "should create 3 columns" do
215
+ ComplexTree.should have_at_least(3).columns
216
+ end
217
+
218
+ it "should have 2 invisible columns" do
219
+ ComplexTree.should have_at_least(2).invisible_columns
220
+ end
221
+
222
+ it "should have 2 data columns" do
223
+ ComplexTree.should have_at_least(2).data_columns
224
+ end
225
+
226
+ it "should have constants for column ids" do
227
+ ComplexTree::NAME.should == 2
228
+ ComplexTree::AGE.should == 3
229
+ end
230
+
231
+ it "should have max 1 visible column (the composite one)" do
232
+ names = ComplexTree.visible_columns.map(&:name)
233
+ names.should == ['Name and Age']
234
+ ComplexTree.should have_at_most(1).visible_columns
235
+ names.should include('Name and Age')
236
+ end
237
+
238
+ it "should have 2 data columns (the subs)" do
239
+ ComplexTree.should have_at_least(2).data_columns
240
+ names = ComplexTree.data_columns.map(&:name)
241
+ names.should include('name')
242
+ names.should include('age')
243
+ end
244
+
245
+ describe "creating a class filtering it" do
246
+ before( :each ) do
247
+ class FilteredComplexTree < ActiveWindow::FilteredActiveTreeStore
248
+ def iter_visible?(iter)
249
+ !( iter[ self.class.column_id[:name] ].index(filter_string) ).nil?
250
+ end
251
+ end
252
+ end
253
+ after( :each ) do
254
+ Object::send :remove_const, :FilteredComplexTree
255
+ end
256
+
257
+ it "should take its columns from ComplexTree" do
258
+ FilteredComplexTree.columns.should == ComplexTree.columns
259
+ end
260
+
261
+ it "should take constants for the column ids from ComplexTrr" do
262
+ FilteredComplexTree::NAME.should == 2
263
+ FilteredComplexTree::AGE.should == 3
264
+ end
265
+
266
+ describe "instancing it with a model" do
267
+ before( :each ) do
268
+ @tree = ComplexTree.new
269
+ @filtered_tree = FilteredComplexTree.new @tree
270
+ end
271
+
272
+ describe "and filtering some data" do
273
+ before( :each ) do
274
+ @tree.add(:name => 'Niklas', :age => 27)
275
+ @tree.add(:name => 'Grandpa', :age => 99)
276
+ @filtering = lambda { @filtered_tree.filter = 'something' }
277
+ @vis_col = 0
278
+ end
279
+ it "should not break on filtering" do
280
+ @filtering.should_not raise_error
281
+ end
282
+
283
+ it "should check iter for visibility" do
284
+ @filtered_tree.should_receive(:iter_visible?).at_least(:twice)
285
+ @filtering.call
286
+ end
287
+
288
+ it "should hide rows that do not match" do
289
+ @filtered_tree.stub(:iter_visible?).and_return(false)
290
+ @filtering.call
291
+ @tree.each do |model, path, iter|
292
+ iter[@vis_col].should be_false
293
+ end
294
+ end
295
+
296
+ it "should show rows that do match" do
297
+ @filtered_tree.stub(:iter_visible?).and_return(true)
298
+ @filtering.call
299
+ @filtered_tree.found_count.should >= 2
300
+ @tree.each do |model, path, iter|
301
+ iter[@vis_col].should be_true
302
+ end
303
+ end
304
+ end
305
+
306
+ end
307
+
308
+ end
309
+
310
+ end
311
+ end
312
+
@@ -0,0 +1,6 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe ActiveWindow::Controller do
4
+
5
+ end
6
+
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe FileTreeStore do
4
+ it "should inherit from ActiveWindow::ActiveTreeStore" do
5
+ FileTreeStore.should < ActiveWindow::ActiveTreeStore
6
+ end
7
+
8
+ context "new" do
9
+ before( :each ) do
10
+ @tree = FileTreeStore.new
11
+ end
12
+
13
+ it "should have an empty exclude list" do
14
+ @tree.excludes.should be_empty
15
+ end
16
+
17
+ context "excluding tmp, doc and public dirs" do
18
+ before( :each ) do
19
+ @rules = %w(tmp doc public)
20
+ @rules.each do |rule|
21
+ lambda { @tree.exclude! rule }.should change(@tree.excludes, :count).by(1)
22
+ end
23
+ end
24
+
25
+ it "should have stored the rules in excludes" do
26
+ @tree.excludes.should_not be_empty
27
+ end
28
+
29
+ it "should ignore paths that end with /$rule" do
30
+ @tree.should be_excludes("foo/tmp")
31
+ @tree.should be_excludes("foo/bar/tmp")
32
+ end
33
+
34
+ it "should not ignore that contain $rule somewhere else the end" do
35
+ @tree.should_not be_excludes("foo/tmp/more")
36
+ end
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe ListedDirectory do
4
+ before(:each) do
5
+ @files_count = 7
6
+ @path = File.expand_path(File.dirname(__FILE__))
7
+ @dir = ListedDirectory.new(:full_path => @path)
8
+ end
9
+ it "should be a listed file" do
10
+ @dir.should be_instance_of(ListedDirectory)
11
+ end
12
+
13
+ it "should have an icon_type of folder" do
14
+ @dir.icon_name.should == "folder"
15
+ end
16
+
17
+ it "should have the path set" do
18
+ @dir.full_path.should == @path
19
+ end
20
+
21
+ it "should have some files in it" do
22
+ pending "where is the count?"
23
+ @dir.files_count.should == @files_count
24
+ end
25
+ end
26
+
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe ListedFile do
4
+ context "giving a file path" do
5
+ before( :each ) do
6
+ @path = File.expand_path(__FILE__)
7
+ end
8
+ before(:each) do
9
+ @attrs = {
10
+ :full_path => @path,
11
+ :status => 'normal'
12
+ }
13
+ @file = ListedFile.create(@attrs)
14
+ end
15
+ it "should be recognized as a listed file" do
16
+ @file.should be_a(ListedFile)
17
+ end
18
+
19
+ it "should save the given attributes" do
20
+ @file.full_path.should == @path
21
+ @file.name.should == 'listed_file_spec.rb'
22
+ end
23
+
24
+ it "should have an icon" do
25
+ @file.icon.should_not be_nil
26
+ end
27
+ end
28
+
29
+ context "giving a directory path" do
30
+ before( :each ) do
31
+ @path = File.dirname File.expand_path(__FILE__)
32
+ end
33
+ before(:each) do
34
+ @attrs = {
35
+ :full_path => @path,
36
+ :status => 'normal'
37
+ }
38
+ @file = ListedFile.create(@attrs)
39
+ end
40
+ it "should be recognized as a listed directry" do
41
+ @file.should be_a(ListedDirectory)
42
+ end
43
+
44
+ it "should save the given attributes" do
45
+ @file.full_path.should == @path
46
+ @file.name.should == 'lib'
47
+ end
48
+
49
+ it "should have an icon" do
50
+ @file.icon.should_not be_nil
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe VimMate::NiceSingleton do
4
+ before(:each) do
5
+ class MySingleton
6
+ include VimMate::NiceSingleton
7
+
8
+ def hello
9
+ "hello"
10
+ end
11
+ end
12
+ end
13
+
14
+ it "should respond to .hello" do
15
+ MySingleton.hello.should == 'hello'
16
+ end
17
+
18
+ it "should not respond to .goodbye" do
19
+ lambda do
20
+ MySingleton.goodbye
21
+ end.should raise_error(NoMethodError)
22
+ end
23
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,10 @@
1
+ require 'config/environment'
2
+
3
+ def iter_mock
4
+ mock(:[] => 'value', :[]= => true)
5
+ end
6
+
7
+ def tree_mock
8
+ mock(:has_path? => true) # so that inotify is not called
9
+ end
10
+