redcar 0.3.4.3 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +45 -0
- data/README.md +2 -1
- data/ROADMAP.md +0 -1
- data/Rakefile +10 -4
- data/bin/redcar +2 -2
- data/lib/openssl/build.properties +7 -0
- data/lib/plugin_manager/lib/plugin_manager.rb +10 -0
- data/lib/plugin_manager/lib/plugin_manager/plugin_definition.rb +1 -13
- data/lib/redcar.rb +12 -8
- data/lib/redcar/installer.rb +16 -15
- data/lib/redcar/ruby_extensions.rb +146 -1
- data/lib/redcar/runner.rb +16 -7
- data/lib/redcar/usage.rb +4 -7
- data/lib/redcar_quick_start.rb +5 -5
- data/lib/regex_replace.rb +0 -7
- data/plugins/application/features/step_definitions/command_steps.rb +5 -0
- data/plugins/application/features/step_definitions/dialog_steps.rb +5 -0
- data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +38 -0
- data/plugins/application/features/step_definitions/window_steps.rb +1 -1
- data/plugins/application/features/support/env.rb +44 -8
- data/plugins/application/lib/application.rb +32 -33
- data/plugins/application/lib/application/command.rb +32 -2
- data/plugins/application/lib/application/command/executor.rb +2 -12
- data/plugins/application/lib/application/dialog.rb +14 -14
- data/plugins/application/lib/application/event_spewer.rb +32 -0
- data/plugins/application/lib/application/menu.rb +5 -5
- data/plugins/application/lib/application/menu/builder.rb +5 -0
- data/plugins/application/lib/application/menu/lazy_menu.rb +24 -0
- data/plugins/application/lib/application/notebook.rb +4 -3
- data/plugins/application/lib/application/tab.rb +6 -2
- data/plugins/application/lib/application/window.rb +8 -4
- data/plugins/application/spec/application/menu/builder_spec.rb +17 -1
- data/plugins/application/spec/application/notebook_spec.rb +1 -1
- data/plugins/application_swt/build.xml +74 -0
- data/plugins/application_swt/lib/application_swt.rb +79 -0
- data/plugins/application_swt/lib/application_swt/cucumber_patches.rb +6 -1
- data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +25 -17
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +50 -12
- data/plugins/application_swt/lib/application_swt/html_tab.rb +20 -0
- data/plugins/application_swt/lib/application_swt/menu.rb +26 -2
- data/plugins/application_swt/lib/application_swt/notebook.rb +10 -12
- data/plugins/application_swt/lib/application_swt/window.rb +11 -11
- data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
- data/plugins/auto_completer/lib/auto_completer.rb +74 -67
- data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
- data/plugins/auto_completer/lib/auto_completer/document_controller.rb +2 -2
- data/plugins/auto_completer/lib/auto_completer/word_list.rb +8 -1
- data/plugins/auto_indenter/features/ruby_style_indentation.feature +24 -0
- data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +6 -0
- data/plugins/auto_indenter/features/support/env.rb +2 -0
- data/plugins/auto_indenter/lib/auto_indenter.rb +86 -0
- data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +91 -0
- data/plugins/auto_indenter/lib/auto_indenter/commands.rb +34 -0
- data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +67 -12
- data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
- data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
- data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
- data/plugins/auto_pairer/lib/auto_pairer.rb +1 -0
- data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +43 -42
- data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +1 -5
- data/plugins/core/lib/core.rb +12 -1
- data/plugins/core/lib/core/observable.rb +7 -7
- data/plugins/core/lib/core/persistent_cache.rb +14 -2
- data/plugins/core/lib/core/plugin.rb +7 -0
- data/plugins/core/lib/core/resource.rb +78 -0
- data/plugins/core/lib/core/task.rb +62 -0
- data/plugins/core/lib/core/task_queue.rb +72 -0
- data/plugins/core/spec/core/resource_spec.rb +124 -0
- data/plugins/core/spec/core/task_queue_spec.rb +202 -0
- data/plugins/core/spec/spec_helper.rb +23 -1
- data/plugins/declarations/TODO +3 -0
- data/plugins/declarations/lib/declarations.rb +144 -0
- data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
- data/plugins/declarations/lib/declarations/file.rb +68 -0
- data/plugins/declarations/lib/declarations/parser.rb +94 -0
- data/plugins/declarations/lib/declarations/select_tag_dialog.rb +44 -0
- data/plugins/declarations/plugin.rb +7 -0
- data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
- data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
- data/plugins/declarations/spec/spec_helper.rb +4 -0
- data/plugins/edit_view/features/indentation_commands.feature +40 -0
- data/plugins/edit_view/features/line_delimiter.feature +40 -0
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +16 -4
- data/plugins/edit_view/features/step_definitions/notebook_steps.rb +1 -1
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
- data/plugins/edit_view/features/step_definitions/window_steps.rb +5 -1
- data/plugins/edit_view/features/support/env.rb +3 -5
- data/plugins/edit_view/features/undo_and_redo.feature +21 -0
- data/plugins/edit_view/lib/edit_view.rb +57 -4
- data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +19 -3
- data/plugins/edit_view/lib/edit_view/document.rb +46 -11
- data/plugins/edit_view/lib/edit_view/document/indentation.rb +35 -0
- data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
- data/plugins/edit_view/lib/edit_view/tab_settings.rb +13 -3
- data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
- data/plugins/edit_view/spec/edit_view/document_spec.rb +22 -0
- data/plugins/edit_view/spec/spec_helper.rb +1 -0
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +59 -7
- data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +3 -3
- data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +2 -2
- data/plugins/edit_view_swt/vendor/java-mateview.rb +3 -2
- data/plugins/encryption/encryption.rb +13 -6
- data/plugins/execute_current_tab/lib/execute_current_tab.rb +25 -15
- data/plugins/html_view/assets/redcar.css +32 -1
- data/plugins/html_view/lib/html_view.rb +23 -3
- data/plugins/html_view/lib/html_view/html_tab.rb +4 -0
- data/plugins/my_plugin/lib/my_plugin.rb +4 -12
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +1 -0
- data/plugins/plugin_manager_ui/views/index.html.erb +30 -37
- data/plugins/project/features/find_file.feature +75 -0
- data/plugins/project/features/open_and_save_files.feature +7 -7
- data/plugins/project/features/open_directory_tree.feature +11 -3
- data/plugins/project/features/refresh_directory_tree.feature +7 -1
- data/plugins/project/features/step_definitions/directory_steps.rb +11 -1
- data/plugins/project/features/step_definitions/file_steps.rb +10 -0
- data/plugins/project/features/support/env.rb +6 -1
- data/plugins/project/features/watch_for_modified_files.feature +79 -0
- data/plugins/project/lib/project.rb +72 -306
- data/plugins/project/lib/project/commands.rb +128 -0
- data/plugins/project/lib/project/dir_mirror.rb +5 -1
- data/plugins/project/lib/project/drb_service.rb +21 -31
- data/plugins/project/lib/project/file_list.rb +76 -0
- data/plugins/project/lib/project/file_mirror.rb +13 -1
- data/plugins/project/lib/project/find_file_dialog.rb +22 -52
- data/plugins/project/lib/project/manager.rb +210 -0
- data/plugins/project/lib/project/recent_directories.rb +16 -3
- data/plugins/project/plugin.rb +1 -1
- data/plugins/project/spec/fixtures/myproject/README +2 -0
- data/plugins/project/spec/fixtures/myproject/lib/foo_lib.rb +1 -0
- data/plugins/project/spec/fixtures/myproject/spec/foo_spec.rb +1 -0
- data/plugins/project/{features → spec}/fixtures/winter.txt +0 -0
- data/plugins/project/spec/project/dir_mirror_spec.rb +1 -12
- data/plugins/project/spec/project/file_list_spec.rb +140 -0
- data/plugins/project/spec/spec_helper.rb +20 -0
- data/plugins/redcar/plugin.rb +1 -0
- data/plugins/redcar/redcar.rb +254 -84
- data/plugins/redcar_debug/lib/redcar_debug.rb +58 -11
- data/plugins/redcar_debug/vendor/jruby-prof/README +46 -0
- data/plugins/redcar_debug/vendor/jruby-prof/Rakefile +36 -0
- data/plugins/redcar_debug/vendor/jruby-prof/build.xml +31 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/call_tree.html +22677 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/call_tree.txt +589 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/flat.txt +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/graph.html +1670 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/graph.txt +125 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/pidigits.rb +92 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test.rb +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test2.rb +29 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test_exception.rb +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test_overhead.rb +43 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof.rb +66 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/abstract_printer.rb +21 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/flat_text_printer.rb +35 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/graph_html_printer.rb +123 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/graph_text_printer.rb +45 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/invocation_set.rb +34 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/method.rb +107 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/profile_invocation.rb +43 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/simple_tree_printer.rb +27 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/tree_html_printer.rb +144 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/Invocation.java +14 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/JRubyProf.java +94 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/ProfEventHook.java +49 -0
- data/plugins/redcar_debug/vendor/jruby-prof/templates/graph_row.html.erb +18 -0
- data/plugins/redcar_debug/vendor/jruby-prof/test/basic_test.rb +291 -0
- data/plugins/redcar_debug/views/history.html.erb +33 -0
- data/plugins/redcar_debug/views/index.html.erb +33 -0
- data/plugins/repl/lib/repl/internal_mirror.rb +3 -15
- data/plugins/repl/spec/repl/internal_mirror_spec.rb +2 -2
- data/plugins/snippets/lib/snippets.rb +0 -1
- data/plugins/snippets/lib/snippets/document_controller.rb +7 -1
- data/plugins/task_manager/lib/task_manager.rb +28 -0
- data/plugins/task_manager/plugin.rb +11 -0
- data/plugins/task_manager/views/index.html.erb +67 -0
- data/plugins/textmate/lib/textmate.rb +17 -21
- data/plugins/textmate/lib/textmate/plist.rb +1 -2
- data/plugins/textmate/lib/textmate/preference.rb +5 -1
- data/plugins/textmate/lib/textmate/snippet.rb +6 -1
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +0 -6
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/Comments.tmPreferences +1 -1
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/next_Cucumber_Plain_Text_Feature_Completions.tmPreferences +30 -0
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/next_Symbol_list___Scenario.tmPreferences +19 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/next_Cucumber_Plain_Text_Feature.tmLanguage +221 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/next_Cucumber_Steps.tmLanguage +424 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/plaintext_template.erb +19 -77
- data/textmate/Bundles/Cucumber.tmbundle/info.plist +1 -20
- data/textmate/Bundles/Perl.tmbundle/Syntaxes/Perl.plist +1 -1
- data/textmate/Themes/Emacs Strict.tmTheme +241 -0
- data/textmate/Themes/IR_White.tmTheme +792 -0
- data/textmate/Themes/Monokai.tmTheme +291 -0
- data/textmate/Themes/WhysPoignant.tmTheme +191 -0
- metadata +92 -7
- data/plugins/application/features/main_window.feature +0 -8
- data/plugins/project/lib/project/project_command.rb +0 -5
- data/textmate/Bundles/Cucumber.tmbundle/Snippets/Scenario.tmSnippet +0 -22
- data/textmate/Bundles/Cucumber.tmbundle/Snippets/Story.tmSnippet +0 -25
data/plugins/redcar/plugin.rb
CHANGED
data/plugins/redcar/redcar.rb
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
module Redcar
|
2
2
|
module Top
|
3
|
+
class QuitCommand < Command
|
4
|
+
|
5
|
+
def execute
|
6
|
+
EditView::ModifiedTabsChecker.new(
|
7
|
+
Redcar.app.all_tabs.select {|t| t.is_a?(EditTab)},
|
8
|
+
"Save all before quitting?",
|
9
|
+
:none => lambda { Redcar.app.quit },
|
10
|
+
:continue => lambda { Redcar.app.quit },
|
11
|
+
:cancel => nil
|
12
|
+
).check
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
3
16
|
class NewCommand < Command
|
4
17
|
|
5
18
|
def execute
|
@@ -38,7 +51,50 @@ module Redcar
|
|
38
51
|
end
|
39
52
|
|
40
53
|
def execute
|
41
|
-
|
54
|
+
check_for_modified_tabs_and_close_window
|
55
|
+
quit_if_no_windows if [:linux, :windows].include?(Redcar.platform)
|
56
|
+
@window = nil
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def quit_if_no_windows
|
62
|
+
if Redcar.app.windows.length == 0
|
63
|
+
if Application.storage['stay_resident_after_last_window_closed'] && !(ARGV.include?("--multiple-instance"))
|
64
|
+
puts 'continuing to run to wait for incoming drb connections later'
|
65
|
+
else
|
66
|
+
QuitCommand.new.run
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def check_for_modified_tabs_and_close_window
|
72
|
+
EditView::ModifiedTabsChecker.new(
|
73
|
+
win.notebooks.map(&:tabs).flatten.select {|t| t.is_a?(EditTab)},
|
74
|
+
"Save all before closing the window?",
|
75
|
+
:none => lambda { win.close },
|
76
|
+
:continue => lambda { win.close },
|
77
|
+
:cancel => nil
|
78
|
+
).check
|
79
|
+
end
|
80
|
+
|
81
|
+
def win
|
82
|
+
@window || super
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class FocusWindowCommand < Command
|
87
|
+
def initialize(window=nil)
|
88
|
+
@window = window
|
89
|
+
end
|
90
|
+
|
91
|
+
def execute
|
92
|
+
win.focus
|
93
|
+
@window = nil
|
94
|
+
end
|
95
|
+
|
96
|
+
def win
|
97
|
+
@window || super
|
42
98
|
end
|
43
99
|
end
|
44
100
|
|
@@ -84,41 +140,28 @@ module Redcar
|
|
84
140
|
|
85
141
|
class AboutCommand < Command
|
86
142
|
def execute
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
143
|
+
new_tab = Top::NewCommand.new.run
|
144
|
+
new_tab.document.text = "About: Redcar\nVersion: #{Redcar::VERSION}\n" +
|
145
|
+
"Ruby Version: #{RUBY_VERSION}\n" +
|
146
|
+
"Jruby version: #{JRUBY_VERSION}\n" +
|
147
|
+
"Redcar.environment: #{Redcar.environment}\n" +
|
148
|
+
"http://redcareditor.com"
|
149
|
+
new_tab.title= 'About'
|
150
|
+
new_tab.edit_view.reset_undo
|
151
|
+
new_tab.document.set_modified(false)
|
94
152
|
end
|
95
153
|
end
|
96
154
|
|
97
155
|
class ChangelogCommand < Command
|
98
156
|
def execute
|
99
|
-
|
100
|
-
|
101
|
-
|
157
|
+
new_tab = Top::NewCommand.new.run
|
158
|
+
new_tab.document.text = File.read(File.join(File.dirname(__FILE__), "..", "..", "CHANGES"))
|
159
|
+
new_tab.title = 'Changes'
|
160
|
+
new_tab.edit_view.reset_undo
|
161
|
+
new_tab.edit_view.document.set_modified(false)
|
102
162
|
end
|
103
163
|
end
|
104
164
|
|
105
|
-
class PrintContents < EditTabCommand
|
106
|
-
|
107
|
-
def execute
|
108
|
-
puts "printing contents"
|
109
|
-
p tab.edit_view.document.to_s
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class PrintHistoryCommand < Command
|
114
|
-
def execute
|
115
|
-
Redcar.app.history.each do |c|
|
116
|
-
puts c
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
165
|
class PrintScopeTreeCommand < Command
|
123
166
|
def execute
|
124
167
|
puts tab.edit_view.controller.mate_text.parser.root.pretty(0)
|
@@ -127,22 +170,41 @@ module Redcar
|
|
127
170
|
|
128
171
|
class PrintScopeCommand < Command
|
129
172
|
def execute
|
130
|
-
|
173
|
+
Application::Dialog.tool_tip(tab.edit_view.document.cursor_scope.gsub(" ", "\n"))
|
131
174
|
end
|
132
175
|
end
|
133
176
|
|
134
|
-
class CloseTabCommand <
|
177
|
+
class CloseTabCommand < TabCommand
|
178
|
+
def initialize(tab=nil)
|
179
|
+
@tab = tab
|
180
|
+
end
|
181
|
+
|
182
|
+
def tab
|
183
|
+
@tab || super
|
184
|
+
end
|
135
185
|
|
136
186
|
def execute
|
137
|
-
if tab
|
187
|
+
if tab.is_a?(EditTab)
|
188
|
+
if tab.edit_view.document.modified?
|
189
|
+
result = Application::Dialog.message_box(
|
190
|
+
"This tab has unsaved changes. \n\nSave before closing?",
|
191
|
+
:buttons => :yes_no_cancel
|
192
|
+
)
|
193
|
+
case result
|
194
|
+
when :yes
|
195
|
+
tab.edit_view.document.save!
|
196
|
+
tab.close
|
197
|
+
when :no
|
198
|
+
tab.close
|
199
|
+
when :cancel
|
200
|
+
end
|
201
|
+
else
|
202
|
+
tab.close
|
203
|
+
end
|
204
|
+
else
|
138
205
|
tab.close
|
139
206
|
end
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
class ListTabsCommand < Command
|
144
|
-
def execute
|
145
|
-
p win.focussed_notebook.tabs.map {|tab| tab.class}
|
207
|
+
@tab = nil
|
146
208
|
end
|
147
209
|
end
|
148
210
|
|
@@ -182,6 +244,7 @@ module Redcar
|
|
182
244
|
doc = tab.edit_view.document
|
183
245
|
line_ix = doc.line_at_offset(doc.cursor_offset)
|
184
246
|
doc.cursor_offset = doc.offset_at_line(line_ix)
|
247
|
+
doc.ensure_visible(doc.cursor_offset)
|
185
248
|
end
|
186
249
|
end
|
187
250
|
|
@@ -195,30 +258,35 @@ module Redcar
|
|
195
258
|
else
|
196
259
|
doc.cursor_offset = doc.offset_at_line(line_ix + 1) - 1
|
197
260
|
end
|
261
|
+
doc.ensure_visible(doc.cursor_offset)
|
198
262
|
end
|
199
263
|
end
|
200
264
|
|
201
265
|
class ChangeIndentCommand < EditTabCommand
|
202
266
|
def execute
|
203
267
|
doc = tab.edit_view.document
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
268
|
+
doc.compound do
|
269
|
+
doc.edit_view.delay_parsing do
|
270
|
+
if doc.selection?
|
271
|
+
first_line_ix = doc.line_at_offset(doc.selection_range.begin)
|
272
|
+
last_line_ix = doc.line_at_offset(doc.selection_range.end)
|
273
|
+
if doc.selection_range.end == doc.offset_at_line(last_line_ix)
|
274
|
+
last_line_ix -= 1
|
275
|
+
end
|
276
|
+
first_line_ix.upto(last_line_ix) do |line_ix|
|
277
|
+
indent_line(doc, line_ix)
|
278
|
+
end
|
279
|
+
start_selection = doc.offset_at_line(first_line_ix)
|
280
|
+
if last_line_ix == doc.line_count - 1
|
281
|
+
end_selection = doc.length
|
282
|
+
else
|
283
|
+
end_selection = doc.offset_at_line(last_line_ix + 1)
|
284
|
+
end
|
285
|
+
doc.set_selection_range(start_selection, end_selection)
|
286
|
+
else
|
287
|
+
indent_line(doc, doc.cursor_line)
|
288
|
+
end
|
218
289
|
end
|
219
|
-
doc.set_selection_range(start_selection, end_selection)
|
220
|
-
else
|
221
|
-
indent_line(doc, doc.cursor_line)
|
222
290
|
end
|
223
291
|
end
|
224
292
|
end
|
@@ -229,12 +297,21 @@ module Redcar
|
|
229
297
|
use_spaces = true
|
230
298
|
num_spaces = 2
|
231
299
|
line = doc.get_line(line_ix)
|
232
|
-
if
|
300
|
+
if doc.edit_view.soft_tabs?
|
233
301
|
line_start = doc.offset_at_line(line_ix)
|
234
|
-
|
235
|
-
|
302
|
+
re = /^ {0,#{doc.edit_view.tab_width}}/
|
303
|
+
if md = line.match(re)
|
304
|
+
to = line_start + md[0].length
|
305
|
+
else
|
306
|
+
to = line_start
|
307
|
+
end
|
308
|
+
else
|
236
309
|
line_start = doc.offset_at_line(line_ix)
|
237
|
-
|
310
|
+
if line =~ /^\t/
|
311
|
+
to = line_start + 1
|
312
|
+
else
|
313
|
+
to = line_start
|
314
|
+
end
|
238
315
|
end
|
239
316
|
doc.delete(line_start, to - line_start) unless line_start == to
|
240
317
|
end
|
@@ -244,18 +321,15 @@ module Redcar
|
|
244
321
|
|
245
322
|
def indent_line(doc, line_ix)
|
246
323
|
line = doc.get_line(line_ix)
|
247
|
-
|
248
|
-
|
324
|
+
if doc.edit_view.soft_tabs?
|
325
|
+
whitespace = " "*doc.edit_view.tab_width
|
326
|
+
else
|
327
|
+
whitespace = "\t"
|
328
|
+
end
|
329
|
+
doc.insert(doc.offset_at_line(line_ix), whitespace)
|
249
330
|
end
|
250
331
|
end
|
251
332
|
|
252
|
-
class StripWhitespaceCommand < Redcar::EditTabCommand
|
253
|
-
|
254
|
-
def execute
|
255
|
-
doc.text = doc.to_s.gsub(/\s+$/, "\n")
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
333
|
class SelectAllCommand < Redcar::EditTabCommand
|
260
334
|
|
261
335
|
def execute
|
@@ -338,12 +412,32 @@ module Redcar
|
|
338
412
|
doc.offset_at_line(line_ix) + line_offset,
|
339
413
|
text
|
340
414
|
)
|
415
|
+
doc.cursor_offset = doc.offset_at_line(line_ix) + line_offset + text.length
|
341
416
|
end
|
342
|
-
new_offset = doc.offset_at_line(cursor_line) + cursor_line_offset + Redcar.app.clipboard.last.first.length
|
343
|
-
doc.cursor_offset = new_offset
|
344
417
|
end
|
345
418
|
end
|
346
419
|
|
420
|
+
class DuplicateCommand < Redcar::DocumentCommand
|
421
|
+
|
422
|
+
def execute
|
423
|
+
doc = tab.edit_view.document
|
424
|
+
if doc.selection?
|
425
|
+
first_line_ix = doc.line_at_offset(doc.selection_range.begin)
|
426
|
+
last_line_ix = doc.line_at_offset(doc.selection_range.end)
|
427
|
+
text = doc.get_slice(doc.offset_at_line(first_line_ix),
|
428
|
+
doc.offset_at_line_end(last_line_ix))
|
429
|
+
else
|
430
|
+
last_line_ix = doc.cursor_line
|
431
|
+
text = doc.get_line(doc.cursor_line)
|
432
|
+
end
|
433
|
+
if last_line_ix == (doc.line_count - 1)
|
434
|
+
text = "\n#{text}"
|
435
|
+
end
|
436
|
+
doc.insert(doc.offset_at_line_end(last_line_ix), text)
|
437
|
+
doc.scroll_to_line(last_line_ix + 1)
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
347
441
|
class DialogExample < Redcar::Command
|
348
442
|
def execute
|
349
443
|
builder = Menu::Builder.new do
|
@@ -506,6 +600,23 @@ module Redcar
|
|
506
600
|
end
|
507
601
|
end
|
508
602
|
|
603
|
+
# define commands from SelectTab1Command to SelectTab9Command
|
604
|
+
(1..9).each do |tab_num|
|
605
|
+
const_set("SelectTab#{tab_num}Command", Class.new(Redcar::Command)).class_eval do
|
606
|
+
define_method :execute do
|
607
|
+
notebook = Redcar.app.focussed_window_notebook
|
608
|
+
notebook.tabs[tab_num-1].focus if notebook.tabs[tab_num-1]
|
609
|
+
end
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
class ToggleInvisibles < Redcar::EditTabCommand
|
614
|
+
def execute
|
615
|
+
EditView.show_invisibles = !EditView.show_invisibles?
|
616
|
+
end
|
617
|
+
end
|
618
|
+
|
619
|
+
|
509
620
|
def self.keymaps
|
510
621
|
osx = Redcar::Keymap.build("main", :osx) do
|
511
622
|
link "Cmd+N", NewCommand
|
@@ -517,6 +628,7 @@ module Redcar
|
|
517
628
|
link "Cmd+Shift+S", Project::FileSaveAsCommand
|
518
629
|
link "Cmd+W", CloseTabCommand
|
519
630
|
link "Cmd+Shift+W", CloseWindowCommand
|
631
|
+
link "Cmd+Q", QuitCommand
|
520
632
|
|
521
633
|
link "Cmd+Shift+E", EditView::InfoSpeedbarCommand
|
522
634
|
link "Cmd+Z", UndoCommand
|
@@ -524,10 +636,12 @@ module Redcar
|
|
524
636
|
link "Cmd+X", CutCommand
|
525
637
|
link "Cmd+C", CopyCommand
|
526
638
|
link "Cmd+V", PasteCommand
|
639
|
+
link "Cmd+D", DuplicateCommand
|
527
640
|
link "Ctrl+A", MoveHomeCommand
|
528
641
|
link "Ctrl+E", MoveEndCommand
|
529
642
|
link "Cmd+[", DecreaseIndentCommand
|
530
643
|
link "Cmd+]", IncreaseIndentCommand
|
644
|
+
link "Cmd+Shift+I", AutoIndenter::IndentCommand
|
531
645
|
link "Cmd+L", GotoLineCommand
|
532
646
|
link "Cmd+F", SearchForwardCommand
|
533
647
|
link "Cmd+G", RepeatPreviousSearchForwardCommand
|
@@ -542,10 +656,18 @@ module Redcar
|
|
542
656
|
link "Cmd+Shift+[", SwitchTabDownCommand
|
543
657
|
link "Cmd+Shift+]", SwitchTabUpCommand
|
544
658
|
|
659
|
+
link "Ctrl+Shift+P", PrintScopeCommand
|
660
|
+
|
545
661
|
link "Cmd+Shift+R", PluginManagerUi::ReloadLastReloadedCommand
|
546
662
|
|
547
663
|
link "Cmd+Alt+S", Snippets::OpenSnippetExplorer
|
548
664
|
#Textmate.attach_keybindings(self, :osx)
|
665
|
+
|
666
|
+
# map SelectTab<number>Command
|
667
|
+
(1..9).each do |tab_num|
|
668
|
+
link "Cmd+#{tab_num}", Top.const_get("SelectTab#{tab_num}Command")
|
669
|
+
end
|
670
|
+
|
549
671
|
end
|
550
672
|
|
551
673
|
linwin = Redcar::Keymap.build("main", [:linux, :windows]) do
|
@@ -558,18 +680,21 @@ module Redcar
|
|
558
680
|
link "Ctrl+Shift+S", Project::FileSaveAsCommand
|
559
681
|
link "Ctrl+W", CloseTabCommand
|
560
682
|
link "Ctrl+Shift+W", CloseWindowCommand
|
561
|
-
|
683
|
+
link "Ctrl+Q", QuitCommand
|
684
|
+
|
562
685
|
link "Ctrl+Shift+E", EditView::InfoSpeedbarCommand
|
563
686
|
link "Ctrl+Z", UndoCommand
|
564
687
|
link "Ctrl+Y", RedoCommand
|
565
688
|
link "Ctrl+X", CutCommand
|
566
689
|
link "Ctrl+C", CopyCommand
|
567
690
|
link "Ctrl+V", PasteCommand
|
691
|
+
link "Ctrl+D", DuplicateCommand
|
568
692
|
link "Ctrl+A", MoveHomeCommand
|
569
693
|
link "Ctrl+E", MoveEndCommand
|
570
694
|
link "Ctrl+[", DecreaseIndentCommand
|
571
695
|
link "Ctrl+]", IncreaseIndentCommand
|
572
|
-
link "Ctrl+
|
696
|
+
link "Ctrl+Shift+[", AutoIndenter::IndentCommand
|
697
|
+
link "Ctrl+L", GotoLineCommand
|
573
698
|
link "Ctrl+F", SearchForwardCommand
|
574
699
|
link "F3", RepeatPreviousSearchForwardCommand
|
575
700
|
link "Ctrl+A", SelectAllCommand
|
@@ -580,6 +705,8 @@ module Redcar
|
|
580
705
|
link "Ctrl+T", Project::FindFileCommand
|
581
706
|
link "Ctrl+Shift+Alt+O", MoveTabToOtherNotebookCommand
|
582
707
|
|
708
|
+
link "Ctrl+Shift+P", PrintScopeCommand
|
709
|
+
|
583
710
|
link "Ctrl+Alt+O", SwitchNotebookCommand
|
584
711
|
|
585
712
|
link "Ctrl+Page Up", SwitchTabDownCommand
|
@@ -589,6 +716,11 @@ module Redcar
|
|
589
716
|
link "Ctrl+Alt+S", Snippets::OpenSnippetExplorer
|
590
717
|
#Textmate.attach_keybindings(self, :linux)
|
591
718
|
|
719
|
+
# map SelectTab<number>Command
|
720
|
+
(1..9).each do |tab_num|
|
721
|
+
link "Alt+#{tab_num}", Top.const_get("SelectTab#{tab_num}Command")
|
722
|
+
end
|
723
|
+
|
592
724
|
end
|
593
725
|
|
594
726
|
[linwin, osx]
|
@@ -602,7 +734,7 @@ module Redcar
|
|
602
734
|
item "New Window", NewWindowCommand
|
603
735
|
item "Open", Project::FileOpenCommand
|
604
736
|
item "Open Directory", Project::DirectoryOpenCommand
|
605
|
-
|
737
|
+
lazy_sub_menu "Open Recent" do
|
606
738
|
Project::RecentDirectories.generate_menu(self)
|
607
739
|
end
|
608
740
|
|
@@ -611,9 +743,16 @@ module Redcar
|
|
611
743
|
item "Save As", Project::FileSaveAsCommand
|
612
744
|
separator
|
613
745
|
item "Close Tab", CloseTabCommand
|
746
|
+
sub_menu "Switch Tab" do
|
747
|
+
(1..9).each do |num|
|
748
|
+
item "Tab #{num}", Top.const_get("SelectTab#{num}Command")
|
749
|
+
end
|
750
|
+
end
|
614
751
|
item "Close Notebook", CloseNotebookCommand
|
615
752
|
item "Close Window", CloseWindowCommand
|
616
753
|
item "Close Directory", Project::DirectoryCloseCommand
|
754
|
+
separator
|
755
|
+
item "Quit", QuitCommand
|
617
756
|
end
|
618
757
|
sub_menu "Edit" do
|
619
758
|
item "Tab Info", EditView::InfoSpeedbarCommand
|
@@ -624,14 +763,14 @@ module Redcar
|
|
624
763
|
item "Cut", CutCommand
|
625
764
|
item "Copy", CopyCommand
|
626
765
|
item "Paste", PasteCommand
|
766
|
+
item "Duplicate Region", DuplicateCommand
|
627
767
|
separator
|
628
768
|
item "Home", MoveHomeCommand
|
629
769
|
item "End", MoveEndCommand
|
630
770
|
separator
|
631
771
|
item "Increase Indent", IncreaseIndentCommand
|
632
772
|
item "Decrease Indent", DecreaseIndentCommand
|
633
|
-
|
634
|
-
item "Strip Whitespace", StripWhitespaceCommand
|
773
|
+
item "Indent", AutoIndenter::IndentCommand
|
635
774
|
separator
|
636
775
|
item "Goto Line", GotoLineCommand
|
637
776
|
item "Regex Search", SearchForwardCommand
|
@@ -647,15 +786,12 @@ module Redcar
|
|
647
786
|
end
|
648
787
|
sub_menu "Project" do
|
649
788
|
item "Find File", Project::FindFileCommand
|
789
|
+
item "Refresh Directory", Project::RefreshDirectoryCommand
|
650
790
|
end
|
651
791
|
sub_menu "Debug" do
|
652
|
-
item "
|
653
|
-
item "Print Contents", PrintContents
|
654
|
-
item "List Tabs", ListTabsCommand
|
655
|
-
item "Refresh Directory", Project::RefreshDirectoryCommand
|
656
|
-
item "Dialog Tester", DialogExample
|
792
|
+
item "Task Manager", TaskManager::OpenCommand
|
657
793
|
separator
|
658
|
-
item "Print Scope Tree", PrintScopeTreeCommand
|
794
|
+
#item "Print Scope Tree", PrintScopeTreeCommand
|
659
795
|
item "Print Scope at Cursor", PrintScopeCommand
|
660
796
|
end
|
661
797
|
sub_menu "View" do
|
@@ -665,11 +801,13 @@ module Redcar
|
|
665
801
|
separator
|
666
802
|
item "Previous Tab", SwitchTabDownCommand
|
667
803
|
item "Next Tab", SwitchTabUpCommand
|
804
|
+
separator
|
805
|
+
item "Show/Hide Invisibles", ToggleInvisibles
|
668
806
|
end
|
669
807
|
sub_menu "Plugins" do
|
670
808
|
item "Plugin Manager", PluginManagerUi::OpenCommand
|
671
809
|
item "Reload Again", PluginManagerUi::ReloadLastReloadedCommand
|
672
|
-
item("Edit Preferences") { Project.
|
810
|
+
item("Edit Preferences") { Project::Manager.open_project_for_path(Redcar::Plugin::Storage.storage_dir) }
|
673
811
|
separator
|
674
812
|
end
|
675
813
|
sub_menu "Bundles" do
|
@@ -684,16 +822,48 @@ module Redcar
|
|
684
822
|
end
|
685
823
|
end
|
686
824
|
|
687
|
-
|
825
|
+
class ApplicationEventHandler
|
826
|
+
def tab_focus(tab)
|
827
|
+
tab.focus
|
828
|
+
end
|
829
|
+
|
830
|
+
def tab_close(tab)
|
831
|
+
CloseTabCommand.new(tab).run
|
832
|
+
end
|
833
|
+
|
834
|
+
def window_close(win)
|
835
|
+
CloseWindowCommand.new(win).run
|
836
|
+
end
|
837
|
+
|
838
|
+
def application_close(app)
|
839
|
+
QuitCommand.new.run
|
840
|
+
end
|
841
|
+
|
842
|
+
def window_focus(win)
|
843
|
+
FocusWindowCommand.new(win).run
|
844
|
+
end
|
845
|
+
end
|
846
|
+
|
847
|
+
def self.application_event_handler
|
848
|
+
ApplicationEventHandler.new
|
849
|
+
end
|
850
|
+
|
851
|
+
def self.start(args=[])
|
852
|
+
puts "loading plugins took #{Time.now - PROCESS_START_TIME}"
|
688
853
|
Application.start
|
689
854
|
ApplicationSWT.start
|
855
|
+
s = Time.now
|
690
856
|
EditViewSWT.start
|
857
|
+
puts "EditViewSWT.start took #{Time.now - s}s"
|
858
|
+
s = Time.now
|
691
859
|
Redcar.gui = ApplicationSWT.gui
|
692
860
|
Redcar.app.controller = ApplicationSWT.new(Redcar.app)
|
693
|
-
|
694
861
|
Redcar.app.refresh_menu!
|
695
862
|
Redcar.app.load_sensitivities
|
696
|
-
|
863
|
+
puts "initializing gui took #{Time.now - s}s"
|
864
|
+
s = Time.now
|
865
|
+
Redcar::Project::Manager.start(args)
|
866
|
+
puts "project start took #{Time.now - s}s"
|
697
867
|
Redcar.app.make_sure_at_least_one_window_open
|
698
868
|
end
|
699
869
|
end
|