redcar-dev 0.12.7dev-java → 0.12.8dev-java

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 CHANGED
@@ -11,6 +11,8 @@ Version 0.12 (TBA)
11
11
  * Fixed irritating bugs in the indenter (Dan Lucraft)
12
12
  * Pressing enter when between {} will expand the block (Dan Lucraft)
13
13
  * Tweak to line numbers so highlighting isn't lost as doc passes 100 lines (Dan Lucraft)
14
+ * Added next line, previous line bindings to Ctrl+N and Ctrl+P (Dan Lucraft)
15
+ * Added open line, transpose characters commands (Dan Lucraft)
14
16
 
15
17
  Version 0.11 (23 March 2011)
16
18
  ============================
data/README.md CHANGED
@@ -104,7 +104,7 @@ On Linux/Windows:
104
104
 
105
105
  To just run all specs:
106
106
 
107
- $ jruby -S rake specs
107
+ $ rake specs
108
108
 
109
109
  ### Features
110
110
 
@@ -118,7 +118,7 @@ On Linux/Windows:
118
118
 
119
119
  To just run all features:
120
120
 
121
- $ jruby -S rake cucumber
121
+ $ rake cucumber
122
122
 
123
123
  ## LICENSE
124
124
 
data/Rakefile CHANGED
@@ -134,6 +134,7 @@ end
134
134
  desc "Run all specs and features"
135
135
  task :default => ["specs", "cucumber"]
136
136
 
137
+ desc "Run all specs"
137
138
  task :specs do
138
139
  files = Dir['plugins/*/spec/*/*_spec.rb'] + Dir['plugins/*/spec/*/*/*_spec.rb'] + Dir['plugins/*/spec/*/*/*/*_spec.rb']
139
140
  case Config::CONFIG["host_os"]
data/lib/redcar.rb CHANGED
@@ -56,7 +56,7 @@ end
56
56
  #
57
57
  # and so on.
58
58
  module Redcar
59
- VERSION = '0.12.7dev' # also change in the gemspec!
59
+ VERSION = '0.12.8dev' # also change in the gemspec!
60
60
  VERSION_MAJOR = 0
61
61
  VERSION_MINOR = 12
62
62
  VERSION_RELEASE = 0
@@ -51,8 +51,13 @@ module Redcar
51
51
  if arg =~ /--untitled-file=(.*)/
52
52
  path = $1 if File.file?($1)
53
53
  untitled = true
54
- elsif File.file?(arg) or File.directory?(arg)
54
+ elsif arg !~ /^--/ # not --something
55
55
  path = File.expand_path(arg)
56
+ if !File.exist?(path)
57
+ require 'fileutils'
58
+ FileUtils.mkdir_p File.dirname(path)
59
+ FileUtils.touch path
60
+ end
56
61
  end
57
62
  next unless path
58
63
  drb_answer = drb.open_item_drb(path, untitled, ARGV.include?("-w"))
@@ -138,7 +138,7 @@ module Redcar
138
138
  end
139
139
 
140
140
  # Create a new Application::Window, and the controller for it.
141
- def new_window
141
+ def new_window(show=true)
142
142
  s = Time.now
143
143
  new_window = Window.new
144
144
  windows << new_window
@@ -146,18 +146,29 @@ module Redcar
146
146
  attach_window_listeners(new_window)
147
147
  new_window.refresh_menu
148
148
  new_window.refresh_toolbar
149
- new_window.show
150
- set_focussed_window(new_window)
151
- #puts "App#new_window took #{Time.now - s}s"
149
+ show_window(new_window) if show
152
150
  new_window
153
151
  end
154
152
 
153
+ def show_window(window)
154
+ window.show
155
+ set_focussed_window(window)
156
+ end
157
+
155
158
  def make_sure_at_least_one_window_open
156
159
  if windows.length == 0
157
160
  new_window
158
161
  end
159
162
  end
160
163
 
164
+ def make_sure_at_least_one_window_there
165
+ if windows.length == 0
166
+ win = new_window(false)
167
+ set_focussed_window(win)
168
+ win
169
+ end
170
+ end
171
+
161
172
  # Removes a window from this Application. Should not be called by plugins,
162
173
  # use Window#close instead.
163
174
  def window_closed(window)
@@ -36,23 +36,23 @@ Feature: Find file
36
36
  Then the filter dialog should have 1 entry
37
37
  And I should see "foo_spec.rb (myproject/spec)" at 0 the filter dialog
38
38
 
39
- Scenario: One matching file when specifying a directory
39
+ Scenario: One matching file when specifying a symlinked directory
40
40
  When I open the find file dialog
41
41
  And I set the filter to "lib_sym/foo"
42
42
  And I wait "0.4" seconds
43
43
  Then the filter dialog should have 1 entry
44
44
  And I should see "foo_lib.rb (myproject/lib_symlink)" at 0 the filter dialog
45
45
 
46
- Scenario: Two matching files
46
+ Scenario: Two matching files, plus one in symlink
47
47
  When I open the find file dialog
48
48
  And I set the filter to "foo"
49
- And I wait "0.4" seconds
49
+ And I wait "1.4" seconds
50
50
  Then the filter dialog should have 3 entries
51
51
  And I should see "foo_lib.rb (myproject/lib)" at 0 the filter dialog
52
52
  And I should see "foo_lib.rb (myproject/lib_symlink)" at 1 the filter dialog
53
53
  And I should see "foo_spec.rb (myproject/spec)" at 2 the filter dialog
54
54
 
55
- Scenario: Two matching files - spaces ignored
55
+ Scenario: Two matching files, plus one in symlink - spaces ignored
56
56
  When I open the find file dialog
57
57
  And I set the filter to "foo rb"
58
58
  And I wait "0.4" seconds
@@ -236,8 +236,17 @@ module Redcar
236
236
  end
237
237
 
238
238
  def config_dir
239
- dir = File.join(path, ".redcar")
240
- FileUtils.mkdir_p(dir)
239
+ if Redcar.platform == :windows && Redcar.environment != :test
240
+ dir = File.join(path, "._redcar")
241
+ else
242
+ dir = File.join(path, ".redcar")
243
+ end
244
+ unless File.directory? dir
245
+ FileUtils.mkdir_p(dir)
246
+ if Redcar.platform == :windows
247
+ system("attrib.exe +H \"#{dir}") # make hidden for cmd directory listings
248
+ end
249
+ end
241
250
  dir
242
251
  end
243
252
 
@@ -264,8 +264,10 @@ module Redcar
264
264
  end
265
265
  if should_open == :yes
266
266
  win = Redcar.app.focussed_window
267
- win = Redcar.app.new_window if !win or Manager.in_window(win)
267
+ win = Redcar.app.new_window(false) if !win or Manager.in_window(win)
268
268
  project.open(win) if project.ready?
269
+ Redcar.app.show_window(win)
270
+ project
269
271
  end
270
272
  end
271
273
 
@@ -418,7 +420,7 @@ module Redcar
418
420
  end
419
421
 
420
422
  def self.close_tab_guard(tab)
421
- if tab.respond_to?(:edit_view) && tab.edit_view.document.modified?
423
+ if tab.respond_to?(:edit_view) && tab.edit_view.document.modified? && !tab.is_a?(REPL::Tab)
422
424
  tab.focus
423
425
  result = Application::Dialog.message_box(
424
426
  "This tab has unsaved changes. \n\nSave before closing?",
@@ -246,6 +246,18 @@ Redcar.environment: #{Redcar.environment}
246
246
  end
247
247
  end
248
248
 
249
+ class MoveUpCommand < EditTabCommand
250
+ def execute
251
+ tab.edit_view.invoke_action(:LINE_UP)
252
+ end
253
+ end
254
+
255
+ class MoveDownCommand < EditTabCommand
256
+ def execute
257
+ tab.edit_view.invoke_action(:LINE_DOWN)
258
+ end
259
+ end
260
+
249
261
  class ForwardCharCommand < DocumentCommand
250
262
  def execute
251
263
  doc.cursor_offset = [doc.cursor_offset + 1, doc.length].min
@@ -258,6 +270,14 @@ Redcar.environment: #{Redcar.environment}
258
270
  end
259
271
  end
260
272
 
273
+ class OpenLineCommand < DocumentCommand
274
+ def execute
275
+ prev = doc.cursor_offset
276
+ doc.insert_at_cursor("\n")
277
+ doc.cursor_offset = prev
278
+ end
279
+ end
280
+
261
281
  class DeleteCharCommand < DocumentCommand
262
282
  def execute
263
283
  if doc.cursor_offset < doc.length
@@ -465,6 +485,25 @@ Redcar.environment: #{Redcar.environment}
465
485
  doc.scroll_to_line(last_line_ix + 1)
466
486
  end
467
487
  end
488
+
489
+ class TransposeCharactersCommand < Redcar::DocumentCommand
490
+ def execute
491
+ line = doc.get_line(doc.cursor_line)
492
+ line_offset = doc.cursor_line_offset
493
+
494
+ if line_offset > 0 and line.length >= 2
495
+ if line_offset < line.length - 1
496
+ first_char = line.chars[line_offset - 1].to_s
497
+ second_char = line.chars[line_offset].to_s
498
+ doc.replace(doc.cursor_offset - 1, 2, second_char + first_char)
499
+ elsif line_offset == line.length - 1
500
+ first_char = line.chars[line_offset - 2].to_s
501
+ second_char = line.chars[line_offset - 1].to_s
502
+ doc.replace(doc.cursor_offset - 2, 2, second_char + first_char)
503
+ end
504
+ end
505
+ end
506
+ end
468
507
 
469
508
  class SortLinesCommand < Redcar::DocumentCommand
470
509
 
@@ -617,6 +656,7 @@ Redcar.environment: #{Redcar.environment}
617
656
  link "Cmd+C", CopyCommand
618
657
  link "Cmd+V", PasteCommand
619
658
  link "Cmd+D", DuplicateCommand
659
+ link "Ctrl+T", TransposeCharactersCommand
620
660
 
621
661
  link "Home", MoveTopCommand
622
662
  link "Ctrl+A", MoveHomeCommand
@@ -624,6 +664,10 @@ Redcar.environment: #{Redcar.environment}
624
664
  link "End", MoveBottomCommand
625
665
  link "Ctrl+F", ForwardCharCommand
626
666
  link "Ctrl+B", BackwardCharCommand
667
+ link "Ctrl+P", MoveUpCommand
668
+ link "Ctrl+N", MoveDownCommand
669
+ link "Ctrl+B", BackwardCharCommand
670
+ link "Ctrl+O", OpenLineCommand
627
671
  link "Ctrl+D", DeleteCharCommand
628
672
  link "Ctrl+H", BackspaceCommand
629
673
 
@@ -858,8 +902,15 @@ Redcar.environment: #{Redcar.environment}
858
902
 
859
903
  item "Forward Character", ForwardCharCommand
860
904
  item "Backward Character", BackwardCharCommand
905
+ item "Previous Line", MoveUpCommand
906
+ item "Next Line", MoveDownCommand
907
+ item "Open Line", OpenLineCommand
908
+
909
+ separator
910
+
861
911
  item "Delete Character", DeleteCharCommand
862
912
  item "Backspace", BackspaceCommand
913
+ item "Transpose", TransposeCharactersCommand
863
914
  end
864
915
  end
865
916
 
@@ -1000,11 +1051,11 @@ Redcar.environment: #{Redcar.environment}
1000
1051
  end
1001
1052
  Redcar.update_gui do
1002
1053
  SplashScreen.splash_screen.close if SplashScreen.splash_screen
1003
- win = Redcar.app.make_sure_at_least_one_window_open
1004
- win.close if win and args.include?("--no-window")
1054
+ win = Redcar.app.make_sure_at_least_one_window_there
1005
1055
  Redcar.log.info("startup milestone: window open #{Time.now - Redcar.process_start_time}")
1006
1056
  Redcar::Project::Manager.start(args)
1007
1057
  Redcar.log.info("startup milestone: project open #{Time.now - Redcar.process_start_time}")
1058
+ win.show if win and !args.include?("--no-window")
1008
1059
  end
1009
1060
  Redcar.load_useful_libraries
1010
1061
  Redcar.log.info("startup milestone: complete: #{Time.now - Redcar.process_start_time}")
@@ -0,0 +1,32 @@
1
+ Basic, simple (beta) debugger plugin for redcar editor.
2
+
3
+ It lacks:
4
+ - Variables, eval, and call stack information.
5
+ - Conditional breakpoints.
6
+
7
+ It has:
8
+ - Ruby debugger integrated in a REPL tab (variables, eval, conditional breakpoints... and much more).
9
+ - ToolBar debug buttons: debug, next, step, continue and list.
10
+ - Tags current line in editor tab.
11
+
12
+ Working in:
13
+ - Breakpoint toolbar button.
14
+ - Breakpoint persistence between restarts.
15
+
16
+ If you use rdebug, probably this is more than you ever needed.
17
+ If you use Netbeans or Rubymine, this could seem like a wombat against a sabretooth.
18
+ If you use Redcar, take a look at http://blog.bithug.org/2011/04/redcar-debug, it's far more advanced than this project.
19
+
20
+ Why would you like to test this plugin?
21
+ - It gives access to the rdebug command line power: conditional breakpoints, frames...
22
+ - It makes rdebug easier to use.
23
+ - It's small and hackable. You can add your own commands or support to new languages.
24
+
25
+ If you still want to install this:
26
+ - Install ruby-debug gem.
27
+ - Download and copy the spray folder to your redcar plugins folder.
28
+ - Restart redcar, and you can see the new buttons in the redcar ToolBar.
29
+
30
+ You can see it in action:
31
+ http://s3.amazonaws.com/files.posterous.com/temp-2011-07-22/eEfnBmyqCjgkzrkxesmCdIgpvvwIghxFJdFtvAyFupucGdjFtxgwFbpCAjFA/SprayTest.swf?AWSAccessKeyId=AKIAJFZAE65UYRT34AOQ&Expires=1311401313&Signature=WLEFFjhmHW4u59KNqKVf8oqwhq4%3D
32
+
@@ -0,0 +1,5 @@
1
+
2
+
3
+
4
+ 10.times { puts "hi" }
5
+
@@ -0,0 +1,50 @@
1
+ require 'spray_tabs'
2
+
3
+ module Annotations
4
+
5
+ BREAKPOINT = ["breakpoint.annotation.type","control-pause-small",[100, 100, 200]]
6
+ CURRENT_LINE = ["current_line.annotation.type","control",[100, 100, 200]]
7
+
8
+ def self.set(path, line, type=CURRENT_LINE)
9
+ tab= (SprayTabs.find_first_matching_tab(path) || SprayTabs.open_tab(path))
10
+ unless Annotations.get_types(path).andand.include?(type)
11
+ tab.edit_view.add_annotation_type(*type)
12
+ end
13
+ unless Annotations.get_lines(path, type).include?(line)
14
+ tab.edit_view.add_annotation(type[0], line-1, type[0].split('.')[0], 0,0)
15
+ end
16
+ SprayTabs.set_current_tab(path, line)
17
+ end
18
+
19
+ def self.remove(path, line, type=CURRENT_LINE)
20
+ tab= (SprayTabs.find_first_matching_tab(path) || SprayTabs.open_tab(path))
21
+ tab.edit_view.remove_annotation(Annotations.get(path, line-1, type))
22
+ end
23
+
24
+ def self.get(path, line, type=CURRENT_LINE)
25
+ tab= SprayTabs.find_first_matching_tab(path)
26
+ begin
27
+ annotation= tab.edit_view.annotations.select{|a|
28
+ (a.getLine==line) and (a.getType==type[0])
29
+ }.first
30
+ rescue
31
+ nil
32
+ end
33
+ end
34
+
35
+ def self.get_types(path)
36
+ tab= SprayTabs.find_first_matching_tab(path)
37
+ tab.edit_view.annotations.map{|a| a.getType}.uniq! rescue []
38
+ end
39
+
40
+ def self.get_lines(path, type=CURRENT_LINE)
41
+ tab= SprayTabs.find_first_matching_tab(path)
42
+ begin
43
+ annotations= tab.edit_view.annotations.select{|a| a.getType==type[0]}
44
+ annotations.map{|a| a.getLine+1}.sort!
45
+ rescue
46
+ []
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,38 @@
1
+ require 'net/telnet'
2
+
3
+ class RDebugController
4
+ RDEBUG_NO_PRINT= File.join(Redcar.root, "plugins", "spray", "lib", "controllers", "rdebug_no_print.rb")
5
+ RDEBUG_PROMPT= /PROMPT \(rdb:\d*\) |CONFIRM Really quit\? \(y\/n\)/
6
+ @@current_port= 31415
7
+ @@s= nil
8
+
9
+ attr_reader :command
10
+
11
+ def initialize(path, host='localhost', port=nil)
12
+ @path, @host, @port = path, host, (port || @@current_port+=1)
13
+ @command= "rdebug --debug -nx -p #{@port} -s -w -r '#{RDEBUG_NO_PRINT}' '#{@path}'"
14
+ end
15
+
16
+ def connect
17
+ retries= 1 #1 seconds of timeout
18
+ begin
19
+ @@s= Net::Telnet::new("Host"=> @host, "Port"=> @port, "Prompt"=> RDEBUG_PROMPT,
20
+ "Telnetmode"=> false, "Timeout"=> 2, "Waittime"=> 0)
21
+ rescue
22
+ sleep 0.2
23
+ retry if 0 <= (retries-=0.2)
24
+ raise("Timeout connecting to rdebug on #{@host}:#{@port}")
25
+ end
26
+ @@s.waitfor(/PROMPT \(rdb:\d*\)/)
27
+ end
28
+
29
+ def send_command(command)
30
+ @@s.cmd(command) || ''
31
+ end
32
+
33
+ def current_position
34
+ line, file = @@s.cmd("info line").scan(/Line\s(\d+).*"(.*)"/).flatten
35
+ [line.to_i, File.expand_path(file, File.dirname(@path))]
36
+ end
37
+
38
+ end
@@ -0,0 +1,9 @@
1
+
2
+ ##
3
+ # Avoids printing file & line after commands
4
+ module Debugger
5
+ class CommandProcessor
6
+ def self.print_location_and_text(file, line)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,58 @@
1
+ require 'spray_repl_mirror'
2
+ require 'spray_tabs'
3
+
4
+ module Redcar
5
+ class Spray
6
+ #menu and toolbar
7
+ def self.menus
8
+ Menu::Builder.build do
9
+ sub_menu "Plugins" do
10
+ sub_menu "Spray", :priority => 139 do
11
+ item "Debug file", OpenSprayREPL
12
+ ["List", "Step", "Next", "Continue"].each{|command|
13
+ item(command) {Redcar.safely{SprayTabs.send_to_repl(command.downcase)}}
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def self.toolbars
21
+ ToolBar::Builder.build do
22
+ item "Debug file", {:icon=>File.join(Redcar::ICONS_DIRECTORY, "arrow-step-over.png"), :command=>OpenSprayREPL}
23
+ item "Next", {:icon=>File.join(Redcar::ICONS_DIRECTORY, "arrow-270.png"), :command=>SpraySendNext}
24
+ item "Step", {:icon=>File.join(Redcar::ICONS_DIRECTORY, "arrow-315.png"), :command=>SpraySendStep}
25
+ item "Continue", {:icon=>File.join(Redcar::ICONS_DIRECTORY, "arrow-step.png"), :command=>SpraySendContinue}
26
+ item "List", {:icon=>File.join(Redcar::ICONS_DIRECTORY, "arrow-continue.png"), :command=>SpraySendList}
27
+ end
28
+ end
29
+
30
+ class OpenSprayREPL < Redcar::REPL::OpenREPL
31
+ def execute
32
+ Redcar.safely{
33
+ SprayTabs.find_first_matching_tab("SprayOutput").andand.close
34
+ SprayTabs.find_first_matching_tab("Spray: ").andand.close
35
+ open_repl(SprayReplMirror.new)
36
+ }
37
+ end
38
+ end
39
+
40
+ class SpraySendList < Redcar::Command
41
+ def execute; Redcar.safely{SprayTabs.send_to_repl("list")}; end
42
+ end
43
+
44
+ class SpraySendStep < Redcar::Command
45
+ def execute; Redcar.safely{SprayTabs.send_to_repl("step")}; end
46
+ end
47
+
48
+ class SpraySendNext < Redcar::Command
49
+ def execute; Redcar.safely{SprayTabs.send_to_repl("next")}; end
50
+ end
51
+
52
+ class SpraySendContinue < Redcar::Command
53
+ def execute; Redcar.safely{SprayTabs.send_to_repl("continue")}; end
54
+ end
55
+
56
+ end
57
+ end
58
+
@@ -0,0 +1,58 @@
1
+ require 'controllers/rdebug_controller'
2
+ require 'annotations'
3
+
4
+ module Redcar
5
+ class Spray
6
+ class SprayReplMirror < Redcar::REPL::ReplMirror
7
+
8
+ attr_reader :title, :prompt, :grammar_name, :evaluator
9
+
10
+ def initialize
11
+ @spray_path = Redcar.app.focussed_window.focussed_notebook_tab_document.path
12
+ raise "No file, please select another tab" if @spray_path.nil?
13
+ @evaluator = SprayEvaluator.new(@spray_path)
14
+ @title = "Spray: #{File.basename(@spray_path)}"
15
+ @prompt= "(#{File.extname(@spray_path)})>"
16
+ @grammar_name= "Spray REPL"
17
+ super
18
+ end
19
+
20
+ def format_error(e)
21
+ backtrace= e.backtrace.reject{|l| l=~ /repl_mirror/}
22
+ backtrace.unshift("(repl):1")
23
+ "#{e.class}: #{e.message}" #\n '#{backtrace.join("'\n '")}'"
24
+ end
25
+
26
+ class SprayEvaluator
27
+
28
+ def initialize(path)
29
+ @binding = binding
30
+ @controller= case File.extname(path)
31
+ when '.rb' then RDebugController.new(path)
32
+ when '.java' then raise("Java support still not implemented")
33
+ else raise("Spray can't handle this file type")
34
+ end
35
+ @previous_file, @previous_line = path, 1
36
+ Redcar::Runnables.run_process(File.dirname(path), @controller.command, "SprayOutput")
37
+ end
38
+
39
+ def inspect; "SprayEvaluator"; end
40
+
41
+ def execute(command)
42
+ begin
43
+ retries=1
44
+ output= @controller.send_command(command)
45
+ @current_line, @current_file= @controller.current_position
46
+ Annotations.remove(@previous_file, @previous_line)
47
+ Annotations.set(@current_file, @current_line)
48
+ @previous_file, @previous_line = @current_file, @current_line
49
+ return output
50
+ rescue
51
+ (@controller.connect; retry) if 0 <= (retries-=1)
52
+ end
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,56 @@
1
+ ##
2
+ # Module for files being debugged
3
+ module SprayTabs
4
+
5
+ ##
6
+ # Sends and evaluates command with RDebug REPL
7
+ def self.send_to_repl(command)
8
+ tab= SprayTabs.find_first_matching_tab('Spray: ')
9
+ if tab.nil?
10
+ raise "Open a file and goto Plugins -> Spray -> Debug"
11
+ else
12
+ tab.edit_view.document.insert_at_cursor(command)
13
+ tab.edit_view.document.mirror.evaluate(command)
14
+ end
15
+ end
16
+
17
+ def self.set_current_tab(path, line)
18
+ tab= (SprayTabs.find_first_matching_tab(path) || SprayTabs.open_tab(path))
19
+ tab.focus
20
+ tab.document.scroll_to_line(line)
21
+ end
22
+
23
+ ##
24
+ # Returns nil when no matches
25
+ def self.find_first_matching_tab(path)
26
+ Redcar.app.focussed_window.all_tabs.select{|tab|
27
+ ((tab.document.path rescue nil) =~ /#{path}/) or
28
+ ((tab.document.title rescue nil) =~ /#{path}/)
29
+ }.first
30
+ end
31
+
32
+ ##
33
+ # Returns opened tab, or nil if file not exists
34
+ def self.open_tab(path)
35
+ if File.exist?(path)
36
+ tab = Redcar.app.focussed_window.new_tab(Redcar::EditTab)
37
+ mirror = Redcar::Project::FileMirror.new(path)
38
+ tab.edit_view.document.mirror = mirror
39
+ tab.edit_view.reset_undo
40
+ tab
41
+ end
42
+ end
43
+
44
+ def self.scroll_to(path, line)
45
+ tab= (SprayTabs.find_first_matching_tab(path) || SprayTabs.open_tab(path))
46
+ tab.edit_view.document.scroll_to_line(line)
47
+ end
48
+
49
+ def self.focussed_doc
50
+ Redcar.app.focussed_window.focussed_notebook_tab_document
51
+ end
52
+
53
+ def self.focussed_path; focussed_doc.path rescue nil; end
54
+
55
+ def self.focussed_line; (focussed_doc.cursor_line+1) rescue nil; end
56
+ end
@@ -0,0 +1,8 @@
1
+
2
+ Plugin.define do
3
+ name "spray"
4
+ version "0.1"
5
+ file "lib", "spray"
6
+ object "Redcar::Spray"
7
+ dependencies "redcar", ">0"
8
+ end
@@ -0,0 +1,13 @@
1
+
2
+ def hanoi(n,a,b,c)
3
+ if n-1 > 0
4
+ hanoi(n-1, a, c, b)
5
+ end
6
+ puts "Move disk %s to %s" % [a, b]
7
+ if n-1 > 0
8
+ hanoi(n-1, c, b, a)
9
+ end
10
+ end
11
+
12
+ hanoi(3, :a, :b, :c)
13
+ puts "Done!"
@@ -34,7 +34,7 @@ module Redcar
34
34
  if @path
35
35
  json = File.read(@path)
36
36
  else
37
- @path = project.path + "/.redcar/#{BOOKMARKS_FILE}"
37
+ @path = project.config_dir + "/#{BOOKMARKS_FILE}"
38
38
  json = JSON.generate({"bookmarks"=>[]})
39
39
  end
40
40
  bookmarks = JSON(json)["bookmarks"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: redcar-dev
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 6
5
- version: 0.12.7dev
5
+ version: 0.12.8dev
6
6
  platform: java
7
7
  authors:
8
8
  - Daniel Lucraft
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-12 00:00:00 +01:00
13
+ date: 2011-07-24 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -157,7 +157,7 @@ dependencies:
157
157
  type: :runtime
158
158
  version_requirements: *id013
159
159
  - !ruby/object:Gem::Dependency
160
- name: spoon
160
+ name: ruby-blockcache
161
161
  prerelease: false
162
162
  requirement: &id014 !ruby/object:Gem::Requirement
163
163
  none: false
@@ -168,7 +168,7 @@ dependencies:
168
168
  type: :runtime
169
169
  version_requirements: *id014
170
170
  - !ruby/object:Gem::Dependency
171
- name: ffi
171
+ name: spoon
172
172
  prerelease: false
173
173
  requirement: &id015 !ruby/object:Gem::Requirement
174
174
  none: false
@@ -179,7 +179,7 @@ dependencies:
179
179
  type: :runtime
180
180
  version_requirements: *id015
181
181
  - !ruby/object:Gem::Dependency
182
- name: cucumber
182
+ name: ffi
183
183
  prerelease: false
184
184
  requirement: &id016 !ruby/object:Gem::Requirement
185
185
  none: false
@@ -187,10 +187,10 @@ dependencies:
187
187
  - - ">="
188
188
  - !ruby/object:Gem::Version
189
189
  version: "0"
190
- type: :development
190
+ type: :runtime
191
191
  version_requirements: *id016
192
192
  - !ruby/object:Gem::Dependency
193
- name: rspec
193
+ name: cucumber
194
194
  prerelease: false
195
195
  requirement: &id017 !ruby/object:Gem::Requirement
196
196
  none: false
@@ -201,7 +201,7 @@ dependencies:
201
201
  type: :development
202
202
  version_requirements: *id017
203
203
  - !ruby/object:Gem::Dependency
204
- name: watchr
204
+ name: rspec
205
205
  prerelease: false
206
206
  requirement: &id018 !ruby/object:Gem::Requirement
207
207
  none: false
@@ -211,6 +211,17 @@ dependencies:
211
211
  version: "0"
212
212
  type: :development
213
213
  version_requirements: *id018
214
+ - !ruby/object:Gem::Dependency
215
+ name: watchr
216
+ prerelease: false
217
+ requirement: &id019 !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: "0"
223
+ type: :development
224
+ version_requirements: *id019
214
225
  description: ""
215
226
  email:
216
227
  - dan@fluentradical.com
@@ -3869,6 +3880,16 @@ files:
3869
3880
  - plugins/snippets/lib/snippets/tab_handler.rb
3870
3881
  - plugins/splash_screen/plugin.rb
3871
3882
  - plugins/splash_screen/splash_screen.rb
3883
+ - plugins/spray/foo.rb
3884
+ - plugins/spray/plugin.rb
3885
+ - plugins/spray/README
3886
+ - plugins/spray/lib/annotations.rb
3887
+ - plugins/spray/lib/spray.rb
3888
+ - plugins/spray/lib/spray_repl_mirror.rb
3889
+ - plugins/spray/lib/spray_tabs.rb
3890
+ - plugins/spray/lib/controllers/rdebug_controller.rb
3891
+ - plugins/spray/lib/controllers/rdebug_no_print.rb
3892
+ - plugins/spray/test/hanoi.rb
3872
3893
  - plugins/strip_trailing_spaces/plugin.rb
3873
3894
  - plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature
3874
3895
  - plugins/strip_trailing_spaces/features/fixtures/test.txt