redcar 0.7 → 0.8
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/CHANGES +42 -0
- data/README.md +5 -3
- data/Rakefile +39 -81
- data/bin/redcar +1 -1
- data/lib/redcar.rb +9 -6
- data/lib/redcar/installer.rb +1 -1
- data/lib/redcar/ruby_extensions.rb +19 -0
- data/lib/redcar/runner.rb +1 -1
- data/lib/redcar/usage.rb +3 -0
- data/lib/redcar_quick_start.rb +11 -11
- data/plugins/application/features/step_definitions/tree_steps.rb +22 -5
- data/plugins/application/features/step_definitions/window_steps.rb +9 -1
- data/plugins/application/features/support/env.rb +5 -2
- data/plugins/application/lib/application.rb +51 -46
- data/plugins/application/lib/application/window.rb +60 -30
- data/plugins/application_swt/lib/application_swt.rb +16 -16
- data/plugins/application_swt/lib/application_swt/window.rb +35 -7
- data/plugins/auto_completer/features/support/env.rb +0 -2
- data/plugins/auto_indenter/features/support/env.rb +0 -1
- data/plugins/auto_pairer/features/auto_pairer.feature +50 -45
- data/plugins/auto_pairer/features/support/env.rb +0 -1
- data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +11 -6
- data/plugins/clipboard-viewer/Screenshot.png +0 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
- data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
- data/plugins/clipboard-viewer/plugin.rb +9 -0
- data/plugins/clipboard-viewer/views/clipboard.html.erb +15 -0
- data/plugins/clipboard-viewer/views/default.css +43 -0
- data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
- data/plugins/comment/features/line_comment.feature +137 -0
- data/plugins/comment/features/selection_comment.feature +21 -0
- data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
- data/plugins/comment/lib/comment.rb +266 -0
- data/plugins/comment/plugin.rb +7 -0
- data/plugins/comment/vendor/comment_lib.json +47 -0
- data/plugins/declarations/lib/declarations.rb +1 -1
- data/plugins/document_search/features/replace.feature +10 -2
- data/plugins/document_search/features/support/env.rb +0 -1
- data/plugins/document_search/lib/document_search.rb +4 -1
- data/plugins/document_search/lib/document_search/replace.rb +11 -3
- data/plugins/document_search/lib/document_search/search_and_replace.rb +5 -2
- data/plugins/edit_view/features/case_change.feature +9 -9
- data/plugins/edit_view/features/cursor_navigation.feature +36 -0
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +63 -8
- data/plugins/edit_view/features/step_definitions/notebook_steps.rb +2 -0
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +8 -5
- data/plugins/edit_view/features/support/env.rb +8 -2
- data/plugins/edit_view/lib/edit_view.rb +16 -1
- data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
- data/plugins/edit_view/lib/edit_view/document.rb +27 -10
- data/plugins/edit_view/lib/edit_view/edit_tab.rb +17 -4
- data/plugins/edit_view/spec/edit_view/document_spec.rb +3 -0
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +42 -3
- data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +17 -15
- data/plugins/help/lib/help.rb +40 -0
- data/plugins/help/plugin.rb +8 -0
- data/plugins/html_view/features/step_definitions/html_view_steps.rb +6 -4
- data/plugins/line_tools/features/support/env.rb +0 -1
- data/plugins/macros/features/step_definitions/macro_steps.rb +0 -55
- data/plugins/macros/features/support/env.rb +0 -2
- data/plugins/open_default_app/lib/open_default_app.rb +35 -0
- data/plugins/open_default_app/plugin.rb +8 -0
- data/plugins/open_default_app/screenshot.png +0 -0
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +17 -3
- data/plugins/project/features/find_file.feature +3 -2
- data/plugins/project/features/highlight_focussed_tab.feature +8 -0
- data/plugins/project/features/move_and_rename_files.feature +25 -0
- data/plugins/project/features/open_and_save_files.feature +10 -1
- data/plugins/project/features/open_directory_tree.feature +32 -2
- data/plugins/project/features/step_definitions/directory_steps.rb +17 -0
- data/plugins/project/features/step_definitions/project_tree_steps.rb +3 -0
- data/plugins/project/features/sub_project.feature +14 -0
- data/plugins/project/features/support/env.rb +22 -3
- data/plugins/project/features/watch_for_modified_files.feature +32 -9
- data/plugins/project/lib/project.rb +53 -21
- data/plugins/project/lib/project/adapters/local.rb +21 -16
- data/plugins/project/lib/project/adapters/remote.rb +15 -13
- data/plugins/project/lib/project/commands.rb +37 -16
- data/plugins/project/lib/project/dir_controller.rb +41 -42
- data/plugins/project/lib/project/drb_service.rb +35 -21
- data/plugins/project/lib/project/file_list.rb +7 -1
- data/plugins/project/lib/project/manager.rb +28 -3
- data/plugins/project/lib/project/sub_project.rb +17 -0
- data/plugins/project/lib/project/support/recycle.js +2 -0
- data/plugins/project/lib/project/support/trash.rb +72 -0
- data/plugins/project/spec/fixtures/multi-byte-files/a/341/204/200/341/205/247/341/206/274/341/204/205/341/205/251/foo +1 -0
- data/plugins/project/spec/fixtures/multi-byte-files//341/204/220/341/205/246/341/204/211/341/205/263/341/204/220/341/205/263.py +1 -0
- data/plugins/project/spec/project/file_list_spec.rb +4 -0
- data/plugins/redcar/features/goto_line_command.feature +20 -0
- data/plugins/redcar/redcar.rb +107 -47
- data/plugins/repl/lib/repl.rb +20 -20
- data/plugins/repl/lib/repl/clojure_mirror.rb +50 -58
- data/plugins/repl/lib/repl/groovy_mirror.rb +22 -41
- data/plugins/repl/lib/repl/repl_mirror.rb +85 -14
- data/plugins/repl/lib/repl/ruby_mirror.rb +12 -39
- data/plugins/repl/spec/repl/groovy_mirror_spec.rb +1 -1
- data/plugins/repl/spec/repl/ruby_mirror_spec.rb +12 -12
- data/plugins/ruby/README +6 -0
- data/plugins/ruby/lib/syntax_check/ruby.rb +28 -0
- data/plugins/ruby/plugin.rb +7 -0
- data/plugins/runnables/features/command_tree.feature +9 -0
- data/plugins/runnables/features/file_runner_input.feature +20 -0
- data/plugins/runnables/features/run_alternate_command.feature +14 -0
- data/plugins/runnables/features/support/env.rb +42 -5
- data/plugins/runnables/lib/runnables.rb +67 -21
- data/plugins/runnables/lib/runnables/commands.rb +35 -18
- data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +23 -37
- data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +16 -18
- data/plugins/scm_svn/features/support/env.rb +0 -3
- data/plugins/snippets/features/snippets.feature +17 -2
- data/plugins/snippets/features/support/env.rb +0 -1
- data/plugins/snippets/lib/snippets/tab_handler.rb +51 -18
- data/plugins/swt/lib/swt/cucumber_patches.rb +13 -68
- data/plugins/swt/lib/swt/cucumber_runner.rb +2 -3
- data/plugins/syntax_check/README +6 -0
- data/plugins/syntax_check/lib/syntax_check.rb +16 -0
- data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
- data/plugins/syntax_check/lib/syntax_check/error.rb +23 -0
- data/plugins/syntax_check/plugin.rb +7 -0
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +6 -0
- data/plugins/web_bookmarks/Screenshot.png +0 -0
- data/plugins/web_bookmarks/lib/web_bookmarks.rb +42 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +43 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/browser_bar.rb +70 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +111 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +67 -0
- data/plugins/web_bookmarks/lib/web_bookmarks/view_controller.rb +22 -0
- data/plugins/web_bookmarks/plugin.rb +11 -0
- data/plugins/web_bookmarks/views/index.html.erb +5 -0
- metadata +60 -10
|
@@ -9,26 +9,10 @@ module Redcar
|
|
|
9
9
|
puts 'warning--not starting listener (perhaps theres another Redcar already open?)' + e + ' ' + address
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
-
|
|
13
|
-
def
|
|
12
|
+
|
|
13
|
+
def open_item_drb(full_path, untitled = false)
|
|
14
14
|
begin
|
|
15
|
-
puts
|
|
16
|
-
if File.file?(path)
|
|
17
|
-
Swt.sync_exec do
|
|
18
|
-
Project::Manager.open_untitled_path(path)
|
|
19
|
-
Redcar.app.focussed_window.controller.bring_to_front
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
'ok'
|
|
23
|
-
rescue Exception => e
|
|
24
|
-
puts 'drb got exception:' + e.class + " " + e.message, e.backtrace
|
|
25
|
-
raise e
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def open_item_drb(full_path)
|
|
30
|
-
begin
|
|
31
|
-
puts 'drb opening ' + full_path if $VERBOSE
|
|
15
|
+
puts %{drb opening #{"untitled" if untitled} #{full_path}} if $VERBOSE
|
|
32
16
|
if File.directory? full_path
|
|
33
17
|
Swt.sync_exec do
|
|
34
18
|
if Redcar.app.windows.length == 0 and Application.storage['last_open_dir'] == full_path
|
|
@@ -60,7 +44,11 @@ module Redcar
|
|
|
60
44
|
if Redcar.app.windows.length == 0
|
|
61
45
|
Project::Manager.restore_last_session
|
|
62
46
|
end
|
|
63
|
-
|
|
47
|
+
if untitled
|
|
48
|
+
Project::Manager.open_untitled_path(full_path)
|
|
49
|
+
else
|
|
50
|
+
Project::Manager.open_file(full_path)
|
|
51
|
+
end
|
|
64
52
|
Redcar.app.focussed_window.controller.bring_to_front
|
|
65
53
|
end
|
|
66
54
|
'ok'
|
|
@@ -68,7 +56,33 @@ module Redcar
|
|
|
68
56
|
rescue Exception => e
|
|
69
57
|
puts 'drb got exception:' + e.class + " " + e.message, e.backtrace
|
|
70
58
|
raise e
|
|
71
|
-
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def open_file_and_wait(file, untitled = false)
|
|
63
|
+
semaphore = Mutex.new
|
|
64
|
+
handler = nil
|
|
65
|
+
tab = nil
|
|
66
|
+
Swt.sync_exec do
|
|
67
|
+
semaphore.lock
|
|
68
|
+
Project::Manager.restore_last_session if Redcar.app.windows.empty?
|
|
69
|
+
if untitled
|
|
70
|
+
Project::Manager.open_untitled_path(file)
|
|
71
|
+
else
|
|
72
|
+
Project::Manager.open_file(file)
|
|
73
|
+
end
|
|
74
|
+
window = Redcar.app.focussed_window
|
|
75
|
+
window.controller.bring_to_front
|
|
76
|
+
tab = window.focussed_notebook_tab
|
|
77
|
+
handler = tab.add_listener(:close) { semaphore.unlock }
|
|
78
|
+
end
|
|
79
|
+
Thread.new(tab, handler) do
|
|
80
|
+
semaphore.synchronize { tab.remove_listener(handler) }
|
|
81
|
+
end.join # Wait until the tab's close event was fired
|
|
82
|
+
'ok'
|
|
83
|
+
rescue Exception => e
|
|
84
|
+
puts 'drb got exception:' + e.class + " " + e.message, e.backtrace
|
|
85
|
+
raise e
|
|
72
86
|
end
|
|
73
87
|
|
|
74
88
|
end
|
|
@@ -41,7 +41,13 @@ module Redcar
|
|
|
41
41
|
paths.collect!{|d| d.dup}
|
|
42
42
|
while file = paths.shift
|
|
43
43
|
begin
|
|
44
|
-
|
|
44
|
+
if File.symlink? file
|
|
45
|
+
real_file = File.expand_path(File.join("..", File.readlink(file)), file)
|
|
46
|
+
real_file = File.expand_path(File.join("..", File.readlink(real_file)), real_file) while File.symlink? real_file
|
|
47
|
+
stat = File.lstat(real_file)
|
|
48
|
+
else
|
|
49
|
+
stat = File.lstat(file)
|
|
50
|
+
end
|
|
45
51
|
unless file =~ /\.git|\.yardoc|\.svn/
|
|
46
52
|
unless stat.directory?
|
|
47
53
|
files[file.dup] = stat.mtime
|
|
@@ -143,7 +143,9 @@ module Redcar
|
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
def self.find_projects_containing_path(path)
|
|
146
|
-
open_projects.select {|
|
|
146
|
+
open_projects.select {|p|
|
|
147
|
+
p.contains_path?(path)
|
|
148
|
+
}.sort_by {|p| path.split(//).length-p.path.split(//).length}
|
|
147
149
|
end
|
|
148
150
|
|
|
149
151
|
def self.open_file(path, adapter=Adapters::Local.new)
|
|
@@ -180,6 +182,18 @@ module Redcar
|
|
|
180
182
|
end
|
|
181
183
|
end
|
|
182
184
|
|
|
185
|
+
# Opens a subproject in a new window
|
|
186
|
+
# @param [String] project_path the project path to fork
|
|
187
|
+
# @param [String] path the path of the directory to view
|
|
188
|
+
def self.open_subproject(project_path,path)
|
|
189
|
+
win = Redcar.app.focussed_window
|
|
190
|
+
win = Redcar.app.new_window if !win or Manager.in_window(win)
|
|
191
|
+
project = Redcar::Project::SubProject.new(project_path,path).tap do |p|
|
|
192
|
+
p.open(win) if p.ready?
|
|
193
|
+
win.title = "Subproject: #{File.basename(path)} in #{File.basename(project_path)}"
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
183
197
|
# The currently focussed Project, or nil if none.
|
|
184
198
|
#
|
|
185
199
|
# @return [Project]
|
|
@@ -222,6 +236,17 @@ module Redcar
|
|
|
222
236
|
found_path_args
|
|
223
237
|
end
|
|
224
238
|
|
|
239
|
+
def self.update_tab_for_path(path,new_path=nil)
|
|
240
|
+
if tab = Manager.find_open_file_tab(path)
|
|
241
|
+
if new_path
|
|
242
|
+
mirror = Project::FileMirror.new(new_path)
|
|
243
|
+
tab.edit_view.document.mirror = mirror
|
|
244
|
+
else
|
|
245
|
+
tab.update_for_file_changes
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
225
250
|
def self.open_untitled_path(path)
|
|
226
251
|
begin
|
|
227
252
|
if File.file?(path) and contents = File.read(path)
|
|
@@ -297,7 +322,6 @@ module Redcar
|
|
|
297
322
|
|
|
298
323
|
group(:priority => 11) do
|
|
299
324
|
item "Close Directory", Project::DirectoryCloseCommand
|
|
300
|
-
item "Reveal in Project", Project::RevealInProjectCommand
|
|
301
325
|
end
|
|
302
326
|
end
|
|
303
327
|
sub_menu "Project", :priority => 15 do
|
|
@@ -332,7 +356,8 @@ module Redcar
|
|
|
332
356
|
item("in File Browser") { Project::OpenDirectoryInExplorerCommand.new(enclosing_dir).run }
|
|
333
357
|
item("in Command Line") { Project::OpenDirectoryInCommandLineCommand.new(enclosing_dir).run }
|
|
334
358
|
unless enclosing_dir == tree.tree_mirror.path
|
|
335
|
-
item("as new Project")
|
|
359
|
+
item("as new Project") { Manager.open_project_for_path(enclosing_dir) }
|
|
360
|
+
item("as Subproject") { Manager.open_subproject(tree.tree_mirror.path,enclosing_dir) }
|
|
336
361
|
end
|
|
337
362
|
end
|
|
338
363
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
module Redcar
|
|
3
|
+
class Project
|
|
4
|
+
class SubProject < Project
|
|
5
|
+
|
|
6
|
+
def initialize(project_path, path, adapter=Adapters::Local.new)
|
|
7
|
+
super(path,adapter)
|
|
8
|
+
@project=project_path
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def config_files(glob)
|
|
12
|
+
file_glob = File.join("#{@project}/.redcar", glob)
|
|
13
|
+
super + Dir[file_glob]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Redcar
|
|
2
|
+
class Project
|
|
3
|
+
module Trash
|
|
4
|
+
WINDOWS_SUPPORT_JS = File.expand_path("../recycle.js", __FILE__)
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
def recycle(file)
|
|
8
|
+
file = File.expand_path(file)
|
|
9
|
+
case Redcar.platform
|
|
10
|
+
when :windows then windows(file)
|
|
11
|
+
when :osx then osx(file)
|
|
12
|
+
when :linux then linux(file)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def osx(file)
|
|
17
|
+
system %{ osascript -e "tell application \\"Finder\\"
|
|
18
|
+
move (POSIX file \\"#{file}\\") to the trash
|
|
19
|
+
end tell" }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def windows(file)
|
|
23
|
+
system %{ cscript //nologo #{WINDOWS_SUPPORT_JS} "#{file}" }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Move paths to FreeDesktop Trash can
|
|
27
|
+
# See <http://www.ramendik.ru/docs/trashspec.html>
|
|
28
|
+
def linux(file)
|
|
29
|
+
trashdir = File.expand_path("#{(ENV['XDG_DATA_HOME'] || '~/.local/share')}/Trash")
|
|
30
|
+
FileUtils.mkdir_p("#{trashdir}/files")
|
|
31
|
+
FileUtils.mkdir_p("#{trashdir}/info")
|
|
32
|
+
|
|
33
|
+
# Create unique filename
|
|
34
|
+
deleted_path = "#{trashdir}/files/#{File.basename(file)}"
|
|
35
|
+
while File.exist?(deleted_path)
|
|
36
|
+
deleted_path = "#{trashdir}/files/#{File.basename(file)}-#{Time.now.to_i}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Write trashinfo
|
|
40
|
+
trashinfo = "#{trashdir}/info/#{File.basename(deleted_path)}.trashinfo"
|
|
41
|
+
File.open(trashinfo, 'w') do |f|
|
|
42
|
+
f << "[Trash Info]\n"
|
|
43
|
+
f << "Path=#{file}\n"
|
|
44
|
+
f << "DeletionDate=#{DateTime.now.strftime('%Y%m%dT%H:%M:%S')}\n"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
begin
|
|
48
|
+
FileUtils.mv(file, deleted_path)
|
|
49
|
+
rescue SystemCallError
|
|
50
|
+
# We cannot move - this usually happens if the file is on another partition
|
|
51
|
+
# The proper way to go would be to check for a partition-topdir .Trash directory
|
|
52
|
+
# We do not support this right now - the spec allows us to copy-and-remove in this case
|
|
53
|
+
if File.directory? file
|
|
54
|
+
# FileUtils.cp_r copies src-dir always _into_ dest-dir
|
|
55
|
+
# But we want src-dir's contents to be the contents of dest-dir
|
|
56
|
+
FileUtils.mkdir_p deleted_path
|
|
57
|
+
FileUtils.cp_r("#{file}/.", deleted_path)
|
|
58
|
+
else
|
|
59
|
+
FileUtils.cp(file, deleted_path)
|
|
60
|
+
end
|
|
61
|
+
FileUtils.rm_rf(file)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
return true
|
|
65
|
+
rescue SystemCallError
|
|
66
|
+
FileUtils.rm(trashinfo) if File.exist? trashinfo
|
|
67
|
+
return false
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
nonsense words
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
foofsoo
|
|
@@ -30,6 +30,10 @@ describe FileList do
|
|
|
30
30
|
@file_list.all_files.include?(relative_path("README")).should be_true
|
|
31
31
|
@file_list.all_files.include?(relative_path("lib", "foo_lib.rb")).should be_true
|
|
32
32
|
end
|
|
33
|
+
|
|
34
|
+
it "should return a list of files in a symlinked directory" do
|
|
35
|
+
@file_list.all_files.include?(relative_path("lib_symlink", "foo_lib.rb")).should be_true
|
|
36
|
+
end
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
describe "update information" do
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
@speedbar
|
|
3
|
+
Feature: Goto line command
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I open a new edit tab
|
|
7
|
+
|
|
8
|
+
Scenario: Open goto line speedbar
|
|
9
|
+
When I replace the contents with "Foo\nBar\nBaz"
|
|
10
|
+
And I move the cursor to 0
|
|
11
|
+
And I run the command Redcar::Top::GotoLineCommand
|
|
12
|
+
Then the Redcar::Top::GotoLineCommand::Speedbar speedbar should be open
|
|
13
|
+
|
|
14
|
+
Scenario: Search for a word should select next occurrence
|
|
15
|
+
When I replace the contents with "Foo\nBar\nBaz"
|
|
16
|
+
And I move the cursor to 0
|
|
17
|
+
And I run the command Redcar::Top::GotoLineCommand
|
|
18
|
+
And I type "2" into the "line" field in the speedbar
|
|
19
|
+
And I press "Go" in the speedbar
|
|
20
|
+
Then the cursor should be on line 1
|
data/plugins/redcar/redcar.rb
CHANGED
|
@@ -82,7 +82,12 @@ module Redcar
|
|
|
82
82
|
class NewCommand < Command
|
|
83
83
|
|
|
84
84
|
def execute
|
|
85
|
-
|
|
85
|
+
unless win.nil?
|
|
86
|
+
tab = win.new_tab(Redcar::EditTab)
|
|
87
|
+
else
|
|
88
|
+
window = Redcar.app.new_window
|
|
89
|
+
tab = window.new_tab(Redcar::EditTab)
|
|
90
|
+
end
|
|
86
91
|
tab.title = "untitled"
|
|
87
92
|
tab.focus
|
|
88
93
|
tab
|
|
@@ -216,9 +221,31 @@ module Redcar
|
|
|
216
221
|
|
|
217
222
|
class CloseTreeCommand < Command
|
|
218
223
|
def execute
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
224
|
+
win = Redcar.app.focussed_window
|
|
225
|
+
if win and treebook = win.treebook
|
|
226
|
+
if tree = treebook.focussed_tree
|
|
227
|
+
if tree.tree_mirror.is_a?(Project::DirMirror)
|
|
228
|
+
Redcar::Application::Dialog.message_box(
|
|
229
|
+
"Use the \"Close Directory\" command to close this project"
|
|
230
|
+
)
|
|
231
|
+
else
|
|
232
|
+
treebook.remove_tree(tree)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
class ToggleTreesCommand < Command
|
|
240
|
+
def execute
|
|
241
|
+
win = Redcar.app.focussed_window
|
|
242
|
+
if win and treebook = win.treebook
|
|
243
|
+
if win.trees_visible?
|
|
244
|
+
win.set_trees_visible(false)
|
|
245
|
+
else
|
|
246
|
+
win.set_trees_visible(true)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
222
249
|
end
|
|
223
250
|
end
|
|
224
251
|
|
|
@@ -407,8 +434,22 @@ Redcar.environment: #{Redcar.environment}
|
|
|
407
434
|
end
|
|
408
435
|
end
|
|
409
436
|
|
|
410
|
-
class
|
|
437
|
+
class MoveNextLineCommand < DocumentCommand
|
|
438
|
+
def execute
|
|
439
|
+
doc = tab.edit_view.document
|
|
440
|
+
line_ix = doc.line_at_offset(doc.cursor_offset)
|
|
441
|
+
if line_ix == doc.line_count - 1
|
|
442
|
+
doc.cursor_offset = doc.length
|
|
443
|
+
else
|
|
444
|
+
doc.cursor_offset = doc.offset_at_line(line_ix + 1) - doc.delim.length
|
|
445
|
+
end
|
|
446
|
+
doc.ensure_visible(doc.cursor_offset)
|
|
447
|
+
doc.insert(doc.cursor_offset, "\n")
|
|
448
|
+
|
|
449
|
+
end
|
|
450
|
+
end
|
|
411
451
|
|
|
452
|
+
class MoveBottomCommand < DocumentCommand
|
|
412
453
|
def execute
|
|
413
454
|
doc.cursor_offset = doc.length
|
|
414
455
|
doc.ensure_visible(doc.length)
|
|
@@ -550,30 +591,34 @@ Redcar.environment: #{Redcar.environment}
|
|
|
550
591
|
cursor_line = doc.cursor_line
|
|
551
592
|
cursor_line_offset = doc.cursor_line_offset
|
|
552
593
|
diff = 0
|
|
553
|
-
doc.controllers(
|
|
554
|
-
doc.
|
|
555
|
-
doc.
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
doc.
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
594
|
+
doc.controllers(AutoPairer::DocumentController).first.disable do
|
|
595
|
+
doc.controllers(AutoIndenter::DocumentController).first.disable do
|
|
596
|
+
doc.controllers(AutoCompleter::DocumentController).first.start_modification
|
|
597
|
+
doc.selection_ranges.each do |range|
|
|
598
|
+
doc.delete(range.begin - diff, range.count)
|
|
599
|
+
diff += range.count
|
|
600
|
+
end
|
|
601
|
+
texts = Redcar.app.clipboard.last.dup
|
|
602
|
+
texts.each_with_index do |text, i|
|
|
603
|
+
line_ix = start_line + i
|
|
604
|
+
if line_ix == doc.line_count
|
|
605
|
+
doc.insert(doc.length, "\n" + " "*line_offset)
|
|
606
|
+
else
|
|
607
|
+
line = doc.get_line(line_ix).chomp
|
|
608
|
+
if line.length < line_offset
|
|
609
|
+
doc.insert(
|
|
610
|
+
doc.offset_at_inner_end_of_line(line_ix),
|
|
611
|
+
" "*(line_offset - line.length)
|
|
612
|
+
)
|
|
613
|
+
end
|
|
570
614
|
end
|
|
615
|
+
doc.insert(
|
|
616
|
+
doc.offset_at_line(line_ix) + line_offset,
|
|
617
|
+
text
|
|
618
|
+
)
|
|
619
|
+
doc.cursor_offset = doc.offset_at_line(line_ix) + line_offset + text.length
|
|
571
620
|
end
|
|
572
|
-
doc.
|
|
573
|
-
doc.offset_at_line(line_ix) + line_offset,
|
|
574
|
-
text
|
|
575
|
-
)
|
|
576
|
-
doc.cursor_offset = doc.offset_at_line(line_ix) + line_offset + text.length
|
|
621
|
+
doc.controllers(AutoCompleter::DocumentController).first.end_modification
|
|
577
622
|
end
|
|
578
623
|
end
|
|
579
624
|
end
|
|
@@ -607,15 +652,15 @@ Redcar.environment: #{Redcar.environment}
|
|
|
607
652
|
cursor_ix = doc.cursor_offset
|
|
608
653
|
if doc.selection?
|
|
609
654
|
start_ix = doc.selection_range.begin
|
|
610
|
-
text = doc.selected_text
|
|
611
|
-
|
|
655
|
+
text = doc.selected_text
|
|
656
|
+
|
|
612
657
|
sorted_text = text.split("\n").sort().join("\n")
|
|
613
658
|
doc.replace_selection(sorted_text)
|
|
614
659
|
doc.cursor_offset = cursor_ix
|
|
615
660
|
end
|
|
616
661
|
end
|
|
617
662
|
end
|
|
618
|
-
|
|
663
|
+
|
|
619
664
|
class DialogExample < Redcar::Command
|
|
620
665
|
def execute
|
|
621
666
|
builder = Menu::Builder.new do
|
|
@@ -641,23 +686,22 @@ Redcar.environment: #{Redcar.environment}
|
|
|
641
686
|
|
|
642
687
|
button :go, "Go", "Return" do
|
|
643
688
|
new_line_ix = line.value.to_i - 1
|
|
644
|
-
if new_line_ix < doc.line_count and new_line_ix >= 0
|
|
645
|
-
doc.cursor_offset = doc.offset_at_line(new_line_ix)
|
|
646
|
-
doc.scroll_to_line(new_line_ix)
|
|
647
|
-
win.close_speedbar
|
|
689
|
+
if new_line_ix < @doc.line_count and new_line_ix >= 0
|
|
690
|
+
@doc.cursor_offset = @doc.offset_at_line(new_line_ix)
|
|
691
|
+
@doc.scroll_to_line(new_line_ix)
|
|
692
|
+
@win.close_speedbar
|
|
648
693
|
end
|
|
649
694
|
end
|
|
650
695
|
|
|
651
|
-
def initialize(command)
|
|
696
|
+
def initialize(command, win)
|
|
652
697
|
@command = command
|
|
698
|
+
@doc = command.doc
|
|
699
|
+
@win = win
|
|
653
700
|
end
|
|
654
|
-
|
|
655
|
-
def doc; @command.doc; end
|
|
656
|
-
def win; @command.send(:win); end
|
|
657
701
|
end
|
|
658
702
|
|
|
659
703
|
def execute
|
|
660
|
-
@speedbar = GotoLineCommand::Speedbar.new(self)
|
|
704
|
+
@speedbar = GotoLineCommand::Speedbar.new(self, win)
|
|
661
705
|
win.open_speedbar(@speedbar)
|
|
662
706
|
end
|
|
663
707
|
end
|
|
@@ -681,6 +725,12 @@ Redcar.environment: #{Redcar.environment}
|
|
|
681
725
|
end
|
|
682
726
|
end
|
|
683
727
|
|
|
728
|
+
class ToggleFullscreen < Command
|
|
729
|
+
def execute
|
|
730
|
+
Redcar.app.focussed_window.fullscreen = !Redcar.app.focussed_window.fullscreen
|
|
731
|
+
end
|
|
732
|
+
end
|
|
733
|
+
|
|
684
734
|
class ToggleInvisibles < Redcar::EditTabCommand
|
|
685
735
|
def execute
|
|
686
736
|
EditView.show_invisibles = !EditView.show_invisibles?
|
|
@@ -743,11 +793,12 @@ Redcar.environment: #{Redcar.environment}
|
|
|
743
793
|
#link "Cmd+Ctrl+O", Project::OpenRemoteCommand
|
|
744
794
|
link "Cmd+S", Project::FileSaveCommand
|
|
745
795
|
link "Cmd+Shift+S", Project::FileSaveAsCommand
|
|
746
|
-
link "Cmd+Ctrl+R", Project::RevealInProjectCommand
|
|
747
796
|
link "Cmd+W", CloseTabCommand
|
|
748
797
|
link "Cmd+Shift+W", CloseWindowCommand
|
|
749
798
|
link "Cmd+Q", QuitCommand
|
|
750
799
|
|
|
800
|
+
#link "Cmd+Return", MoveNextLineCommand
|
|
801
|
+
|
|
751
802
|
link "Cmd+Shift+E", EditView::InfoSpeedbarCommand
|
|
752
803
|
link "Cmd+Z", UndoCommand
|
|
753
804
|
link "Cmd+Shift+Z", RedoCommand
|
|
@@ -766,6 +817,7 @@ Redcar.environment: #{Redcar.environment}
|
|
|
766
817
|
link "Cmd+Shift+I", AutoIndenter::IndentCommand
|
|
767
818
|
link "Cmd+L", GotoLineCommand
|
|
768
819
|
link "Cmd+F", DocumentSearch::SearchForwardCommand
|
|
820
|
+
link "Cmd+H", DocumentSearch::SearchAndReplaceCommand
|
|
769
821
|
#link "Cmd+Shift+F", DocumentSearch::RepeatPreviousSearchForwardCommand
|
|
770
822
|
link "Cmd+Ctrl+F", DocumentSearch::SearchAndReplaceCommand
|
|
771
823
|
link "Cmd+Shift+F", Redcar::FindInProject::OpenSearch
|
|
@@ -789,11 +841,13 @@ Redcar.environment: #{Redcar.environment}
|
|
|
789
841
|
link "Cmd+Shift+]", SwitchTabUpCommand
|
|
790
842
|
link "Ctrl+Shift+[", MoveTabDownCommand
|
|
791
843
|
link "Ctrl+Shift+]", MoveTabUpCommand
|
|
844
|
+
link "F11", ToggleFullscreen
|
|
792
845
|
link "Cmd+Alt+I", ToggleInvisibles
|
|
793
846
|
link "Ctrl+R", Runnables::RunEditTabCommand
|
|
794
847
|
link "Cmd+I", OutlineView::OpenOutlineViewCommand
|
|
795
848
|
|
|
796
849
|
link "Ctrl+Shift+P", PrintScopeCommand
|
|
850
|
+
link "Cmd+Shift+H", ToggleTreesCommand
|
|
797
851
|
|
|
798
852
|
link "Cmd+Shift+R", PluginManagerUi::ReloadLastReloadedCommand
|
|
799
853
|
|
|
@@ -816,11 +870,12 @@ Redcar.environment: #{Redcar.environment}
|
|
|
816
870
|
#link "Alt+Shift+O", Project::OpenRemoteCommand
|
|
817
871
|
link "Ctrl+S", Project::FileSaveCommand
|
|
818
872
|
link "Ctrl+Shift+S", Project::FileSaveAsCommand
|
|
819
|
-
link "Ctrl+Shift+R", Project::RevealInProjectCommand
|
|
820
873
|
link "Ctrl+W", CloseTabCommand
|
|
821
874
|
link "Ctrl+Shift+W", CloseWindowCommand
|
|
822
875
|
link "Ctrl+Q", QuitCommand
|
|
823
876
|
|
|
877
|
+
link "Ctrl+Enter", MoveNextLineCommand
|
|
878
|
+
|
|
824
879
|
link "Ctrl+Shift+E", EditView::InfoSpeedbarCommand
|
|
825
880
|
link "Ctrl+Z", UndoCommand
|
|
826
881
|
link "Ctrl+Y", RedoCommand
|
|
@@ -839,6 +894,7 @@ Redcar.environment: #{Redcar.environment}
|
|
|
839
894
|
link "Ctrl+Shift+[", AutoIndenter::IndentCommand
|
|
840
895
|
link "Ctrl+L", GotoLineCommand
|
|
841
896
|
link "Ctrl+F", DocumentSearch::SearchForwardCommand
|
|
897
|
+
link "Ctrl+H", DocumentSearch::SearchAndReplaceCommand
|
|
842
898
|
link "F3", DocumentSearch::RepeatPreviousSearchForwardCommand
|
|
843
899
|
link "Ctrl+Shift+F", Redcar::FindInProject::OpenSearch
|
|
844
900
|
link "Ctrl+A", SelectAllCommand
|
|
@@ -862,16 +918,18 @@ Redcar.environment: #{Redcar.environment}
|
|
|
862
918
|
link "Ctrl+Shift+P", PrintScopeCommand
|
|
863
919
|
|
|
864
920
|
link "Ctrl+Alt+O", SwitchNotebookCommand
|
|
865
|
-
|
|
921
|
+
link "Ctrl+Shift+H", ToggleTreesCommand
|
|
866
922
|
link "Ctrl+Page Up", SwitchTabDownCommand
|
|
867
923
|
link "Ctrl+Page Down", SwitchTabUpCommand
|
|
868
924
|
link "Ctrl+Shift+Page Up", MoveTabDownCommand
|
|
869
925
|
link "Ctrl+Shift+Page Down", MoveTabUpCommand
|
|
870
926
|
link "Ctrl+Shift+R", PluginManagerUi::ReloadLastReloadedCommand
|
|
927
|
+
link "F11", ToggleFullscreen
|
|
871
928
|
link "Ctrl+Alt+I", ToggleInvisibles
|
|
872
929
|
link "Ctrl+I", OutlineView::OpenOutlineViewCommand
|
|
873
930
|
|
|
874
931
|
link "Ctrl+Alt+S", Snippets::OpenSnippetExplorer
|
|
932
|
+
|
|
875
933
|
#Textmate.attach_keybindings(self, :linux)
|
|
876
934
|
|
|
877
935
|
# map SelectTab<number>Command
|
|
@@ -896,10 +954,9 @@ Redcar.environment: #{Redcar.environment}
|
|
|
896
954
|
item "New Notebook", :command => NewNotebookCommand, :icon => File.join(Redcar::ICONS_DIRECTORY, "book--plus.png"), :barname => :edit
|
|
897
955
|
item "Close Notebook", :command => CloseNotebookCommand, :icon => File.join(Redcar::ICONS_DIRECTORY, "book--minus.png"), :barname => :edit
|
|
898
956
|
end
|
|
899
|
-
|
|
900
957
|
end
|
|
901
958
|
|
|
902
|
-
def self.menus
|
|
959
|
+
def self.menus(window)
|
|
903
960
|
Menu::Builder.build do
|
|
904
961
|
sub_menu "File", :priority => :first do
|
|
905
962
|
group(:priority => :first) do
|
|
@@ -949,7 +1006,7 @@ Redcar.environment: #{Redcar.environment}
|
|
|
949
1006
|
item "Toggle Block Selection", ToggleBlockSelectionCommand
|
|
950
1007
|
end
|
|
951
1008
|
end
|
|
952
|
-
|
|
1009
|
+
|
|
953
1010
|
group(:priority => 40) do
|
|
954
1011
|
sub_menu "Document Navigation" do
|
|
955
1012
|
item "Goto Line", GotoLineCommand
|
|
@@ -982,6 +1039,8 @@ Redcar.environment: #{Redcar.environment}
|
|
|
982
1039
|
item "Font Size", SelectFontSize
|
|
983
1040
|
item "Theme", SelectTheme
|
|
984
1041
|
end
|
|
1042
|
+
item "Toggle Tree Visibility", :command => ToggleTreesCommand
|
|
1043
|
+
item "Toggle Fullscreen", :command => ToggleFullscreen, :type => :check, :active => window ? window.fullscreen : false
|
|
985
1044
|
separator
|
|
986
1045
|
item "New Notebook", NewNotebookCommand
|
|
987
1046
|
item "Close Notebook", CloseNotebookCommand
|
|
@@ -1015,7 +1074,7 @@ Redcar.environment: #{Redcar.environment}
|
|
|
1015
1074
|
end
|
|
1016
1075
|
end
|
|
1017
1076
|
sub_menu "Help", :priority => :last do
|
|
1018
|
-
group(:priority => :
|
|
1077
|
+
group(:priority => :last) do
|
|
1019
1078
|
item "About", AboutCommand
|
|
1020
1079
|
item "New In This Version", ChangelogCommand
|
|
1021
1080
|
end
|
|
@@ -1070,7 +1129,8 @@ Redcar.environment: #{Redcar.environment}
|
|
|
1070
1129
|
s = Time.now
|
|
1071
1130
|
Redcar::Project::Manager.start(args)
|
|
1072
1131
|
puts "project start took #{Time.now - s}s"
|
|
1073
|
-
Redcar.app.make_sure_at_least_one_window_open
|
|
1132
|
+
win = Redcar.app.make_sure_at_least_one_window_open
|
|
1133
|
+
win.close if win and args.include?("--no-window")
|
|
1074
1134
|
end
|
|
1075
1135
|
Redcar.update_gui do
|
|
1076
1136
|
Swt.splash_screen.close if Swt.splash_screen
|