redcar 0.3.0dev → 0.3.1dev

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 (434) hide show
  1. data/CHANGES +29 -3
  2. data/README.md +33 -0
  3. data/ROADMAP.md +23 -25
  4. data/Rakefile +58 -85
  5. data/bin/redcar +8 -2
  6. data/lib/freebase2/lib/freebase/readers.rb +8 -1
  7. data/lib/redcar.rb +22 -7
  8. data/lib/redcar/boot.rb +2 -5
  9. data/lib/redcar/{install.rb → installer.rb} +24 -22
  10. data/lib/redcar/ruby_extensions.rb +4 -0
  11. data/plugins/application/features/step_definitions/menu_steps.rb +12 -0
  12. data/plugins/application/features/step_definitions/tree_steps.rb +14 -2
  13. data/plugins/application/features/support/env.rb +4 -0
  14. data/plugins/application/lib/application.rb +48 -4
  15. data/plugins/application/lib/application/command.rb +4 -0
  16. data/plugins/application/lib/application/command/executor.rb +4 -1
  17. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +45 -0
  18. data/plugins/application/lib/application/menu.rb +17 -2
  19. data/plugins/application/lib/application/menu/builder.rb +18 -15
  20. data/plugins/application/lib/application/notebook.rb +28 -1
  21. data/plugins/application/lib/application/sensitivity.rb +10 -6
  22. data/plugins/application/lib/application/tab.rb +0 -1
  23. data/plugins/application/lib/application/treebook.rb +5 -0
  24. data/plugins/application/lib/application/window.rb +21 -1
  25. data/plugins/application/spec/application/menu/builder_spec.rb +0 -12
  26. data/plugins/application/spec/application/menu_spec.rb +14 -0
  27. data/plugins/application/spec/spec_helper.rb +2 -1
  28. data/plugins/application_swt/lib/application_swt.rb +9 -2
  29. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +128 -0
  30. data/plugins/application_swt/lib/application_swt/dialogs/no_buttons_dialog.rb +24 -0
  31. data/plugins/application_swt/lib/application_swt/menu.rb +3 -1
  32. data/plugins/application_swt/lib/application_swt/notebook.rb +20 -31
  33. data/plugins/application_swt/lib/application_swt/swt/listener_helpers.rb +20 -0
  34. data/plugins/application_swt/lib/application_swt/swt_wrapper.rb +11 -0
  35. data/plugins/application_swt/lib/application_swt/tab.rb +2 -1
  36. data/plugins/application_swt/lib/application_swt/window.rb +4 -6
  37. data/plugins/application_swt/spec/spec_helper.rb +4 -1
  38. data/plugins/core/lib/core.rb +21 -0
  39. data/plugins/core/lib/core/gui.rb +6 -1
  40. data/plugins/core/lib/core/observable.rb +7 -3
  41. data/plugins/core/lib/core/plugin/storage.rb +48 -0
  42. data/plugins/core/spec/core/storage_spec.rb +30 -0
  43. data/plugins/edit_view/features/step_definitions/editing_steps.rb +7 -0
  44. data/plugins/edit_view/features/step_definitions/notebook_steps.rb +4 -0
  45. data/plugins/edit_view/features/step_definitions/tab_steps.rb +24 -6
  46. data/plugins/edit_view/features/support/env.rb +4 -0
  47. data/plugins/edit_view/features/switch_tabs.feature +55 -0
  48. data/plugins/edit_view/features/undo_and_redo.feature +52 -0
  49. data/plugins/edit_view/lib/edit_view.rb +22 -12
  50. data/plugins/edit_view/lib/edit_view/command.rb +6 -0
  51. data/plugins/edit_view/lib/edit_view/document.rb +69 -8
  52. data/plugins/edit_view/lib/edit_view/edit_tab.rb +2 -1
  53. data/plugins/edit_view/spec/spec_helper.rb +2 -1
  54. data/plugins/edit_view_swt/lib/edit_view_swt.rb +36 -7
  55. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +42 -7
  56. data/plugins/project/features/open_and_save_files.feature +9 -0
  57. data/plugins/project/features/refresh_directory_tree.feature +37 -0
  58. data/plugins/project/features/step_definitions/directory_steps.rb +5 -1
  59. data/plugins/project/features/step_definitions/file_steps.rb +17 -0
  60. data/plugins/project/lib/project.rb +91 -20
  61. data/plugins/project/lib/project/dir_mirror.rb +10 -1
  62. data/plugins/project/lib/project/file_mirror.rb +2 -0
  63. data/plugins/project/lib/project/find_file_dialog.rb +86 -0
  64. data/plugins/project/lib/project/project_command.rb +5 -0
  65. data/plugins/project/spec/spec_helper.rb +2 -1
  66. data/plugins/redcar/plugin.yaml +0 -2
  67. data/plugins/redcar/redcar.rb +181 -14
  68. data/plugins/repl/lib/repl.rb +16 -8
  69. data/plugins/repl/lib/repl/internal_mirror.rb +3 -1
  70. data/plugins/repl/plugin.yaml +2 -2
  71. data/plugins/repl/spec/spec_helper.rb +2 -1
  72. data/plugins/tree/lib/tree.rb +5 -0
  73. data/plugins/tree/spec/spec_helper.rb +2 -1
  74. data/plugins/tree_view_swt/lib/tree_view_swt.rb +16 -0
  75. data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/Cucumber_Plain_Text_Feature.tmLanguage +186 -0
  76. data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/Cucumber_Steps.tmLanguage +249 -0
  77. data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/plaintext_template.erb +187 -0
  78. data/textmate/Bundles/Java.tmbundle/Syntaxes/Java.plist +1153 -0
  79. data/textmate/Bundles/Java.tmbundle/Syntaxes/JavaProperties.plist +70 -0
  80. data/textmate/Bundles/Java.tmbundle/Syntaxes/Java_Server_Pages___JSP__.tmLanguage +256 -0
  81. data/textmate/Bundles/Perl.tmbundle/Syntaxes/Perl.plist +3209 -0
  82. data/textmate/Bundles/RedcarRepl.tmbundle/Syntaxes/InternalRuby.plist +2 -0
  83. data/textmate/Bundles/Ruby on Rails.tmbundle/Syntaxes/HTML___Rails__.plist +92 -0
  84. data/textmate/Bundles/Ruby on Rails.tmbundle/Syntaxes/JavaScript___Rails__.tmLanguage +82 -0
  85. data/textmate/Bundles/Ruby on Rails.tmbundle/Syntaxes/RJS.tmLanguage +25 -0
  86. data/textmate/Bundles/Ruby on Rails.tmbundle/Syntaxes/Ruby_on_Rails.plist +288 -0
  87. data/textmate/Bundles/Ruby on Rails.tmbundle/Syntaxes/SQL___Rails__.plist +51 -0
  88. metadata +342 -651
  89. data/ext/extconf.rb +0 -18
  90. data/textmate/Bundles/C.tmbundle/Snippets/010_main_______main__.plist +0 -20
  91. data/textmate/Bundles/C.tmbundle/Snippets/030_for_int_loop___fori__.plist +0 -19
  92. data/textmate/Bundles/C.tmbundle/Snippets/Include_header_once_only_guard.plist +0 -28
  93. data/textmate/Bundles/C.tmbundle/Snippets/Typedef.tmSnippet +0 -16
  94. data/textmate/Bundles/C.tmbundle/Snippets/__1_begin_________1_end_______beginend__.plist +0 -16
  95. data/textmate/Bundles/C.tmbundle/Snippets/__endif.plist +0 -17
  96. data/textmate/Bundles/C.tmbundle/Snippets/__ifndef__________define__________endif.tmSnippet +0 -18
  97. data/textmate/Bundles/C.tmbundle/Snippets/__include________inc__.plist +0 -16
  98. data/textmate/Bundles/C.tmbundle/Snippets/__pragma_mark___mark__.plist +0 -21
  99. data/textmate/Bundles/C.tmbundle/Snippets/class______class__.plist +0 -24
  100. data/textmate/Bundles/C.tmbundle/Snippets/do___while_loop___do__.plist +0 -18
  101. data/textmate/Bundles/C.tmbundle/Snippets/fprintf_______.tmSnippet +0 -16
  102. data/textmate/Bundles/C.tmbundle/Snippets/if______if__.plist +0 -19
  103. data/textmate/Bundles/C.tmbundle/Snippets/namespace______namespace__.plist +0 -20
  104. data/textmate/Bundles/C.tmbundle/Snippets/next___include________Inc__.plist +0 -16
  105. data/textmate/Bundles/C.tmbundle/Snippets/printf______printf__.plist +0 -16
  106. data/textmate/Bundles/C.tmbundle/Snippets/read_file___readF__.plist +0 -23
  107. data/textmate/Bundles/C.tmbundle/Snippets/std____map___map__.plist +0 -16
  108. data/textmate/Bundles/C.tmbundle/Snippets/std____vector___v__.plist +0 -16
  109. data/textmate/Bundles/C.tmbundle/Snippets/struct.plist +0 -19
  110. data/textmate/Bundles/C.tmbundle/Snippets/template___typename________template__.plist +0 -16
  111. data/textmate/Bundles/CSS.tmbundle/Snippets/Fixed_Position_Bottom_100___wide_IE6.tmSnippet +0 -18
  112. data/textmate/Bundles/CSS.tmbundle/Snippets/__important_CSS_______.plist +0 -18
  113. data/textmate/Bundles/CSS.tmbundle/Snippets/background____color_image_repeat_attachment_position___background__.plist +0 -16
  114. data/textmate/Bundles/CSS.tmbundle/Snippets/background__attachment___scroll__fixed___background__.plist +0 -16
  115. data/textmate/Bundles/CSS.tmbundle/Snippets/background__color____color__hex___background__.plist +0 -16
  116. data/textmate/Bundles/CSS.tmbundle/Snippets/background__color____color__name___background__.plist +0 -16
  117. data/textmate/Bundles/CSS.tmbundle/Snippets/background__color____color__rgb___background__.plist +0 -16
  118. data/textmate/Bundles/CSS.tmbundle/Snippets/background__color____transparent___background__.plist +0 -16
  119. data/textmate/Bundles/CSS.tmbundle/Snippets/background__image____none___background__.plist +0 -16
  120. data/textmate/Bundles/CSS.tmbundle/Snippets/background__image____url___background__.plist +0 -16
  121. data/textmate/Bundles/CSS.tmbundle/Snippets/background__position____position___background__.plist +0 -16
  122. data/textmate/Bundles/CSS.tmbundle/Snippets/background__repeat____r__r__x__r__y__n__r___background__.plist +0 -16
  123. data/textmate/Bundles/CSS.tmbundle/Snippets/border_____size_style_color___border__.plist +0 -16
  124. data/textmate/Bundles/CSS.tmbundle/Snippets/border__bottom___size_style_color___border__.plist +0 -16
  125. data/textmate/Bundles/CSS.tmbundle/Snippets/border__bottom__color___size_style_color___border__.plist +0 -16
  126. data/textmate/Bundles/CSS.tmbundle/Snippets/border__bottom__style___size_style_color___border__.plist +0 -16
  127. data/textmate/Bundles/CSS.tmbundle/Snippets/border__bottom__width___size_style_color___border__.plist +0 -16
  128. data/textmate/Bundles/CSS.tmbundle/Snippets/border__color___color___border__.plist +0 -16
  129. data/textmate/Bundles/CSS.tmbundle/Snippets/border__left___size_style_color___border__.plist +0 -16
  130. data/textmate/Bundles/CSS.tmbundle/Snippets/border__left__color___color___border__.plist +0 -16
  131. data/textmate/Bundles/CSS.tmbundle/Snippets/border__left__style___style___border__.plist +0 -16
  132. data/textmate/Bundles/CSS.tmbundle/Snippets/border__left__width___size___border__.plist +0 -16
  133. data/textmate/Bundles/CSS.tmbundle/Snippets/border__right___size_style_color___border__.plist +0 -16
  134. data/textmate/Bundles/CSS.tmbundle/Snippets/border__right__color___color___border__.plist +0 -16
  135. data/textmate/Bundles/CSS.tmbundle/Snippets/border__right__style___style___border__.plist +0 -16
  136. data/textmate/Bundles/CSS.tmbundle/Snippets/border__right__width___size___border__.plist +0 -16
  137. data/textmate/Bundles/CSS.tmbundle/Snippets/border__style___style___border__.plist +0 -16
  138. data/textmate/Bundles/CSS.tmbundle/Snippets/border__top___size_style_color___border__.plist +0 -16
  139. data/textmate/Bundles/CSS.tmbundle/Snippets/border__top__color___color___border__.plist +0 -16
  140. data/textmate/Bundles/CSS.tmbundle/Snippets/border__top__style___style___border__.plist +0 -16
  141. data/textmate/Bundles/CSS.tmbundle/Snippets/border__top__width___size___border__.plist +0 -16
  142. data/textmate/Bundles/CSS.tmbundle/Snippets/border__width___width___border__.plist +0 -16
  143. data/textmate/Bundles/CSS.tmbundle/Snippets/clear___value___clear__.plist +0 -16
  144. data/textmate/Bundles/CSS.tmbundle/Snippets/color____color__hex___color__.plist +0 -16
  145. data/textmate/Bundles/CSS.tmbundle/Snippets/color____color__name___color__.plist +0 -16
  146. data/textmate/Bundles/CSS.tmbundle/Snippets/color____color__rgb___color__.plist +0 -16
  147. data/textmate/Bundles/CSS.tmbundle/Snippets/cursor___type___cursor__.plist +0 -16
  148. data/textmate/Bundles/CSS.tmbundle/Snippets/cursor___url___cursor__.plist +0 -16
  149. data/textmate/Bundles/CSS.tmbundle/Snippets/direction___ltr__rtl___direction__.plist +0 -16
  150. data/textmate/Bundles/CSS.tmbundle/Snippets/display___block___display__.plist +0 -16
  151. data/textmate/Bundles/CSS.tmbundle/Snippets/display___common__types___display__.plist +0 -16
  152. data/textmate/Bundles/CSS.tmbundle/Snippets/display___inline___display__.plist +0 -16
  153. data/textmate/Bundles/CSS.tmbundle/Snippets/display___table__types___display__.plist +0 -16
  154. data/textmate/Bundles/CSS.tmbundle/Snippets/filter___AlphaImageLoader___for_IE_PNGs_____background__.plist +0 -19
  155. data/textmate/Bundles/CSS.tmbundle/Snippets/float___left__right__none___float__.plist +0 -16
  156. data/textmate/Bundles/CSS.tmbundle/Snippets/font_____style_variant_weight_size__line__height_font___family___font__.plist +0 -16
  157. data/textmate/Bundles/CSS.tmbundle/Snippets/font___size_font___font__.plist +0 -16
  158. data/textmate/Bundles/CSS.tmbundle/Snippets/font__family_____family___font__.plist +0 -16
  159. data/textmate/Bundles/CSS.tmbundle/Snippets/font__size___size___font__.plist +0 -16
  160. data/textmate/Bundles/CSS.tmbundle/Snippets/font__style_____normal__italic__oblique___font__.plist +0 -16
  161. data/textmate/Bundles/CSS.tmbundle/Snippets/font__variant_____normal__small__caps___font__.plist +0 -16
  162. data/textmate/Bundles/CSS.tmbundle/Snippets/font__weight___weight___font__.plist +0 -16
  163. data/textmate/Bundles/CSS.tmbundle/Snippets/letter__spacing_____length__em___letter__.plist +0 -16
  164. data/textmate/Bundles/CSS.tmbundle/Snippets/letter__spacing_____length__px___letter__.plist +0 -16
  165. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style___type_position_image___list__.plist +0 -16
  166. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__image___url___list__.plist +0 -16
  167. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__position___pos___list__.plist +0 -16
  168. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__type___asian___list__.plist +0 -16
  169. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__type___marker__list__.plist +0 -16
  170. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__type___numeric___list__.plist +0 -16
  171. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__type___other___list__.plist +0 -16
  172. data/textmate/Bundles/CSS.tmbundle/Snippets/list__style__type___roman__alpha__greek___list__.plist +0 -16
  173. data/textmate/Bundles/CSS.tmbundle/Snippets/margin___T_R_B_L___margin__.plist +0 -16
  174. data/textmate/Bundles/CSS.tmbundle/Snippets/margin___V_H___margin__.plist +0 -16
  175. data/textmate/Bundles/CSS.tmbundle/Snippets/margin_____all___margin__.plist +0 -16
  176. data/textmate/Bundles/CSS.tmbundle/Snippets/margin__bottom___length___margin__.plist +0 -16
  177. data/textmate/Bundles/CSS.tmbundle/Snippets/margin__left___length___margin__.plist +0 -16
  178. data/textmate/Bundles/CSS.tmbundle/Snippets/margin__right___length___margin__.plist +0 -16
  179. data/textmate/Bundles/CSS.tmbundle/Snippets/margin__top___length___margin__.plist +0 -16
  180. data/textmate/Bundles/CSS.tmbundle/Snippets/marker__offset___auto___marker__.plist +0 -16
  181. data/textmate/Bundles/CSS.tmbundle/Snippets/marker__offset___length___marker__.plist +0 -16
  182. data/textmate/Bundles/CSS.tmbundle/Snippets/opacity_____for_Safari___FF_and_IE_____opacity__.plist +0 -18
  183. data/textmate/Bundles/CSS.tmbundle/Snippets/overflow___type___overflow__.plist +0 -16
  184. data/textmate/Bundles/CSS.tmbundle/Snippets/padding_____T_R_B_L___padding__.plist +0 -16
  185. data/textmate/Bundles/CSS.tmbundle/Snippets/padding_____V_H___padding__.plist +0 -16
  186. data/textmate/Bundles/CSS.tmbundle/Snippets/padding_____all___padding__.plist +0 -16
  187. data/textmate/Bundles/CSS.tmbundle/Snippets/padding__bottom___length___margin__.plist +0 -16
  188. data/textmate/Bundles/CSS.tmbundle/Snippets/padding__left___length___margin__.plist +0 -16
  189. data/textmate/Bundles/CSS.tmbundle/Snippets/padding__right___length___margin__.plist +0 -16
  190. data/textmate/Bundles/CSS.tmbundle/Snippets/padding__top___length___margin__.plist +0 -16
  191. data/textmate/Bundles/CSS.tmbundle/Snippets/position___type___position__.plist +0 -16
  192. data/textmate/Bundles/CSS.tmbundle/Snippets/properties_______________.plist +0 -19
  193. data/textmate/Bundles/CSS.tmbundle/Snippets/scrollbar.tmSnippet +0 -23
  194. data/textmate/Bundles/CSS.tmbundle/Snippets/selection.tmSnippet +0 -20
  195. data/textmate/Bundles/CSS.tmbundle/Snippets/text__align___left__center__right___txt__.plist +0 -16
  196. data/textmate/Bundles/CSS.tmbundle/Snippets/text__decoration___none__underline__overline__line__through__blink___text__.plist +0 -16
  197. data/textmate/Bundles/CSS.tmbundle/Snippets/text__indent___length___text__.plist +0 -16
  198. data/textmate/Bundles/CSS.tmbundle/Snippets/text__shadow___color__hex_x_y_blur___text__.plist +0 -16
  199. data/textmate/Bundles/CSS.tmbundle/Snippets/text__shadow___color__rgb_x_y_blur___text__.plist +0 -16
  200. data/textmate/Bundles/CSS.tmbundle/Snippets/text__shadow___none___text__.plist +0 -16
  201. data/textmate/Bundles/CSS.tmbundle/Snippets/text__transform___capitalize__upper__lower___text__.plist +0 -16
  202. data/textmate/Bundles/CSS.tmbundle/Snippets/text__transform___none___text__.plist +0 -16
  203. data/textmate/Bundles/CSS.tmbundle/Snippets/vertical__align___type___vertical__.plist +0 -16
  204. data/textmate/Bundles/CSS.tmbundle/Snippets/visibility___type___visibility__.plist +0 -16
  205. data/textmate/Bundles/CSS.tmbundle/Snippets/white__space____normal__pre__nowrap___white__.plist +0 -16
  206. data/textmate/Bundles/CSS.tmbundle/Snippets/word__spacing____length___word__.plist +0 -16
  207. data/textmate/Bundles/CSS.tmbundle/Snippets/word__spacing____normal___word__.plist +0 -16
  208. data/textmate/Bundles/CSS.tmbundle/Snippets/z__index___index___z__.plist +0 -16
  209. data/textmate/Bundles/HTML.tmbundle/Snippets/Arrow___arrow__.plist +0 -16
  210. data/textmate/Bundles/HTML.tmbundle/Snippets/Backspace___backspace__.plist +0 -16
  211. data/textmate/Bundles/HTML.tmbundle/Snippets/Backtab___backtab__.plist +0 -16
  212. data/textmate/Bundles/HTML.tmbundle/Snippets/Command___command__.plist +0 -16
  213. data/textmate/Bundles/HTML.tmbundle/Snippets/Control___control__.plist +0 -16
  214. data/textmate/Bundles/HTML.tmbundle/Snippets/Delete___delete__.plist +0 -16
  215. data/textmate/Bundles/HTML.tmbundle/Snippets/DocType_HTML_4_0_Strict.plist +0 -18
  216. data/textmate/Bundles/HTML.tmbundle/Snippets/DocType_XHTL_1_0_Frameset.plist +0 -18
  217. data/textmate/Bundles/HTML.tmbundle/Snippets/DocType_XHTML_1_0_Strict.plist +0 -18
  218. data/textmate/Bundles/HTML.tmbundle/Snippets/DocType_XHTML_1_0_Transitional.plist +0 -18
  219. data/textmate/Bundles/HTML.tmbundle/Snippets/DocType_XHTML_1_1.plist +0 -18
  220. data/textmate/Bundles/HTML.tmbundle/Snippets/Down___down__.plist +0 -16
  221. data/textmate/Bundles/HTML.tmbundle/Snippets/Embed_QT_movie___movie__.plist +0 -26
  222. data/textmate/Bundles/HTML.tmbundle/Snippets/Emphasize.tmSnippet +0 -16
  223. data/textmate/Bundles/HTML.tmbundle/Snippets/Enter___enter__.plist +0 -16
  224. data/textmate/Bundles/HTML.tmbundle/Snippets/Escape___escape__.plist +0 -16
  225. data/textmate/Bundles/HTML.tmbundle/Snippets/Fieldset.tmSnippet +0 -22
  226. data/textmate/Bundles/HTML.tmbundle/Snippets/HTML________4_0_Transitional___doctype__.plist +0 -18
  227. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer.tmSnippet +0 -16
  228. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_5_0_only.tmSnippet +0 -16
  229. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_5_5_only.tmSnippet +0 -16
  230. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_5_x.tmSnippet +0 -16
  231. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_6_and_below.tmSnippet +0 -16
  232. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_6_only.tmSnippet +0 -16
  233. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___Internet_Explorer_7__.tmSnippet +0 -16
  234. data/textmate/Bundles/HTML.tmbundle/Snippets/IE_Conditional_Comment___NOT_Internet_Explorer.tmSnippet +0 -16
  235. data/textmate/Bundles/HTML.tmbundle/Snippets/Input_with_Label.tmSnippet +0 -19
  236. data/textmate/Bundles/HTML.tmbundle/Snippets/Left___left__.plist +0 -16
  237. data/textmate/Bundles/HTML.tmbundle/Snippets/Option.tmSnippet +0 -18
  238. data/textmate/Bundles/HTML.tmbundle/Snippets/Option___option__.plist +0 -16
  239. data/textmate/Bundles/HTML.tmbundle/Snippets/Return___return__.plist +0 -16
  240. data/textmate/Bundles/HTML.tmbundle/Snippets/Right___right__.plist +0 -16
  241. data/textmate/Bundles/HTML.tmbundle/Snippets/Select_Box.tmSnippet +0 -22
  242. data/textmate/Bundles/HTML.tmbundle/Snippets/Shift___shift__.plist +0 -16
  243. data/textmate/Bundles/HTML.tmbundle/Snippets/Smart_return__indent_for_tag_pairs.plist +0 -18
  244. data/textmate/Bundles/HTML.tmbundle/Snippets/Strong.tmSnippet +0 -16
  245. data/textmate/Bundles/HTML.tmbundle/Snippets/Tab___tab__.plist +0 -16
  246. data/textmate/Bundles/HTML.tmbundle/Snippets/Up___up__.plist +0 -16
  247. data/textmate/Bundles/HTML.tmbundle/Snippets/Wrap_Selection_In_Tag.plist +0 -16
  248. data/textmate/Bundles/HTML.tmbundle/Snippets/Wrap_in___________________.plist +0 -14
  249. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML_____input__.plist +0 -16
  250. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML_____textarea__.plist +0 -16
  251. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___a_mailto_____.plist +0 -16
  252. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___base__.plist +0 -16
  253. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___body__.plist +0 -18
  254. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___br_____.plist +0 -16
  255. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___div__.plist +0 -18
  256. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___form__.plist +0 -20
  257. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___h1__.plist +0 -16
  258. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___head__.plist +0 -20
  259. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___link__.plist +0 -16
  260. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___meta__.plist +0 -16
  261. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___nbsp___NonBreakingSpace.plist +0 -16
  262. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___script__.plist +0 -18
  263. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___script_src_____.plist +0 -16
  264. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___style__.plist +0 -18
  265. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___table__.plist +0 -19
  266. data/textmate/Bundles/HTML.tmbundle/Snippets/XHTML___title__.plist +0 -16
  267. data/textmate/Bundles/HTML.tmbundle/Templates/HTML /342/200/223 4.0 Strict/index.html" +0 -15
  268. data/textmate/Bundles/HTML.tmbundle/Templates/HTML /342/200/223 4.0 Strict/info.plist" +0 -20
  269. data/textmate/Bundles/HTML.tmbundle/Templates/HTML /342/200/224 4.0 Transitional/index.html" +0 -15
  270. data/textmate/Bundles/HTML.tmbundle/Templates/HTML /342/200/224 4.0 Transitional/info.plist" +0 -20
  271. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Frameset/index.html" +0 -16
  272. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Frameset/info.plist" +0 -16
  273. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Strict/index.html" +0 -16
  274. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Strict/info.plist" +0 -16
  275. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Transitional/index.html" +0 -16
  276. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.0 Transitional/info.plist" +0 -16
  277. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.1/index.html" +0 -15
  278. data/textmate/Bundles/HTML.tmbundle/Templates/XHTML /342/200/223 1.1/info.plist" +0 -16
  279. data/textmate/Bundles/Ruby.tmbundle/Snippets/060_ruby_if_else.plist +0 -20
  280. data/textmate/Bundles/Ruby.tmbundle/Snippets/070_ruby_if.plist +0 -18
  281. data/textmate/Bundles/Ruby.tmbundle/Snippets/080_ruby_case.plist +0 -19
  282. data/textmate/Bundles/Ruby.tmbundle/Snippets/Add_____________Marker.tmSnippet +0 -16
  283. data/textmate/Bundles/Ruby.tmbundle/Snippets/Array_new__10________i____________Arr__.plist +0 -16
  284. data/textmate/Bundles/Ruby.tmbundle/Snippets/Benchmark_bmbm_______do____end.tmSnippet +0 -19
  285. data/textmate/Bundles/Ruby.tmbundle/Snippets/Dir__________.tmSnippet +0 -16
  286. data/textmate/Bundles/Ruby.tmbundle/Snippets/Dir_glob___________do___file______end____Dir__.plist +0 -16
  287. data/textmate/Bundles/Ruby.tmbundle/Snippets/File_foreach____________do___line______end____File__.plist +0 -16
  288. data/textmate/Bundles/Ruby.tmbundle/Snippets/File_open________________file________.tmSnippet +0 -16
  289. data/textmate/Bundles/Ruby.tmbundle/Snippets/File_read__________.tmSnippet +0 -16
  290. data/textmate/Bundles/Ruby.tmbundle/Snippets/Hash_new______hash___key___hash__key_______________Has__.plist +0 -16
  291. data/textmate/Bundles/Ruby.tmbundle/Snippets/Insert_ERb__s______________or_______________.tmSnippet +0 -16
  292. data/textmate/Bundles/Ruby.tmbundle/Snippets/Marshal_dump__obj___file______Md__.plist +0 -16
  293. data/textmate/Bundles/Ruby.tmbundle/Snippets/Marshal_load__obj______Ml__.plist +0 -16
  294. data/textmate/Bundles/Ruby.tmbundle/Snippets/PStore_new________.tmSnippet +0 -16
  295. data/textmate/Bundles/Ruby.tmbundle/Snippets/RDoc_documentation_block.tmSnippet +0 -20
  296. data/textmate/Bundles/Ruby.tmbundle/Snippets/Wrap_in_Begin________Rescue________End.plist +0 -23
  297. data/textmate/Bundles/Ruby.tmbundle/Snippets/YAML_dump_______file______Yd____.plist +0 -16
  298. data/textmate/Bundles/Ruby.tmbundle/Snippets/YAML_load__file______Yl____.plist +0 -16
  299. data/textmate/Bundles/Ruby.tmbundle/Snippets/__END__.tmSnippet +0 -17
  300. data/textmate/Bundles/Ruby.tmbundle/Snippets/______usr__local__bin__ruby___w.plist +0 -17
  301. data/textmate/Bundles/Ruby.tmbundle/Snippets/__yields___RDoc_comment.tmSnippet +0 -16
  302. data/textmate/Bundles/Ruby.tmbundle/Snippets/alias_method_______am__.plist +0 -16
  303. data/textmate/Bundles/Ruby.tmbundle/Snippets/all________e____________all__.plist +0 -16
  304. data/textmate/Bundles/Ruby.tmbundle/Snippets/any________e____________any__.plist +0 -16
  305. data/textmate/Bundles/Ruby.tmbundle/Snippets/application_code_______app__.plist +0 -18
  306. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert__________as__.plist +0 -16
  307. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_equal.tmSnippet +0 -16
  308. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_in_delta__________asid__.plist +0 -16
  309. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_instance_of__________asio__.plist +0 -16
  310. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_kind_of__________asko__.plist +0 -16
  311. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_match__________asm__.plist +0 -16
  312. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_nil__________asn__.plist +0 -16
  313. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_no_match__________asnm__.plist +0 -16
  314. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_not_equal__________asne__.plist +0 -16
  315. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_not_nil__________asnn__.plist +0 -16
  316. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_not_same__________asns__.plist +0 -16
  317. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_nothing_raised___________________asnr__.plist +0 -16
  318. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_nothing_thrown_____________asnt__.plist +0 -16
  319. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_operator__________aso__.plist +0 -16
  320. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_raise___________________asr__.plist +0 -16
  321. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_respond_to__________asrt__.plist +0 -16
  322. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_same__________ass__.plist +0 -16
  323. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_send__________ass__.plist +0 -16
  324. data/textmate/Bundles/Ruby.tmbundle/Snippets/assert_throws___________________ast__.plist +0 -16
  325. data/textmate/Bundles/Ruby.tmbundle/Snippets/attr_accessor_______rw__.plist +0 -16
  326. data/textmate/Bundles/Ruby.tmbundle/Snippets/attr_reader_______r__.plist +0 -16
  327. data/textmate/Bundles/Ruby.tmbundle/Snippets/attr_writer_______w__.plist +0 -16
  328. data/textmate/Bundles/Ruby.tmbundle/Snippets/class_______DelegateClass____initialize____end____class__.plist +0 -24
  329. data/textmate/Bundles/Ruby.tmbundle/Snippets/class_______ParentClass____initialize____end.plist +0 -22
  330. data/textmate/Bundles/Ruby.tmbundle/Snippets/class_______Struct____initialize____end.plist +0 -22
  331. data/textmate/Bundles/Ruby.tmbundle/Snippets/class_______Test____Unit____TestCase____end____tc__.plist +0 -24
  332. data/textmate/Bundles/Ruby.tmbundle/Snippets/class______self____end.tmSnippet +0 -18
  333. data/textmate/Bundles/Ruby.tmbundle/Snippets/class____end____cla__.plist +0 -18
  334. data/textmate/Bundles/Ruby.tmbundle/Snippets/class____initialize____end.plist +0 -22
  335. data/textmate/Bundles/Ruby.tmbundle/Snippets/class____instance_methods____undef____initialize____end____class__.plist +0 -30
  336. data/textmate/Bundles/Ruby.tmbundle/Snippets/class_from_name________clafn__.plist +0 -16
  337. data/textmate/Bundles/Ruby.tmbundle/Snippets/classify______e____________clas__.plist +0 -16
  338. data/textmate/Bundles/Ruby.tmbundle/Snippets/collect______e____________col__.plist +0 -16
  339. data/textmate/Bundles/Ruby.tmbundle/Snippets/deep_copy__________dee__.plist +0 -16
  340. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_delegator______defd__.plist +0 -16
  341. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_delegators______defds__.plist +0 -16
  342. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_end.plist +0 -18
  343. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_method_missing____end____mm__.plist +0 -18
  344. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_self____end____defs__.plist +0 -18
  345. data/textmate/Bundles/Ruby.tmbundle/Snippets/def_test_____end____t__.plist +0 -18
  346. data/textmate/Bundles/Ruby.tmbundle/Snippets/delete_if______e____________deli__.plist +0 -16
  347. data/textmate/Bundles/Ruby.tmbundle/Snippets/detect______e____________det__.plist +0 -16
  348. data/textmate/Bundles/Ruby.tmbundle/Snippets/directory____.tmSnippet +0 -16
  349. data/textmate/Bundles/Ruby.tmbundle/Snippets/do___obj______end___doo__.plist +0 -18
  350. data/textmate/Bundles/Ruby.tmbundle/Snippets/downto__0________n____________dow__.plist +0 -16
  351. data/textmate/Bundles/Ruby.tmbundle/Snippets/each______e____________ea__.plist +0 -16
  352. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_byte______byte____________eab__.plist +0 -16
  353. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_char______chr____________eac____.plist +0 -16
  354. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_cons____________group____________eac____.plist +0 -16
  355. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_index______i____________eai__.plist +0 -16
  356. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_key______key____________eak__.plist +0 -16
  357. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_line______line____________eal__.plist +0 -16
  358. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_pair______name___val____________eap__.plist +0 -16
  359. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_slice______group____________eas__.plist +0 -16
  360. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_value______val____________eav__.plist +0 -16
  361. data/textmate/Bundles/Ruby.tmbundle/Snippets/each_with_index______e___i____________eawi__.plist +0 -16
  362. data/textmate/Bundles/Ruby.tmbundle/Snippets/elsif____.tmSnippet +0 -17
  363. data/textmate/Bundles/Ruby.tmbundle/Snippets/embed_string_variable.plist +0 -16
  364. data/textmate/Bundles/Ruby.tmbundle/Snippets/extend_Forwardable____Forw__.plist +0 -16
  365. data/textmate/Bundles/Ruby.tmbundle/Snippets/fetch__name________key____________fet__.plist +0 -16
  366. data/textmate/Bundles/Ruby.tmbundle/Snippets/fill__range________i____________fil__.plist +0 -16
  367. data/textmate/Bundles/Ruby.tmbundle/Snippets/find______e____________fin__.plist +0 -16
  368. data/textmate/Bundles/Ruby.tmbundle/Snippets/find_all______e____________fina__.plist +0 -16
  369. data/textmate/Bundles/Ruby.tmbundle/Snippets/flatten_once____fla__.plist +0 -16
  370. data/textmate/Bundles/Ruby.tmbundle/Snippets/flunk__________fl__.plist +0 -16
  371. data/textmate/Bundles/Ruby.tmbundle/Snippets/grep____pattern__________match____________gre__.plist +0 -16
  372. data/textmate/Bundles/Ruby.tmbundle/Snippets/gsub________________match____________gsu__.plist +0 -16
  373. data/textmate/Bundles/Ruby.tmbundle/Snippets/hash_pair_______.plist +0 -16
  374. data/textmate/Bundles/Ruby.tmbundle/Snippets/hash_pointer.plist +0 -16
  375. data/textmate/Bundles/Ruby.tmbundle/Snippets/include_Comparable_______Comp__.plist +0 -20
  376. data/textmate/Bundles/Ruby.tmbundle/Snippets/include_Enumerable_______Enum__.plist +0 -20
  377. data/textmate/Bundles/Ruby.tmbundle/Snippets/inject__init________mem___var____________inj__.plist +0 -16
  378. data/textmate/Bundles/Ruby.tmbundle/Snippets/lambda______args____________lam__.plist +0 -16
  379. data/textmate/Bundles/Ruby.tmbundle/Snippets/loop_________.tmSnippet +0 -16
  380. data/textmate/Bundles/Ruby.tmbundle/Snippets/map______e____________map__.plist +0 -16
  381. data/textmate/Bundles/Ruby.tmbundle/Snippets/map_with_index______e___i____________mapwi__.plist +0 -16
  382. data/textmate/Bundles/Ruby.tmbundle/Snippets/max______a___b____________max__.plist +0 -16
  383. data/textmate/Bundles/Ruby.tmbundle/Snippets/min______a___b____________min__.plist +0 -16
  384. data/textmate/Bundles/Ruby.tmbundle/Snippets/module____ClassMethods____end.plist +0 -29
  385. data/textmate/Bundles/Ruby.tmbundle/Snippets/module____end.plist +0 -18
  386. data/textmate/Bundles/Ruby.tmbundle/Snippets/module____module_function____end.plist +0 -20
  387. data/textmate/Bundles/Ruby.tmbundle/Snippets/namespace______do____end.tmSnippet +0 -18
  388. data/textmate/Bundles/Ruby.tmbundle/Snippets/open____path__or__url_______w_____do___doc______end___ope__.plist +0 -16
  389. data/textmate/Bundles/Ruby.tmbundle/Snippets/open_yield_block_______.plist +0 -16
  390. data/textmate/Bundles/Ruby.tmbundle/Snippets/option_parse_____________optp__.plist +0 -43
  391. data/textmate/Bundles/Ruby.tmbundle/Snippets/partition______e____________par__.plist +0 -16
  392. data/textmate/Bundles/Ruby.tmbundle/Snippets/path_from_here________.tmSnippet +0 -16
  393. data/textmate/Bundles/Ruby.tmbundle/Snippets/randomize____ran__.plist +0 -16
  394. data/textmate/Bundles/Ruby.tmbundle/Snippets/reject______e____________rej__.plist +0 -16
  395. data/textmate/Bundles/Ruby.tmbundle/Snippets/require___________req__.plist +0 -16
  396. data/textmate/Bundles/Ruby.tmbundle/Snippets/require___tc____________ts__.plist +0 -20
  397. data/textmate/Bundles/Ruby.tmbundle/Snippets/require_gem_______.tmSnippet +0 -16
  398. data/textmate/Bundles/Ruby.tmbundle/Snippets/results_report_______________.tmSnippet +0 -16
  399. data/textmate/Bundles/Ruby.tmbundle/Snippets/reverse_each______e____________rea__.plist +0 -16
  400. data/textmate/Bundles/Ruby.tmbundle/Snippets/scan________________match____________sca__.plist +0 -16
  401. data/textmate/Bundles/Ruby.tmbundle/Snippets/select______e____________sel__.plist +0 -16
  402. data/textmate/Bundles/Ruby.tmbundle/Snippets/singleton_class____.tmSnippet +0 -16
  403. data/textmate/Bundles/Ruby.tmbundle/Snippets/sort______a___b____________sor__.plist +0 -16
  404. data/textmate/Bundles/Ruby.tmbundle/Snippets/sort_by______e____________sorb__.plist +0 -16
  405. data/textmate/Bundles/Ruby.tmbundle/Snippets/step__2________e____________ste__.plist +0 -16
  406. data/textmate/Bundles/Ruby.tmbundle/Snippets/sub________________match____________sub__.plist +0 -16
  407. data/textmate/Bundles/Ruby.tmbundle/Snippets/task___task_name__________dependent_____tasks___do____end.tmSnippet +0 -19
  408. data/textmate/Bundles/Ruby.tmbundle/Snippets/times______n____________tim__.plist +0 -16
  409. data/textmate/Bundles/Ruby.tmbundle/Snippets/transaction_________do____end.tmSnippet +0 -16
  410. data/textmate/Bundles/Ruby.tmbundle/Snippets/unix_filter______uni__.plist +0 -18
  411. data/textmate/Bundles/Ruby.tmbundle/Snippets/unless___unless__.plist +0 -18
  412. data/textmate/Bundles/Ruby.tmbundle/Snippets/until_____end.tmSnippet +0 -18
  413. data/textmate/Bundles/Ruby.tmbundle/Snippets/untitled.plist +0 -19
  414. data/textmate/Bundles/Ruby.tmbundle/Snippets/upto__1_0__0_0________n____________upt__.plist +0 -16
  415. data/textmate/Bundles/Ruby.tmbundle/Snippets/usage_if________usai__.plist +0 -18
  416. data/textmate/Bundles/Ruby.tmbundle/Snippets/usage_unless________usau__.plist +0 -18
  417. data/textmate/Bundles/Ruby.tmbundle/Snippets/when.plist +0 -17
  418. data/textmate/Bundles/Ruby.tmbundle/Snippets/while_____end.tmSnippet +0 -18
  419. data/textmate/Bundles/Ruby.tmbundle/Snippets/xmlread______.tmSnippet +0 -16
  420. data/textmate/Bundles/Ruby.tmbundle/Snippets/xpath_______________.tmSnippet +0 -18
  421. data/textmate/Bundles/Ruby.tmbundle/Snippets/zip__enums________row____________zip__.plist +0 -16
  422. data/textmate/Bundles/Source.tmbundle/Snippets/Continue_line_comment.plist +0 -35
  423. data/textmate/Bundles/Source.tmbundle/Snippets/Escaped_Quote_Pair_____________.plist +0 -14
  424. data/textmate/Bundles/Source.tmbundle/Snippets/Escaped_Single_Quote_Pair_____________.plist +0 -14
  425. data/textmate/Bundles/Source.tmbundle/Snippets/Frame_text.plist +0 -16
  426. data/textmate/Bundles/Source.tmbundle/Snippets/__n.plist +0 -16
  427. data/textmate/Bundles/Text.tmbundle/Snippets/010_Copyright.plist +0 -14
  428. data/textmate/Bundles/Text.tmbundle/Snippets/Conitnue_bullet.plist +0 -17
  429. data/textmate/Bundles/Text.tmbundle/Snippets/Conitnue_light_bullet.plist +0 -17
  430. data/textmate/Bundles/Text.tmbundle/Snippets/Conitnue_star_bullet.plist +0 -17
  431. data/textmate/Bundles/Text.tmbundle/Snippets/Insert_ISO_date.plist +0 -14
  432. data/textmate/Bundles/Text.tmbundle/Snippets/Lorem_ipsum.plist +0 -14
  433. data/textmate/Bundles/Text.tmbundle/Templates/Empty file/info.plist +0 -14
  434. data/textmate/Bundles/Text.tmbundle/Templates/From Clipboard/info.plist +0 -17
@@ -10,12 +10,28 @@ module Redcar
10
10
  include Redcar::Model
11
11
  include Redcar::Observable
12
12
 
13
+ extend Forwardable
14
+
15
+ class << self
16
+ attr_reader :undo_sensitivity, :redo_sensitivity
17
+ end
18
+
13
19
  def self.start
14
20
  Sensitivity.new(:edit_tab_focussed, Redcar.app, false, [:tab_focussed]) do |tab|
15
21
  tab and tab.is_a?(EditTab)
16
22
  end
23
+ @undo_sensitivity =
24
+ Sensitivity.new(:undoable, Redcar.app, false, [:focussed_tab_changed, :tab_focussed]) do
25
+ tab = Redcar.app.focussed_window.focussed_notebook.focussed_tab
26
+ tab and tab.is_a?(EditTab) and tab.edit_view.undoable?
27
+ end
28
+ @redo_sensitivity =
29
+ Sensitivity.new(:redoable, Redcar.app, false, [:focussed_tab_changed, :tab_focussed]) do
30
+ tab = Redcar.app.focussed_window.focussed_notebook.focussed_tab
31
+ tab and tab.is_a?(EditTab) and tab.edit_view.redoable?
32
+ end
17
33
  end
18
-
34
+
19
35
  attr_reader :document
20
36
 
21
37
  def initialize(tab)
@@ -33,17 +49,11 @@ module Redcar
33
49
  @tab.title = title
34
50
  end
35
51
 
36
- def cursor_offset=(offset)
37
- controller.cursor_offset = offset
38
- end
39
-
40
- def cursor_offset
41
- controller.cursor_offset
42
- end
43
-
44
- def scroll_to_line(line_index)
45
- controller.scroll_to_line(line_index)
46
- end
52
+ def_delegators :controller, :undo, :redo,
53
+ :undoable?, :redoable?,
54
+ :reset_undo,
55
+ :cursor_offset, :cursor_offset=,
56
+ :scroll_to_line
47
57
 
48
58
  def grammar
49
59
  @grammar
@@ -2,5 +2,11 @@ module Redcar
2
2
  class EditTabCommand < TabCommand
3
3
 
4
4
  sensitize :edit_tab_focussed
5
+
6
+ private
7
+
8
+ def doc
9
+ tab.edit_view.document
10
+ end
5
11
  end
6
12
  end
@@ -13,7 +13,8 @@ module Redcar
13
13
  def_delegators :controller,
14
14
  :length, :line_count, :to_s, :text=,
15
15
  :line_at_offset, :get_line, :offset_at_line,
16
- :insert, :cursor_offset, :cursor_offset=
16
+ :cursor_offset, :cursor_offset=,
17
+ :selection_range, :replace, :set_selection_range
17
18
 
18
19
  def self.register_controller_type(controller_type)
19
20
  unless controller_type.ancestors.include?(Document::Controller)
@@ -50,6 +51,7 @@ module Redcar
50
51
 
51
52
  def save!
52
53
  @mirror.commit(to_s)
54
+ set_modified(false)
53
55
  end
54
56
 
55
57
  def title
@@ -65,31 +67,90 @@ module Redcar
65
67
  update_from_mirror
66
68
  end
67
69
  end
68
-
70
+
69
71
  def verify_text(start_offset, end_offset, text)
70
- @change = [start_offset, end_offset, text]
72
+ @change = [start_offset, end_offset, text]
71
73
  @controllers[Controller::ModificationCallbacks].each do |controller|
72
74
  controller.before_modify(start_offset, end_offset, text)
73
75
  end
74
76
  end
75
-
77
+
76
78
  def modify_text
79
+ start_offset, end_offset, text = *@change
80
+ set_modified(true)
77
81
  @controllers[Controller::ModificationCallbacks].each do |controller|
78
82
  controller.after_modify
79
83
  end
80
84
  @controllers[Controller::NewlineCallback].each do |controller|
81
- if @change[2] == "\n"
82
- controller.after_newline(line_at_offset(@change[1]) + 1)
85
+ if text == "\n"
86
+ controller.after_newline(line_at_offset(start_offset) + 1)
83
87
  end
84
88
  end
85
- @change = nil
89
+ @change = nil
90
+ notify_listeners(:changed)
91
+ end
92
+
93
+ def about_to_be_changed(start_offset, length, text)
94
+ end
95
+
96
+ def changed(start_offset, length, text)
97
+ notify_listeners(:changed)
98
+ end
99
+
100
+ def cursor_line
101
+ line_at_offset(cursor_offset)
102
+ end
103
+
104
+ def selection?
105
+ selection_range.count > 0
106
+ end
107
+
108
+ def insert(offset, text)
109
+ replace(offset, 0, text)
110
+ end
111
+
112
+ def delete(offset, length)
113
+ replace(offset, length, "")
114
+ end
115
+
116
+ def replace_line(line_ix, text=nil)
117
+ text ||= yield(get_line(line_ix))
118
+ start_offset = offset_at_line(line_ix)
119
+ end_offset = offset_at_inner_end_of_line(line_ix)
120
+ replace(start_offset, end_offset - start_offset, text)
121
+ end
122
+
123
+ def offset_at_inner_end_of_line(line_ix)
124
+ if line_ix == line_count - 1
125
+ length
126
+ else
127
+ offset_at_line(line_ix + 1) - 1
128
+ end
86
129
  end
87
130
 
88
131
  private
89
132
 
90
133
  def update_from_mirror
91
134
  self.text = mirror.read
92
- @edit_view.title = mirror.title
135
+ @modified = false
136
+ @edit_view.title = title_with_star
137
+ end
138
+
139
+ def set_modified(boolean)
140
+ @modified = boolean
141
+ @edit_view.title = title_with_star
142
+ end
143
+
144
+ def title_with_star
145
+ if mirror
146
+ if @modified
147
+ "*" + mirror.title
148
+ else
149
+ mirror.title
150
+ end
151
+ else
152
+ "untitled"
153
+ end
93
154
  end
94
155
  end
95
156
  end
@@ -12,10 +12,11 @@ module Redcar
12
12
  def create_edit_view
13
13
  @edit_view = Redcar::EditView.new(self)
14
14
  @edit_view.add_listener(:focussed, &method(:edit_view_focussed))
15
+ @edit_view.document.add_listener(:changed) { notify_listeners(:changed, self) }
15
16
  end
16
17
 
17
18
  def edit_view_focussed
18
- notify_listeners(:focussed)
19
+ notify_listeners(:focus)
19
20
  end
20
21
 
21
22
  def serialize
@@ -1,4 +1,5 @@
1
1
  $:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
2
 
3
3
  require 'redcar'
4
- Redcar.require
4
+ Redcar.boot
5
+ Redcar.require_files
@@ -21,7 +21,7 @@ module Redcar
21
21
  def self.load_textmate_assets
22
22
  JavaMateView::Bundle.load_bundles(Redcar::ROOT + "/textmate/")
23
23
  JavaMateView::ThemeManager.load_themes(Redcar::ROOT + "/textmate/")
24
- end
24
+ end
25
25
 
26
26
  attr_reader :mate_text, :widget
27
27
 
@@ -38,6 +38,8 @@ module Redcar
38
38
  end
39
39
  @mate_text.set_grammar_by_name "Plain Text"
40
40
  @mate_text.set_theme_by_name(ARGV.option("theme") || "Twilight")
41
+ create_undo_manager
42
+ @document.attach_modification_listeners # comes after undo manager
41
43
  end
42
44
 
43
45
  def create_mate_text
@@ -52,7 +54,7 @@ module Redcar
52
54
  default_font_size = 15
53
55
  elsif Core.platform == :linux
54
56
  default_font = "Monospace"
55
- default_font_size = 14
57
+ default_font_size = 11
56
58
  elsif Core.platform == :windows
57
59
  default_font = "FixedSys"
58
60
  default_font_size = 15
@@ -72,11 +74,40 @@ module Redcar
72
74
  @model.controller = self
73
75
  end
74
76
 
77
+ def create_undo_manager
78
+ @undo_manager = JFace::Text::TextViewerUndoManager.new(100)
79
+ @undo_manager.connect(@mate_text.viewer)
80
+ end
81
+
82
+ def undo
83
+ @undo_manager.undo
84
+ EditView.undo_sensitivity.recompute
85
+ EditView.redo_sensitivity.recompute
86
+ end
87
+
88
+ def undoable?
89
+ @undo_manager.undoable
90
+ end
91
+
92
+ def redo
93
+ @undo_manager.redo
94
+ EditView.undo_sensitivity.recompute
95
+ EditView.redo_sensitivity.recompute
96
+ end
97
+
98
+ def redoable?
99
+ @undo_manager.redoable
100
+ end
101
+
102
+ def reset_undo
103
+ @undo_manager.reset
104
+ end
105
+
75
106
  def create_grammar_selector
76
107
  @combo = Swt::Widgets::Combo.new @widget, Swt::SWT::READ_ONLY
77
108
  bundles = JavaMateView::Bundle.bundles.to_a
78
- grammars = bundles.map{|b| b.grammars.to_a}.flatten
79
- items = grammars.map{|g| g.name}
109
+ grammars = bundles.map {|b| b.grammars.to_a}.flatten
110
+ items = grammars.map {|g| g.name}.sort_by {|name| name.downcase }
80
111
  @combo.items = items.to_java(:string)
81
112
 
82
113
  @mate_text.add_grammar_listener do |new_grammar|
@@ -84,7 +115,6 @@ module Redcar
84
115
  end
85
116
 
86
117
  @combo.add_selection_listener do |event|
87
- puts "selected #{@combo.text}"
88
118
  @mate_text.set_grammar_by_name(@combo.text)
89
119
  end
90
120
 
@@ -104,7 +134,6 @@ module Redcar
104
134
  end
105
135
 
106
136
  def swt_focus_gained
107
- # p [:swt_focus_gained, self.class]
108
137
  @model.gained_focus
109
138
  end
110
139
 
@@ -184,7 +213,7 @@ module Redcar
184
213
  @document, @obj = document, obj
185
214
  end
186
215
 
187
- def modify_text(_)
216
+ def modify_text(e)
188
217
  @document.modify_text
189
218
  end
190
219
  end
@@ -6,10 +6,14 @@ module Redcar
6
6
  attr_reader :swt_document
7
7
 
8
8
  def initialize(model, swt_document)
9
- @model = model
9
+ @model = model
10
10
  @swt_document = swt_document
11
11
  end
12
12
 
13
+ def attach_modification_listeners
14
+ jface.add_document_listener(DocumentListener.new(@model))
15
+ end
16
+
13
17
  def to_s
14
18
  @swt_document.get
15
19
  end
@@ -35,8 +39,17 @@ module Redcar
35
39
  jface.get(line_info.offset, line_info.length)
36
40
  end
37
41
 
38
- def insert(offset, text)
39
- jface.replace(offset, 0, text)
42
+ def replace(offset, length, text)
43
+ @model.verify_text(offset, offset+length, text)
44
+ jface.replace(offset, length, text)
45
+ @model.modify_text
46
+ end
47
+
48
+ def text=(text)
49
+ @model.verify_text(0, length, text)
50
+ jface.set(text)
51
+ @model.modify_text
52
+ notify_listeners(:set_text)
40
53
  end
41
54
 
42
55
  def cursor_offset
@@ -47,14 +60,36 @@ module Redcar
47
60
  @swt_document.styledText.set_caret_offset(offset)
48
61
  end
49
62
 
63
+ # Returns the offset range selected in the document. The start of the range is always
64
+ # before the end of the range, even if the selection is right-to-left
65
+ #
66
+ # @return [Range<Integer>] offset range
67
+ def selection_range
68
+ range = @swt_document.styledText.get_selection_range
69
+ range.x...(range.x + range.y)
70
+ end
71
+
72
+ def set_selection_range(start, _end)
73
+ @swt_document.styledText.set_selection(start, _end)
74
+ end
75
+
50
76
  def jface
51
77
  @swt_document.getJFaceDocument
52
78
  end
53
79
 
54
- def text=(text)
55
- @swt_document.set(text)
56
- notify_listeners(:set_text)
80
+ class DocumentListener
81
+ def initialize(model)
82
+ @model = model
83
+ end
84
+
85
+ def document_about_to_be_changed(e)
86
+ @model.about_to_be_changed(e.offset, e.length, e.text)
87
+ end
88
+
89
+ def document_changed(e)
90
+ @model.changed(e.offset, e.length, e.text)
91
+ end
57
92
  end
58
93
  end
59
94
  end
60
- end
95
+ end
@@ -5,6 +5,15 @@ Feature: Open and save files
5
5
  When I open a file
6
6
  Then there should be one edit tab
7
7
  And I should see "Wintersmith" in the edit tab
8
+
9
+ Scenario: Opening an already open file focusses the edit tab
10
+ Given I will choose "plugins/project/features/fixtures/winter.txt" from the "open_file" dialog
11
+ When I open a file
12
+ And I open a new edit tab
13
+ And I replace the contents with "Jenny Green Eyes"
14
+ And I open a file
15
+ Then there should be 2 edit tabs
16
+ And I should see "Wintersmith" in the edit tab
8
17
 
9
18
  Scenario: Save a file
10
19
  Given I have opened "plugins/project/features/fixtures/winter.txt"
@@ -0,0 +1,37 @@
1
+ Feature: Refresh directory tree
2
+
3
+ Scenario: Does not refresh instantly
4
+ Given I will choose "." from the "open_directory" dialog
5
+ When I open a directory
6
+ Then I should see "bin,config,lib,plugins" in the tree
7
+ And I should not see "testyfile.txt" in the tree
8
+ When I touch the file "./testyfile.txt"
9
+ Then I should not see "testyfile.txt" in the tree
10
+
11
+ Scenario: I can manually refresh the tree
12
+ Given I will choose "." from the "open_directory" dialog
13
+ When I open a directory
14
+ Then I should see "bin,config,lib,plugins" in the tree
15
+ And I should not see "testyfile.txt" in the tree
16
+ When I touch the file "./testyfile.txt"
17
+ And I refresh the directory tree
18
+ Then I should see "bin,config,lib,plugins,testyfile.txt" in the tree
19
+
20
+ Scenario: Changing windows refreshed the tree
21
+ Given I will choose "." from the "open_directory" dialog
22
+ When I open a directory
23
+ Then I should see "bin,config,lib,plugins" in the tree
24
+ And I should not see "testyfile.txt" in the tree
25
+ When I touch the file "./testyfile.txt"
26
+ When I open a new window
27
+ And I focus the window "Redcar" through the gui
28
+ Then I should see "bin,config,lib,plugins,testyfile.txt" in the tree
29
+
30
+ Scenario: Refreshing the tree leaves rows expanded as they were before
31
+ Given I will choose "." from the "open_directory" dialog
32
+ When I open a directory
33
+ And I expand the tree row "lib"
34
+ Then I should see "bin,config,lib,freebase2,plugins" in the tree
35
+ And I refresh the directory tree
36
+ Then I should see "bin,config,lib,freebase2,plugins" in the tree
37
+
@@ -1,4 +1,8 @@
1
1
 
2
2
  When /I open a directory/ do
3
3
  Redcar::Project::DirectoryOpenCommand.new.run
4
- end
4
+ end
5
+
6
+ When /^I refresh the directory tree$/ do
7
+ Redcar::Project.refresh_tree(Redcar.app.focussed_window)
8
+ end
@@ -15,6 +15,11 @@ When /^I save the tab$/ do
15
15
  Redcar::Project::FileSaveCommand.new.run
16
16
  end
17
17
 
18
+ When /^I touch the file "([^\"]*)"$/ do |fn|
19
+ FileUtils.touch(fn)
20
+ add_test_file(fn)
21
+ end
22
+
18
23
  When /^I save the tab as$/ do
19
24
  Redcar::Project::FileSaveAsCommand.new.run
20
25
  end
@@ -22,3 +27,15 @@ end
22
27
  Then /^the file "([^\"]*)" should contain "([^\"]*)"$/ do |arg1, arg2|
23
28
  File.read(arg1).should == arg2
24
29
  end
30
+
31
+ def add_test_file(fn)
32
+ (@test_files ||= []) << File.expand_path(fn)
33
+ end
34
+
35
+ def remove_test_files
36
+ (@test_files||[]).each { |fn| FileUtils.rm_f(fn) }
37
+ end
38
+
39
+ After do
40
+ remove_test_files
41
+ end