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.
Files changed (131) hide show
  1. data/CHANGES +42 -0
  2. data/README.md +5 -3
  3. data/Rakefile +39 -81
  4. data/bin/redcar +1 -1
  5. data/lib/redcar.rb +9 -6
  6. data/lib/redcar/installer.rb +1 -1
  7. data/lib/redcar/ruby_extensions.rb +19 -0
  8. data/lib/redcar/runner.rb +1 -1
  9. data/lib/redcar/usage.rb +3 -0
  10. data/lib/redcar_quick_start.rb +11 -11
  11. data/plugins/application/features/step_definitions/tree_steps.rb +22 -5
  12. data/plugins/application/features/step_definitions/window_steps.rb +9 -1
  13. data/plugins/application/features/support/env.rb +5 -2
  14. data/plugins/application/lib/application.rb +51 -46
  15. data/plugins/application/lib/application/window.rb +60 -30
  16. data/plugins/application_swt/lib/application_swt.rb +16 -16
  17. data/plugins/application_swt/lib/application_swt/window.rb +35 -7
  18. data/plugins/auto_completer/features/support/env.rb +0 -2
  19. data/plugins/auto_indenter/features/support/env.rb +0 -1
  20. data/plugins/auto_pairer/features/auto_pairer.feature +50 -45
  21. data/plugins/auto_pairer/features/support/env.rb +0 -1
  22. data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +11 -6
  23. data/plugins/clipboard-viewer/Screenshot.png +0 -0
  24. data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
  25. data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
  26. data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
  27. data/plugins/clipboard-viewer/plugin.rb +9 -0
  28. data/plugins/clipboard-viewer/views/clipboard.html.erb +15 -0
  29. data/plugins/clipboard-viewer/views/default.css +43 -0
  30. data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
  31. data/plugins/comment/features/line_comment.feature +137 -0
  32. data/plugins/comment/features/selection_comment.feature +21 -0
  33. data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
  34. data/plugins/comment/lib/comment.rb +266 -0
  35. data/plugins/comment/plugin.rb +7 -0
  36. data/plugins/comment/vendor/comment_lib.json +47 -0
  37. data/plugins/declarations/lib/declarations.rb +1 -1
  38. data/plugins/document_search/features/replace.feature +10 -2
  39. data/plugins/document_search/features/support/env.rb +0 -1
  40. data/plugins/document_search/lib/document_search.rb +4 -1
  41. data/plugins/document_search/lib/document_search/replace.rb +11 -3
  42. data/plugins/document_search/lib/document_search/search_and_replace.rb +5 -2
  43. data/plugins/edit_view/features/case_change.feature +9 -9
  44. data/plugins/edit_view/features/cursor_navigation.feature +36 -0
  45. data/plugins/edit_view/features/step_definitions/editing_steps.rb +63 -8
  46. data/plugins/edit_view/features/step_definitions/notebook_steps.rb +2 -0
  47. data/plugins/edit_view/features/step_definitions/tab_steps.rb +8 -5
  48. data/plugins/edit_view/features/support/env.rb +8 -2
  49. data/plugins/edit_view/lib/edit_view.rb +16 -1
  50. data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
  51. data/plugins/edit_view/lib/edit_view/document.rb +27 -10
  52. data/plugins/edit_view/lib/edit_view/edit_tab.rb +17 -4
  53. data/plugins/edit_view/spec/edit_view/document_spec.rb +3 -0
  54. data/plugins/edit_view_swt/lib/edit_view_swt.rb +42 -3
  55. data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +17 -15
  56. data/plugins/help/lib/help.rb +40 -0
  57. data/plugins/help/plugin.rb +8 -0
  58. data/plugins/html_view/features/step_definitions/html_view_steps.rb +6 -4
  59. data/plugins/line_tools/features/support/env.rb +0 -1
  60. data/plugins/macros/features/step_definitions/macro_steps.rb +0 -55
  61. data/plugins/macros/features/support/env.rb +0 -2
  62. data/plugins/open_default_app/lib/open_default_app.rb +35 -0
  63. data/plugins/open_default_app/plugin.rb +8 -0
  64. data/plugins/open_default_app/screenshot.png +0 -0
  65. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +17 -3
  66. data/plugins/project/features/find_file.feature +3 -2
  67. data/plugins/project/features/highlight_focussed_tab.feature +8 -0
  68. data/plugins/project/features/move_and_rename_files.feature +25 -0
  69. data/plugins/project/features/open_and_save_files.feature +10 -1
  70. data/plugins/project/features/open_directory_tree.feature +32 -2
  71. data/plugins/project/features/step_definitions/directory_steps.rb +17 -0
  72. data/plugins/project/features/step_definitions/project_tree_steps.rb +3 -0
  73. data/plugins/project/features/sub_project.feature +14 -0
  74. data/plugins/project/features/support/env.rb +22 -3
  75. data/plugins/project/features/watch_for_modified_files.feature +32 -9
  76. data/plugins/project/lib/project.rb +53 -21
  77. data/plugins/project/lib/project/adapters/local.rb +21 -16
  78. data/plugins/project/lib/project/adapters/remote.rb +15 -13
  79. data/plugins/project/lib/project/commands.rb +37 -16
  80. data/plugins/project/lib/project/dir_controller.rb +41 -42
  81. data/plugins/project/lib/project/drb_service.rb +35 -21
  82. data/plugins/project/lib/project/file_list.rb +7 -1
  83. data/plugins/project/lib/project/manager.rb +28 -3
  84. data/plugins/project/lib/project/sub_project.rb +17 -0
  85. data/plugins/project/lib/project/support/recycle.js +2 -0
  86. data/plugins/project/lib/project/support/trash.rb +72 -0
  87. 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
  88. 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
  89. data/plugins/project/spec/project/file_list_spec.rb +4 -0
  90. data/plugins/redcar/features/goto_line_command.feature +20 -0
  91. data/plugins/redcar/redcar.rb +107 -47
  92. data/plugins/repl/lib/repl.rb +20 -20
  93. data/plugins/repl/lib/repl/clojure_mirror.rb +50 -58
  94. data/plugins/repl/lib/repl/groovy_mirror.rb +22 -41
  95. data/plugins/repl/lib/repl/repl_mirror.rb +85 -14
  96. data/plugins/repl/lib/repl/ruby_mirror.rb +12 -39
  97. data/plugins/repl/spec/repl/groovy_mirror_spec.rb +1 -1
  98. data/plugins/repl/spec/repl/ruby_mirror_spec.rb +12 -12
  99. data/plugins/ruby/README +6 -0
  100. data/plugins/ruby/lib/syntax_check/ruby.rb +28 -0
  101. data/plugins/ruby/plugin.rb +7 -0
  102. data/plugins/runnables/features/command_tree.feature +9 -0
  103. data/plugins/runnables/features/file_runner_input.feature +20 -0
  104. data/plugins/runnables/features/run_alternate_command.feature +14 -0
  105. data/plugins/runnables/features/support/env.rb +42 -5
  106. data/plugins/runnables/lib/runnables.rb +67 -21
  107. data/plugins/runnables/lib/runnables/commands.rb +35 -18
  108. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +23 -37
  109. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +16 -18
  110. data/plugins/scm_svn/features/support/env.rb +0 -3
  111. data/plugins/snippets/features/snippets.feature +17 -2
  112. data/plugins/snippets/features/support/env.rb +0 -1
  113. data/plugins/snippets/lib/snippets/tab_handler.rb +51 -18
  114. data/plugins/swt/lib/swt/cucumber_patches.rb +13 -68
  115. data/plugins/swt/lib/swt/cucumber_runner.rb +2 -3
  116. data/plugins/syntax_check/README +6 -0
  117. data/plugins/syntax_check/lib/syntax_check.rb +16 -0
  118. data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
  119. data/plugins/syntax_check/lib/syntax_check/error.rb +23 -0
  120. data/plugins/syntax_check/plugin.rb +7 -0
  121. data/plugins/tree_view_swt/lib/tree_view_swt.rb +6 -0
  122. data/plugins/web_bookmarks/Screenshot.png +0 -0
  123. data/plugins/web_bookmarks/lib/web_bookmarks.rb +42 -0
  124. data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +43 -0
  125. data/plugins/web_bookmarks/lib/web_bookmarks/browser_bar.rb +70 -0
  126. data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +111 -0
  127. data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +67 -0
  128. data/plugins/web_bookmarks/lib/web_bookmarks/view_controller.rb +22 -0
  129. data/plugins/web_bookmarks/plugin.rb +11 -0
  130. data/plugins/web_bookmarks/views/index.html.erb +5 -0
  131. metadata +60 -10
@@ -0,0 +1,23 @@
1
+ module Redcar
2
+ module SyntaxCheck
3
+ class Error
4
+ Type = "syntax.error.type"
5
+ Icon = "compile-error"
6
+ Color = [255, 32, 32]
7
+
8
+ attr_accessor :line, :message, :doc
9
+
10
+ def initialize(doc, line, message)
11
+ @doc = doc
12
+ @line = line
13
+ @message = message
14
+ end
15
+
16
+ def annotate
17
+ edit_view = doc.edit_view
18
+ edit_view.add_annotation_type(Type, Icon, Color)
19
+ edit_view.add_annotation(Type, line, message, 0, doc.get_line(line).length)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ Plugin.define do
2
+ name "syntax_check"
3
+ version "0.1"
4
+ file "lib", "syntax_check"
5
+ object "Redcar::SyntaxCheck"
6
+ dependencies "edit_view", ">0.9"
7
+ end
@@ -401,6 +401,8 @@ module Redcar
401
401
  def get_elements(tree_mirror)
402
402
  tree_mirror.top.to_java
403
403
  rescue => e
404
+ puts e.message
405
+ puts e.backtrace
404
406
  @tree_view_swt.handle_mirror_error(e)
405
407
  end
406
408
 
@@ -412,12 +414,16 @@ module Redcar
412
414
  children.any? if children
413
415
  end
414
416
  rescue => e
417
+ puts e.message
418
+ puts e.backtrace
415
419
  @tree_view_swt.handle_mirror_error(e)
416
420
  end
417
421
 
418
422
  def get_children(tree_node)
419
423
  tree_node.children.to_java
420
424
  rescue => e
425
+ puts e.message
426
+ puts e.backtrace
421
427
  @tree_view_swt.handle_mirror_error(e)
422
428
  end
423
429
 
@@ -0,0 +1,42 @@
1
+ require 'web_bookmarks/commands'
2
+ require 'web_bookmarks/bookmark'
3
+ require 'web_bookmarks/browser_bar'
4
+ require 'web_bookmarks/tree'
5
+ require 'web_bookmarks/view_controller'
6
+
7
+ module Redcar
8
+ class WebBookmarks
9
+ TREE_TITLE = "Web Bookmarks"
10
+ BOOKMARKS_FILE = "web_bookmarks.json"
11
+
12
+ def self.storage
13
+ @storage ||= begin
14
+ storage = Plugin::Storage.new('web_bookmarks')
15
+ storage.set_default('show_browser_bar_on_start', true)
16
+ storage
17
+ end
18
+ end
19
+
20
+ def self.menus
21
+ Redcar::Menu::Builder.build do
22
+ sub_menu "File" do
23
+ item "Web Preview", :command => WebBookmarks::FileWebPreview, :priority => 8
24
+ end
25
+ sub_menu "Edit" do
26
+ sub_menu "Document Navigation" do
27
+ item "Open Browser Bar", :command => WebBookmarks::OpenBrowserBar, :priority => 5
28
+ end
29
+ end
30
+ sub_menu "Project" do
31
+ item "Web Bookmarks", :command => WebBookmarks::ShowTree, :priority => 40
32
+ end
33
+ end
34
+ end
35
+
36
+ def self.toolbars
37
+ Redcar::ToolBar::Builder.build do
38
+ item "Web Bookmarks", :command => WebBookmarks::ShowTree, :icon => File.join(Redcar::ICONS_DIRECTORY, "globe.png"), :barname => :project
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+
2
+ module Redcar
3
+ class WebBookmarks
4
+ class Bookmark
5
+ include Redcar::Tree::Mirror::NodeMirror
6
+ attr_reader :url
7
+
8
+ def initialize(name,url)
9
+ @name = name
10
+ @url = url
11
+ @children = []
12
+ end
13
+
14
+ def leaf?
15
+ children.length < 1
16
+ end
17
+
18
+ def add(bookmark)
19
+ @children << bookmark
20
+ end
21
+
22
+ def text
23
+ @name
24
+ end
25
+
26
+ def icon
27
+ if leaf?
28
+ if @url =~ /^file/
29
+ File.join(Redcar::ICONS_DIRECTORY, "document-globe.png")
30
+ else
31
+ File.join(Redcar::ICONS_DIRECTORY, "globe.png")
32
+ end
33
+ else
34
+ File.join(Redcar::ICONS_DIRECTORY, "book-bookmark.png")
35
+ end
36
+ end
37
+
38
+ def children
39
+ @children
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,70 @@
1
+
2
+ module Redcar
3
+ class WebBookmarks
4
+ class BrowserBar < Redcar::Speedbar
5
+
6
+ def html_tab
7
+ tab = Redcar.app.focussed_window.focussed_notebook_tab
8
+ tab if tab.is_a?(Redcar::HtmlTab)
9
+ end
10
+
11
+ button :back, "<", "Ctrl+Left" do
12
+ html_tab.controller.browser.back if html_tab
13
+ end
14
+
15
+ button :forward, ">", "Ctrl+Right" do
16
+ html_tab.controller.browser.forward if html_tab
17
+ end
18
+
19
+ button :stop, "Stop", nil do
20
+ html_tab.controller.browser.stop if html_tab
21
+ end
22
+
23
+ button :refresh, "Refresh", "F5" do
24
+ if tab = html_tab
25
+ url = tab.controller.browser.url.to_s
26
+ Redcar.plugin_manager.objects_implementing(:before_web_refresh).each do |obj|
27
+ obj.before_web_refresh(path)
28
+ end
29
+ tab.controller.browser.refresh
30
+ end
31
+ end
32
+
33
+ button :source, "Source", nil do
34
+ tab = Redcar.app.focussed_window.new_tab(Redcar::EditTab)
35
+ url = html_tab.controller.browser.url.to_s
36
+ if url =~ /^file:\/\//
37
+ file_path = url[7,url.length]
38
+ mirror = Project::FileMirror.new(file_path)
39
+ tab.edit_view.document.mirror = mirror
40
+ else
41
+ tab.edit_view.document.text = html_tab.controller.browser.text
42
+ tab.title = "Page Source"
43
+ end
44
+ tab.edit_view.grammar = "HTML"
45
+ tab.edit_view.reset_undo
46
+ tab.focus
47
+ end
48
+
49
+ button :add, "+", nil do
50
+ if tab = html_tab and
51
+ url = tab.controller.browser.url.to_s
52
+ WebBookmarks::AddBookmark.new(url).run
53
+ end
54
+ end
55
+
56
+ label :url_label, "New URL:"
57
+ textbox :new_url
58
+
59
+ button :go_to_url, "Go!", "Return" do
60
+ @tab = html_tab
61
+ if @tab
62
+ unless new_url.value == ""
63
+ @tab.title=new_url.value
64
+ @tab.controller.go_to_location(new_url.value)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,111 @@
1
+
2
+ require 'java'
3
+
4
+ module Redcar
5
+ class WebBookmarks
6
+
7
+ # Open a HtmlTab for displaying web content
8
+ class DisplayWebContent < Redcar::Command
9
+ def initialize(name,url,display_bar=true)
10
+ @name = name
11
+ @url = url
12
+ @display_bar = display_bar
13
+ end
14
+
15
+ def execute
16
+ win = Redcar.app.focussed_window
17
+ controller = ViewController.new(@name,@url)
18
+ tab = win.new_tab(HtmlTab)
19
+ tab.html_view.controller = controller
20
+ tab.focus
21
+ if @display_bar or
22
+ WebBookmarks.storage['show_browser_bar_on_start']
23
+ WebBookmarks::OpenBrowserBar.new.run
24
+ end
25
+ end
26
+ end
27
+
28
+ class FileWebPreview < Redcar::EditTabCommand
29
+ def execute
30
+ mirror = doc.mirror
31
+ if mirror and path = mirror.path and File.exists?(path)
32
+ name = "Preview: " +File.basename(path)
33
+ else
34
+ name = "Preview: (untitled)"
35
+ preview = java.io.File.createTempFile("preview","html")
36
+ preview.deleteOnExit
37
+ path = preview.getAbsolutePath
38
+ File.open(path,'w') {|f| f.puts(doc.get_all_text)}
39
+ end
40
+ url = "file://" + path
41
+ DisplayWebContent.new(name,url).run
42
+ end
43
+ end
44
+
45
+ class ShowTree < Redcar::Command
46
+ sensitize :open_project
47
+ def execute
48
+ if tree = win.treebook.trees.detect {|tree| tree.tree_mirror.title == TREE_TITLE }
49
+ tree.refresh
50
+ win.treebook.focus_tree(tree)
51
+ else
52
+ project = Project::Manager.in_window(win)
53
+ tree = Tree.new(
54
+ TreeMirror.new(project),
55
+ TreeController.new(project)
56
+ )
57
+ win.treebook.add_tree(tree)
58
+ end
59
+ end
60
+ end
61
+
62
+ class OpenBrowserBar < Redcar::Command
63
+ def execute
64
+ window = Redcar.app.focussed_window
65
+ speedbar = Redcar::WebBookmarks::BrowserBar.new
66
+ window.open_speedbar(speedbar)
67
+ end
68
+ end
69
+
70
+ class AddBookmark < Redcar::ProjectCommand
71
+ def initialize(url)
72
+ @protocol = url.split("://")[0]
73
+ @url = url.split("://")[1]
74
+ end
75
+
76
+ def execute
77
+ @path = project.config_files(BOOKMARKS_FILE).detect { |pj|
78
+ not pj.include?(Redcar.user_dir)
79
+ }
80
+ if @path
81
+ json = File.read(@path)
82
+ else
83
+ @path = project.path + "/.redcar/#{BOOKMARKS_FILE}"
84
+ json = JSON.generate({"bookmarks"=>[]})
85
+ end
86
+ bookmarks = JSON(json)["bookmarks"]
87
+ if name = fill_field("Name")
88
+ group = fill_field("Group")
89
+ bookmark = {
90
+ "name" => name,
91
+ "url" => @url,
92
+ "protocol" => @protocol
93
+ }
94
+ bookmark["group"] = group unless group.nil? or group == ""
95
+ bookmarks << bookmark
96
+ File.open(@path,'w') do |f|
97
+ f.puts JSON.pretty_generate({"bookmarks"=>bookmarks})
98
+ end
99
+ end
100
+ end
101
+
102
+ def fill_field(name)
103
+ title = "Add New Bookmark"
104
+ msg = "Choose a #{name} for this Bookmark"
105
+ out = Redcar::Application::Dialog.input(title,msg)
106
+ return if out[:button] == :cancel
107
+ name = out[:value]
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,67 @@
1
+
2
+ module Redcar
3
+ class WebBookmarks
4
+ class TreeController
5
+ include Redcar::Tree::Controller
6
+
7
+ def initialize(project)
8
+ @project = project
9
+ end
10
+
11
+ def activated(tree, node)
12
+ DisplayWebContent.new(node.text,node.url).run
13
+ end
14
+ end
15
+
16
+ class TreeMirror
17
+ include Redcar::Tree::Mirror
18
+
19
+ def initialize(project)
20
+ @project = project
21
+ end
22
+
23
+ def bookmarks_files_paths
24
+ @project.config_files(BOOKMARKS_FILE)
25
+ end
26
+
27
+ def parse_url(url)
28
+ url.gsub("__PROJECT_PATH__",@project.path)
29
+ end
30
+
31
+ def title; TREE_TITLE; end
32
+
33
+ def top; load; end
34
+
35
+ def load
36
+ bookmarks = []
37
+ spares = []
38
+ groups = {}
39
+ bookmarks_files_paths.each do |path|
40
+ json = File.read(path)
41
+ bookmarks += JSON(json)["bookmarks"]
42
+ end
43
+
44
+ if bookmarks.any?
45
+ bookmarks.sort_by {|b| b["name"]}.map do |b|
46
+ prefix = b["protocol"] || "http"
47
+ url = prefix + "://" + parse_url(b["url"])
48
+ if b["group"].nil?
49
+ spares << Bookmark.new(b["name"],url)
50
+ else
51
+ if groups[b["group"]]
52
+ group = groups[b["group"]]
53
+ else
54
+ group = Bookmark.new(b["group"],nil)
55
+ groups[group.text] = group
56
+ end
57
+ group.add(Bookmark.new(b["name"],url))
58
+ end
59
+ end
60
+ spares.sort_by {|s| s.text} + groups.sort_by {|k,g| k}.map {|k,g| g}
61
+ else
62
+ []
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module Redcar
3
+ class WebBookmarks
4
+ class ViewController
5
+ include HtmlController
6
+
7
+ def initialize(title,url)
8
+ @title = title
9
+ @url = url
10
+ end
11
+
12
+ def title
13
+ @title
14
+ end
15
+
16
+ def index
17
+ rhtml = ERB.new(File.read(File.join(File.dirname(__FILE__), "..","..", "views", "index.html.erb")))
18
+ rhtml.result(binding)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+
2
+ Plugin.define do
3
+ name "web_bookmarks"
4
+ version "1.0"
5
+ file "lib", "web_bookmarks"
6
+ object "Redcar::WebBookmarks"
7
+ dependencies "tree", ">0",
8
+ "application", ">=1.1",
9
+ "project" , ">=1.1",
10
+ "HTML View" , ">0"
11
+ end
@@ -0,0 +1,5 @@
1
+ <script type="text/javascript">
2
+ <!--
3
+ window.location = "<%= @url %>"
4
+ //-->
5
+ </script>