arcadia 0.8.1 → 0.9.0

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 (163) hide show
  1. data/README +28 -22
  2. data/bin/arcadia +3 -3
  3. data/conf/arcadia.conf +87 -36
  4. data/conf/arcadia.res.rb +143 -5
  5. data/conf/theme-dark.conf +94 -0
  6. data/conf/theme-dark.res.rb +218 -0
  7. data/ext/ae-breakpoints/ae-breakpoints.rb +1 -0
  8. data/ext/ae-dir-projects/ae-dir-projects.rb +37 -9
  9. data/ext/ae-editor/ae-editor.conf +10 -9
  10. data/ext/ae-editor/ae-editor.rb +306 -127
  11. data/ext/ae-editor/langs/pers.lang.bind +1 -0
  12. data/ext/ae-editor/langs/rb.lang +6 -6
  13. data/ext/ae-editor/langs/tcl.lang +3 -0
  14. data/ext/ae-file-history/ae-file-history.rb +4 -11
  15. data/ext/ae-output/ae-output.rb +57 -38
  16. data/ext/ae-rad/ae-rad-inspector.rb +1 -1
  17. data/ext/ae-rad/ae-rad-palette.rb +2 -2
  18. data/ext/ae-rad/ae-rad.rb +7 -7
  19. data/ext/ae-rad/lib/tk/al-tk.rb +3 -3
  20. data/ext/ae-rad/lib/tk/al-tkcustom.rb +2 -2
  21. data/ext/ae-ruby-debug/ae-ruby-debug.conf +20 -1
  22. data/ext/ae-ruby-debug/ae-ruby-debug.rb +69 -65
  23. data/ext/ae-search-in-files/ae-search-in-files.rb +2 -17
  24. data/ext/ae-shell/ae-shell.conf +7 -6
  25. data/ext/ae-shell/ae-shell.rb +211 -32
  26. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.conf +11 -0
  27. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +109 -0
  28. data/lib/a-commons.rb +74 -16
  29. data/lib/a-contracts.rb +18 -1
  30. data/lib/a-core.rb +410 -77
  31. data/lib/a-tkcommons.rb +338 -138
  32. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ArrowButton.html +0 -0
  33. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/BWidget.html +2 -2
  34. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Button.html +0 -0
  35. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ButtonBox.html +0 -0
  36. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ComboBox.html +0 -0
  37. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Dialog.html +0 -0
  38. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/DragSite.html +0 -0
  39. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/DropSite.html +0 -0
  40. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/DynamicHelp.html +0 -0
  41. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Entry.html +0 -0
  42. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Label.html +0 -0
  43. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/LabelEntry.html +0 -0
  44. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/LabelFrame.html +0 -0
  45. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ListBox.html +1 -4
  46. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/MainFrame.html +0 -0
  47. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/MessageDlg.html +0 -0
  48. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/NoteBook.html +0 -0
  49. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/PagesManager.html +0 -0
  50. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/PanedWindow.html +0 -0
  51. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/PanelFrame.html +0 -0
  52. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/PasswdDlg.html +0 -0
  53. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ProgressBar.html +0 -0
  54. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ProgressDlg.html +0 -0
  55. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ScrollView.html +0 -0
  56. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ScrollableFrame.html +0 -0
  57. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/ScrolledWindow.html +0 -0
  58. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/SelectColor.html +0 -0
  59. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/SelectFont.html +0 -0
  60. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Separator.html +0 -0
  61. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/SpinBox.html +0 -0
  62. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/StatusBar.html +0 -0
  63. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/TitleFrame.html +0 -0
  64. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Tree.html +0 -0
  65. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/Widget.html +0 -0
  66. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/contents.html +0 -0
  67. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/index.html +0 -0
  68. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/navtree.html +0 -0
  69. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/BWman/options.htm +0 -0
  70. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/CHANGES.txt +0 -0
  71. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/ChangeLog +70 -0
  72. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/LICENSE.txt +0 -0
  73. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/README.txt +0 -0
  74. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/arrow.tcl +0 -0
  75. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/bitmap.tcl +0 -0
  76. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/button.tcl +0 -0
  77. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/buttonbox.tcl +0 -0
  78. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/color.tcl +0 -0
  79. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/combobox.tcl +4 -4
  80. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/basic.tcl +0 -0
  81. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/bwidget.xbm +0 -0
  82. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/demo.tcl +0 -0
  83. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/dnd.tcl +0 -0
  84. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/manager.tcl +0 -0
  85. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/select.tcl +0 -0
  86. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/tmpldlg.tcl +0 -0
  87. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/tree.tcl +0 -0
  88. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/demo/x1.xbm +0 -0
  89. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/dialog.tcl +0 -0
  90. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/dragsite.tcl +0 -0
  91. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/dropsite.tcl +0 -0
  92. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/dynhelp.tcl +25 -18
  93. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/entry.tcl +0 -0
  94. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/font.tcl +0 -0
  95. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/bold.gif +0 -0
  96. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/copy.gif +0 -0
  97. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/cut.gif +0 -0
  98. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/dragfile.gif +0 -0
  99. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/dragicon.gif +0 -0
  100. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/error.gif +0 -0
  101. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/file.gif +0 -0
  102. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/folder.gif +0 -0
  103. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/hourglass.gif +0 -0
  104. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/info.gif +0 -0
  105. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/italic.gif +0 -0
  106. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/minus.xbm +0 -0
  107. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/new.gif +0 -0
  108. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/opcopy.xbm +0 -0
  109. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/open.gif +0 -0
  110. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/openfold.gif +0 -0
  111. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/oplink.xbm +0 -0
  112. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/opmove.xbm +0 -0
  113. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/overstrike.gif +0 -0
  114. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/palette.gif +0 -0
  115. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/passwd.gif +0 -0
  116. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/paste.gif +0 -0
  117. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/plus.xbm +0 -0
  118. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/print.gif +0 -0
  119. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/question.gif +0 -0
  120. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/redo.gif +0 -0
  121. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/save.gif +0 -0
  122. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/target.xbm +0 -0
  123. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/underline.gif +0 -0
  124. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/undo.gif +0 -0
  125. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/images/warning.gif +0 -0
  126. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/init.tcl +0 -0
  127. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/label.tcl +0 -0
  128. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/labelentry.tcl +0 -0
  129. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/labelframe.tcl +0 -0
  130. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/da.rc +0 -0
  131. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/de.rc +0 -0
  132. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/en.rc +0 -0
  133. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/es.rc +0 -0
  134. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/fr.rc +0 -0
  135. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/hu.rc +0 -0
  136. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/nl.rc +0 -0
  137. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/lang/no.rc +0 -0
  138. data/tcl/BWidget-1.9.2/lang/pl.rc +104 -0
  139. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/listbox.tcl +68 -35
  140. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/mainframe.tcl +0 -0
  141. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/messagedlg.tcl +0 -0
  142. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/notebook.tcl +2 -2
  143. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/pagesmgr.tcl +0 -0
  144. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/panedw.tcl +0 -0
  145. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/panelframe.tcl +0 -0
  146. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/passwddlg.tcl +0 -0
  147. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/pkgIndex.tcl +2 -2
  148. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/progressbar.tcl +0 -0
  149. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/progressdlg.tcl +0 -0
  150. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/scrollframe.tcl +0 -0
  151. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/scrollview.tcl +0 -0
  152. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/scrollw.tcl +0 -0
  153. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/separator.tcl +0 -0
  154. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/spinbox.tcl +0 -0
  155. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/statusbar.tcl +0 -0
  156. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/tests/entry.test +0 -0
  157. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/titleframe.tcl +0 -0
  158. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/tree.tcl +6 -1
  159. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/utils.tcl +27 -7
  160. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/widget.tcl +0 -0
  161. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/wizard.tcl +0 -0
  162. data/tcl/{BWidget-1.9.0 → BWidget-1.9.2}/xpm2image.tcl +0 -0
  163. metadata +162 -153
@@ -7,9 +7,9 @@
7
7
 
8
8
  require 'tk'
9
9
  require 'tktext'
10
- require 'lib/a-tkcommons'
10
+ require "#{Dir.pwd}/lib/a-tkcommons"
11
11
  #require 'lib/a-commons'
12
- require 'lib/a-core'
12
+ require "#{Dir.pwd}/lib/a-core"
13
13
 
14
14
  class TreeNode
15
15
  attr_reader :sons
@@ -230,24 +230,48 @@ class SafeCompleteCode
230
230
  process_source
231
231
  end
232
232
 
233
+ # def dot_trip(_var_name)
234
+ # ret = "_class=#{_var_name}.class.name\n"
235
+ # ret = ret +" _methods=#{_var_name}.methods\n"
236
+ # ret = ret +"owner_on = Method.instance_methods.include?('owner')\n"
237
+ # ret = ret + "_methods.each{|m|\n"
238
+ # ret = ret + "meth = #{_var_name}.method(m)\n"
239
+ # ret = ret +"if owner_on\n"
240
+ # ret = ret +"_owner=meth.owner.name\n"
241
+ # ret = ret +"else\n"
242
+ # ret = ret +"meth_insp = meth.inspect\n"
243
+ # ret = ret +"to_sub ='#<Method:\s'+_class\n"
244
+ # ret = ret +"_owner=meth_insp.sub(to_sub,'').split('#')[0].strip.sub('(','').sub(')','')\n"
245
+ # ret = ret +"_owner=_class if _owner.strip.length==0\n"
246
+ # ret = ret +"end\n"
247
+ # ret = ret + "if _owner != _class\n"
248
+ # ret = ret + "print _owner+'#'+m+'#'+meth.arity.to_s+'\n'\n"
249
+ # ret = ret +"else\n"
250
+ # ret = ret + "print ''+'#'+m+'#'+meth.arity.to_s+'\n'\n"
251
+ # ret = ret +"end\n"
252
+ # ret = ret + "}\n"
253
+ # ret = ret + "exit\n"
254
+ # ret
255
+ # end
256
+
233
257
  def dot_trip(_var_name)
234
258
  ret = "_class=#{_var_name}.class.name\n"
235
- ret = ret +" _methods=#{_var_name}.methods\n"
259
+ ret = ret +"_methods=#{_var_name}.methods\n"
236
260
  ret = ret +"owner_on = Method.instance_methods.include?('owner')\n"
237
- ret = ret + "_methods.each{|m|\n"
238
- ret = ret + "meth = #{_var_name}.method(m)\n"
261
+ ret = ret +"_methods.each{|m|\n"
262
+ ret = ret +"meth = #{_var_name}.method(m)\n"
239
263
  ret = ret +"if owner_on\n"
240
- ret = ret +"_owner=meth.owner.name\n"
264
+ ret = ret +" _owner=meth.owner.name\n"
241
265
  ret = ret +"else\n"
242
- ret = ret +"meth_insp = meth.inspect\n"
243
- ret = ret +"to_sub ='#<Method:\s'+_class\n"
244
- ret = ret +"_owner=meth_insp.sub(to_sub,'').split('#')[0].strip.sub('(','').sub(')','')\n"
245
- ret = ret +"_owner=_class if _owner.strip.length==0\n"
266
+ ret = ret +" meth_insp = meth.inspect\n"
267
+ ret = ret +" to_sub ='#<Method:\s'+_class\n"
268
+ ret = ret +" _owner=meth_insp.sub(to_sub,'').split('#')[0].strip.sub('(','').sub(')','')\n"
269
+ ret = ret +" _owner=_class if _owner.strip.length==0\n"
246
270
  ret = ret +"end\n"
247
- ret = ret + "if _owner != _class\n"
248
- ret = ret + "print _owner+'#'+m+'#'+meth.arity.to_s+'\n'\n"
271
+ ret = ret +"if _owner != _class\n"
272
+ ret = ret +' print %Q{#{_owner}##{m}##{meth.arity.to_s}\n}'+"\n"
249
273
  ret = ret +"else\n"
250
- ret = ret + "print ''+'#'+m+'#'+meth.arity.to_s+'\n'\n"
274
+ ret = ret +' print %Q{##{m}##{meth.arity.to_s}\n}'+"\n"
251
275
  ret = ret +"end\n"
252
276
  ret = ret + "}\n"
253
277
  ret = ret + "exit\n"
@@ -490,12 +514,11 @@ class SafeCompleteCode
490
514
 
491
515
  def candidates(_show_error = false)
492
516
  temp_file = create_modified_temp_file(@file)
493
- begin
494
- Arcadia.is_windows??ruby='rubyw':ruby='ruby'
517
+ begin
518
+ Arcadia.is_windows??ruby='rubyw':ruby='ruby'
495
519
  _cmp_s = "|#{ruby} '#{temp_file}'"
496
520
  _ret = nil
497
- open(_cmp_s,"r") do
498
- |f|
521
+ open(_cmp_s,"r") do |f|
499
522
  _ret = f.readlines.collect!{| line |
500
523
  #line.chomp
501
524
  line.strip
@@ -509,11 +532,11 @@ class SafeCompleteCode
509
532
  }
510
533
  end
511
534
  _ret.sort
512
- rescue Exception => e
535
+ rescue Exception => e
513
536
  #Arcadia.console(self, 'msg'=>e.to_s, 'level'=>'error')
514
- ensure
515
- File.delete(temp_file) if File.exist?(temp_file)
516
- end
537
+ ensure
538
+ File.delete(temp_file) if File.exist?(temp_file)
539
+ end
517
540
  end
518
541
 
519
542
  def create_modified_temp_file(_base_file=nil)
@@ -546,12 +569,12 @@ end
546
569
  #end
547
570
 
548
571
 
549
- class TkTextListBox < TkScrollText
572
+ class TkTextListBox < TkText
550
573
  def initialize(parent=nil, keys={})
551
574
  super(parent, keys)
552
575
  wrap 'none'
553
- tag_configure('selected','background' =>'#bbd9b1','borderwidth'=>1, 'relief'=>'raised')
554
- tag_configure('class', 'foreground' => '#3398cb')
576
+ tag_configure('selected','background' =>Arcadia.conf('hightlight.sel.background'),'borderwidth'=>1, 'relief'=>'raised')
577
+ tag_configure('class', 'foreground' => Arcadia.conf('hightlight.sel.foreground'))
555
578
  @count = 0
556
579
  @selected = -1
557
580
  self.bind_append('KeyPress'){|e| key_press(e)}
@@ -638,7 +661,7 @@ class AgEditorOutlineToolbar
638
661
  indicatoron 0
639
662
  offrelief 'raised'
640
663
  image TkPhotoImage.new('dat' => SYNCICON20_GIF)
641
- place('x' => 0,'y' => 0,'height' => 26)
664
+ place('x' => 0,'y' => 0,'height' => 26, 'width' => 26)
642
665
  }
643
666
  Tk::BWidget::DynamicHelp::add(@cb_sync,
644
667
  'text'=>'Link open editors with content in the Navigator')
@@ -756,31 +779,31 @@ class AgEditorOutline
756
779
  @bar.sync = sync_val
757
780
  end
758
781
  }
759
- @tree_exp = Tk::BWidget::Tree.new(_frame, Arcadia.style('treepanel')){
782
+ @tree_exp = BWidgetTreePatched.new(_frame, Arcadia.style('treepanel')){
760
783
  showlines false
761
784
  deltay 18
762
785
  dragenabled true
763
786
  selectcommand proc{ _tree_goto.call(self) }
764
787
  }
765
- @tree_scroll_wrapper = TkScrollWidget.new(@tree_exp)
788
+ @tree_exp.extend(TkScrollableWidget)
766
789
  self.show
767
- @tree_scroll_wrapper.show_v_scroll
768
- @tree_scroll_wrapper.show_h_scroll
769
790
  pop_up_menu_tree
770
791
  end
771
792
 
772
793
  def destroy
773
- @tree_scroll_wrapper.destroy
794
+ #@tree_scroll_wrapper.destroy
774
795
  @tree_exp.destroy
775
796
  end
776
797
 
777
798
  def show
778
- @tree_scroll_wrapper.show(0,26)
799
+ #@tree_scroll_wrapper.show(0,26)
800
+ @tree_exp.show(0,26)
779
801
  Tk.update
780
802
  end
781
803
 
782
804
  def hide
783
- @tree_scroll_wrapper.hide
805
+ @tree_exp.hide
806
+ #@tree_scroll_wrapper.hide
784
807
  end
785
808
 
786
809
  def build_tree_from_node(_node, _label_match=nil)
@@ -847,8 +870,10 @@ class AgEditorOutline
847
870
  def pop_up_menu_tree
848
871
  @pop_up_tree = TkMenu.new(
849
872
  :parent=>@tree_exp,
873
+ :tearoff=>0,
850
874
  :title => 'Menu tree'
851
875
  )
876
+ @pop_up_tree.extend(TkAutoPostMenu)
852
877
  @pop_up_tree.configure(Arcadia.style('menu'))
853
878
  #Arcadia.instance.main_menu.update_style(@pop_up_tree)
854
879
  @pop_up_tree.insert('end',
@@ -857,7 +882,7 @@ class AgEditorOutline
857
882
  :hidemargin => false,
858
883
  :command=> proc{build_tree}
859
884
  )
860
- @tree_exp.bind_append("Button-3",
885
+ @tree_exp.areabind_append("Button-3",
861
886
  proc{|x,y|
862
887
  _x = TkWinfo.pointerx(@tree_exp)
863
888
  _y = TkWinfo.pointery(@tree_exp)
@@ -936,10 +961,12 @@ class AgEditor
936
961
  #@text.tag_configure('debug', 'background' =>'#b9c6d9', 'borderwidth'=>1 ,'relief'=>'raise')
937
962
  @buffer = text_value
938
963
  pop_up_menu
939
- @text.show
940
- @text.show_v_scroll
941
- @text.show_h_scroll
942
- @text_cursor = @text.cget('cursor')
964
+ @text.extend(TkScrollableWidget).show
965
+ begin
966
+ @text_cursor = @text.cget('cursor')
967
+ rescue RuntimeError => e
968
+ p "RuntimeError : #{e.message}"
969
+ end
943
970
  end
944
971
 
945
972
  def create_temp_file
@@ -1080,10 +1107,7 @@ class AgEditor
1080
1107
  })
1081
1108
 
1082
1109
  @raised_listbox = TkTextListBox.new(@raised_listbox_frame, {
1083
- :takefocus=>true,
1084
- :selectbackground=>Arcadia.conf('hightlight.1.background'),
1085
- :selectforeground=>Arcadia.conf('hightlight.1.foreground')}.update(Arcadia.style('listbox'))
1086
- )
1110
+ :takefocus=>true}.update(Arcadia.style('listbox')))
1087
1111
  _char_height = @font_metrics[2][1]
1088
1112
  _width = 0
1089
1113
  _docs_entries = Hash.new
@@ -1181,8 +1205,7 @@ class AgEditor
1181
1205
  _buffer = @text.get(_begin_index, 'insert')
1182
1206
  _buffer_ini_length = _buffer.length
1183
1207
  @raised_listbox_frame.place('x'=>_xroot,'y'=>_yroot, 'width'=>_width, 'height'=>_height)
1184
- @raised_listbox.show(0,0,'inside')
1185
- @raised_listbox.show_v_scroll
1208
+ @raised_listbox.extend(TkScrollableWidget).show(0,0,'inside')
1186
1209
  @raised_listbox.focus
1187
1210
  #@raised_listbox.activate(0)
1188
1211
  @raised_listbox.select(1)
@@ -1418,21 +1441,22 @@ class AgEditor
1418
1441
  @text.insert(_row.to_s+'.0',suf)
1419
1442
  end
1420
1443
  when 'U'
1421
- _r = @text.tag_ranges('sel')
1422
- _row_begin = _r[0][0].split('.')[0].to_i
1423
- _row_end = _r[_r.length - 1][1].split('.')[0].to_i
1424
- n_space = $arcadia['conf']['editor.tab-replace-width-space'].to_i
1425
- if n_space > 0
1426
- suf = "\s"*n_space
1427
- else
1428
- suf = "\t"
1429
- end
1430
- _l_suf = suf.length.to_s
1431
- for _row in _row_begin..._row_end
1432
- if @text.get(_row.to_s+'.0',_row.to_s+'.'+_l_suf) == suf
1433
- @text.delete(_row.to_s+'.0',_row.to_s+'.'+_l_suf)
1434
- end
1435
- end
1444
+ decrease_indent
1445
+ # _r = @text.tag_ranges('sel')
1446
+ # _row_begin = _r[0][0].split('.')[0].to_i
1447
+ # _row_end = _r[_r.length - 1][1].split('.')[0].to_i
1448
+ # n_space = $arcadia['conf']['editor.tab-replace-width-space'].to_i
1449
+ # if n_space > 0
1450
+ # suf = "\s"*n_space
1451
+ # else
1452
+ # suf = "\t"
1453
+ # end
1454
+ # _l_suf = suf.length.to_s
1455
+ # for _row in _row_begin..._row_end
1456
+ # if @text.get(_row.to_s+'.0',_row.to_s+'.'+_l_suf) == suf
1457
+ # @text.delete(_row.to_s+'.0',_row.to_s+'.'+_l_suf)
1458
+ # end
1459
+ # end
1436
1460
  when 'C'
1437
1461
  _r = @text.tag_ranges('sel')
1438
1462
  _row_begin = _r[0][0].split('.')[0].to_i
@@ -1541,7 +1565,7 @@ class AgEditor
1541
1565
 
1542
1566
  @text.bind_append("Shift-KeyPress"){|e|
1543
1567
  case e.keysym
1544
- when 'Tab'
1568
+ when 'Tab','ISO_Left_Tab'
1545
1569
  _r = @text.tag_ranges('sel')
1546
1570
  if _r && _r[0]
1547
1571
  _row_begin = _r[0][0].split('.')[0].to_i
@@ -1565,6 +1589,24 @@ class AgEditor
1565
1589
  }
1566
1590
  end
1567
1591
 
1592
+ def decrease_indent
1593
+ _r = @text.tag_ranges('sel')
1594
+ _row_begin = _r[0][0].split('.')[0].to_i
1595
+ _row_end = _r[_r.length - 1][1].split('.')[0].to_i
1596
+ n_space = $arcadia['conf']['editor.tab-replace-width-space'].to_i
1597
+ if n_space > 0
1598
+ suf = "\s"*n_space
1599
+ else
1600
+ suf = "\t"
1601
+ end
1602
+ _l_suf = suf.length.to_s
1603
+ for _row in _row_begin..._row_end
1604
+ if @text.get(_row.to_s+'.0',_row.to_s+'.'+_l_suf) == suf
1605
+ @text.delete(_row.to_s+'.0',_row.to_s+'.'+_l_suf)
1606
+ end
1607
+ end
1608
+ end
1609
+
1568
1610
  # show the "find in file" dialog
1569
1611
  def find
1570
1612
  _r = @text.tag_ranges('sel')
@@ -1617,21 +1659,15 @@ class AgEditor
1617
1659
 
1618
1660
  def run_buffer
1619
1661
  if !@file
1620
- _file = create_temp_file
1621
- begin
1622
- _event = Arcadia.process_event(RunRubyFileEvent.new(self, 'file'=>_file, 'persistent'=>false))
1623
- ensure
1624
- _event.add_finalize_callback(proc{File.delete(_file) if File.exist?(_file)})
1625
- # File.delete(_file) if File.exist?(_file)
1626
- end
1662
+ Arcadia.process_event(RunCmdEvent.new(self, {'file'=>'*CURR', 'runner_name'=>'ruby_file', 'persistent'=>false}))
1627
1663
  else
1628
1664
  save if !@read_only
1629
- Arcadia.process_event(RunRubyFileEvent.new(self, 'file'=>@file, 'persistent'=>true))
1665
+ Arcadia.process_event(RunCmdEvent.new(self, {'file'=>@file}))
1630
1666
  end
1631
1667
  end
1632
1668
 
1633
1669
  def initialize_line_number(_frame)
1634
- @text_line_num = TkText.new(_frame, Arcadia.style('linepanel')){
1670
+ @text_line_num = TkText.new(_frame, Arcadia.style('textline')){
1635
1671
  wrap 'none'
1636
1672
  #relief 'flat'
1637
1673
  undo false
@@ -1692,6 +1728,7 @@ class AgEditor
1692
1728
  :tearoff=>0,
1693
1729
  :title => 'Menu'
1694
1730
  )
1731
+ _pop_up.extend(TkAutoPostMenu)
1695
1732
  _pop_up.configure(Arcadia.style('menu'))
1696
1733
  #Arcadia.instance.main_menu.update_style(@pop_up)
1697
1734
  _title_item = _pop_up.insert('end',
@@ -1784,15 +1821,21 @@ class AgEditor
1784
1821
  end
1785
1822
  end
1786
1823
 
1787
- def reset_highlight
1788
- @is_line_bold.clear
1789
- @highlight_zone.clear if @highlighting
1824
+ def reset_highlight(_from_row=nil)
1825
+ if _from_row && @highlighting
1826
+ invalidated_begin_zone= zone_of_row(_from_row)
1827
+ @is_line_bold.delete_if {|key, value| key >= invalidated_begin_zone }
1828
+ @highlight_zone.delete_if {|key, value| key >= invalidated_begin_zone }
1829
+ elsif @highlighting
1830
+ @is_line_bold.clear
1831
+ @highlight_zone.clear
1832
+ end
1790
1833
  @last_line_begin=0
1791
1834
  @last_line_end=0
1792
1835
  @last_zone_begin=0
1793
1836
  @last_zone_end=0
1794
1837
  end
1795
-
1838
+
1796
1839
  def change_highlight(_ext)
1797
1840
  new_highlight_scanner = @controller.highlight_scanner(_ext)
1798
1841
  if new_highlight_scanner != @highlight_scanner
@@ -1864,39 +1907,66 @@ class AgEditor
1864
1907
  if @lang_hash["#{@lang_hash['scanner']}.hightlight."+_name+'.borderwidth']
1865
1908
  h['borderwidth']=@lang_hash["#{@lang_hash['scanner']}.hightlight."+_name+'.borderwidth']
1866
1909
  end
1867
- @text.tag_configure(_name, h)
1910
+ begin
1911
+ @text.tag_configure(_name, h)
1912
+ rescue RuntimeError => e
1913
+ p "RuntimeError : #{e.message}"
1914
+ end
1868
1915
  end
1869
1916
 
1870
1917
 
1871
1918
  def do_tag_configure_global(_name)
1872
1919
  h = Hash.new
1873
- if $arcadia['conf']['editor.hightlight.'+_name+'.foreground']
1874
- h['foreground']=$arcadia['conf']['editor.hightlight.'+_name+'.foreground']
1920
+
1921
+ if Arcadia.conf('editor.hightlight.'+_name+'.foreground')
1922
+ h['foreground']=Arcadia.conf('editor.hightlight.'+_name+'.foreground')
1923
+ elsif Arcadia.conf('hightlight.'+_name+'.foreground')
1924
+ h['foreground']=Arcadia.conf('hightlight.'+_name+'.foreground')
1875
1925
  end
1876
- if $arcadia['conf']['editor.hightlight.'+_name+'.background']
1877
- h['background']=$arcadia['conf']['editor.hightlight.'+_name+'.background']
1926
+
1927
+ if Arcadia.conf('editor.hightlight.'+_name+'.background')
1928
+ h['background']=Arcadia.conf('editor.hightlight.'+_name+'.background')
1929
+ elsif Arcadia.conf('hightlight.'+_name+'.background')
1930
+ h['background']=Arcadia.conf('hightlight.'+_name+'.background')
1878
1931
  end
1879
- if $arcadia['conf']['editor.hightlight.'+_name+'.style']== 'bold'
1932
+
1933
+ if Arcadia.conf('editor.hightlight.'+_name+'.style')== 'bold'
1934
+ h['font']=@font_bold
1935
+ @is_tag_bold[_name]= true
1936
+ elsif Arcadia.conf('hightlight.'+_name+'.style')== 'bold'
1880
1937
  h['font']=@font_bold
1881
1938
  @is_tag_bold[_name]= true
1882
1939
  else
1883
1940
  @is_tag_bold[_name]= false
1884
1941
  end
1885
- if $arcadia['conf']['editor.hightlight.'+_name+'.relief']
1886
- h['relief']=$arcadia['conf']['editor.hightlight.'+_name+'.relief']
1942
+
1943
+ if Arcadia.conf('editor.hightlight.'+_name+'.relief')
1944
+ h['relief']=Arcadia.conf('editor.hightlight.'+_name+'.relief')
1945
+ elsif Arcadia.conf('hightlight.'+_name+'.relief')
1946
+ h['relief']=Arcadia.conf('hightlight.'+_name+'.relief')
1947
+ end
1948
+
1949
+ if Arcadia.conf('editor.hightlight.'+_name+'.borderwidth')
1950
+ h['borderwidth']=Arcadia.conf('editor.hightlight.'+_name+'.borderwidth')
1951
+ elsif Arcadia.conf('hightlight.'+_name+'.borderwidth')
1952
+ h['borderwidth']=Arcadia.conf('hightlight.'+_name+'.borderwidth')
1887
1953
  end
1888
- if $arcadia['conf']['editor.hightlight.'+_name+'.borderwidth']
1889
- h['borderwidth']=$arcadia['conf']['editor.hightlight.'+_name+'.borderwidth']
1954
+
1955
+ begin
1956
+ @text.tag_configure(_name, h)
1957
+ rescue RuntimeError => e
1958
+ p "RuntimeError : #{e.message}"
1890
1959
  end
1891
- @text.tag_configure(_name, h)
1892
1960
  end
1893
1961
 
1962
+
1894
1963
  def pop_up_menu
1895
1964
  @pop_up = TkMenu.new(
1896
1965
  :parent=>@text,
1897
- :tearoff=>1,
1966
+ :tearoff=>0,
1898
1967
  :title => 'Menu'
1899
1968
  )
1969
+ @pop_up.extend(TkAutoPostMenu)
1900
1970
  @pop_up.configure(Arcadia.style('menu'))
1901
1971
 
1902
1972
  @pop_up.insert('end',
@@ -1997,7 +2067,8 @@ class AgEditor
1997
2067
  :label=>'Color',
1998
2068
  :hidemargin => false,
1999
2069
  :command=> proc{
2000
- @text.insert('insert',Tk.chooseColor)
2070
+ #@text.insert('insert',Tk.chooseColor)
2071
+ @text.insert('insert',Tk::BWidget::SelectColor::Dialog.new.create)
2001
2072
  }
2002
2073
  )
2003
2074
 
@@ -2103,6 +2174,7 @@ class AgEditor
2103
2174
  :tearoff=>0,
2104
2175
  :title => 'Debug'
2105
2176
  )
2177
+ _sub_debug.extend(TkAutoPostMenu)
2106
2178
  _sub_debug.configure(Arcadia.style('menu'))
2107
2179
  _sub_debug.insert('end',
2108
2180
  :command,
@@ -2134,6 +2206,7 @@ class AgEditor
2134
2206
  :tearoff=>0,
2135
2207
  :title => 'Code'
2136
2208
  )
2209
+ _sub_code.extend(TkAutoPostMenu)
2137
2210
  _sub_code.configure(Arcadia.style('menu'))
2138
2211
  _sub_code.insert('end',
2139
2212
  :command,
@@ -2487,9 +2560,13 @@ class AgEditor
2487
2560
  @controller.change_tab_set_modify(@page_frame)
2488
2561
  end
2489
2562
  end
2563
+
2564
+ def tab_title
2565
+ @controller.tab_title(@page_frame)
2566
+ end
2490
2567
 
2491
- def reset_modify
2492
- @controller.change_tab_reset_modify(@page_frame)
2568
+ def reset_modify(_reset_tab=true)
2569
+ @controller.change_tab_reset_modify(@page_frame) if _reset_tab
2493
2570
  @set_mod = false
2494
2571
  @file_last_access_time = File.mtime(@file) if @file
2495
2572
  end
@@ -2572,6 +2649,7 @@ class AgEditor
2572
2649
  else
2573
2650
  _tags << 'normal_case'
2574
2651
  end
2652
+
2575
2653
  if wrap_on
2576
2654
  w_rx_b, w_ry_b, w_width_b, w_heigth_b = @text.bbox("#{(j).to_s}.0");
2577
2655
  w_rx_e, w_ry_e, w_width_e, w_heigth_e = @text.bbox("#{(j).to_s}.0 lineend");
@@ -2584,6 +2662,7 @@ class AgEditor
2584
2662
  end
2585
2663
  end
2586
2664
  end
2665
+
2587
2666
  @text_line_num.insert(_index, "#{nline}\n",_tags)
2588
2667
  if b.include?(j.to_s)
2589
2668
  add_tag_breakpoint(j)
@@ -2594,12 +2673,15 @@ class AgEditor
2594
2673
  end
2595
2674
  end
2596
2675
  refresh_outline if Tk.focus==@text
2597
- resize_line_num(line_end)
2676
+ resize_line_num
2598
2677
  end
2599
2678
 
2600
- def resize_line_num(_line_end=nil)
2679
+ def resize_line_num
2601
2680
  if TkWinfo.mapped?(@text_line_num)
2602
- _line_end=@text.index('@0,'+TkWinfo.height(@text).to_s).split('.')[0].to_i + 1 if _line_end.nil?
2681
+ if @last_line_end_chars.nil?
2682
+ @last_line_end_chars = 0
2683
+ end
2684
+ _line_end=row('end')
2603
2685
  line_end_chars = _line_end.to_s.length
2604
2686
  if @last_line_end_chars != line_end_chars
2605
2687
  if @line_num_rx_e.nil?
@@ -2733,12 +2815,12 @@ class AgEditor
2733
2815
  f = File.new(@file, "wb")
2734
2816
  begin
2735
2817
  if f
2736
- to_write = text_value
2737
- if @dos_line_endings
2738
- # we stripped these out, previously...
2739
- # for now assume they want them all this way, no mixing and matching...
2740
- to_write = to_write.gsub("\n", "\r\n")
2741
- end
2818
+ to_write = text_value
2819
+ if @dos_line_endings
2820
+ # we stripped these out, previously...
2821
+ # for now assume they want them all this way, no mixing and matching...
2822
+ to_write = to_write.gsub("\n", "\r\n")
2823
+ end
2742
2824
  f.syswrite(to_write)
2743
2825
  @buffer = text_value
2744
2826
  reset_modify
@@ -2881,13 +2963,6 @@ class AgEditor
2881
2963
  @outline = nil
2882
2964
  end
2883
2965
 
2884
- def file_extension(_filename=nil)
2885
- if _filename
2886
- _m = /(.*\.)(.*$)/.match(File.basename(_filename))
2887
- end
2888
- _ret = (_m && _m.length > 1)?_m[2]: nil
2889
- end
2890
-
2891
2966
  def load_file(_filename = nil)
2892
2967
  #if filename is nil then open a new tab
2893
2968
  @loading=true
@@ -2905,7 +2980,7 @@ class AgEditor
2905
2980
  }
2906
2981
  end
2907
2982
  set_read_only(!File.stat(_filename).writable?)
2908
- reset
2983
+ reset(false)
2909
2984
  refresh
2910
2985
  ensure
2911
2986
  @loading=false
@@ -2925,9 +3000,9 @@ class AgEditor
2925
3000
  end
2926
3001
  end
2927
3002
 
2928
- def reset
3003
+ def reset(_reset_tab=true)
2929
3004
  @buffer = text_value
2930
- reset_modify
3005
+ reset_modify(_reset_tab)
2931
3006
  @text.edit_reset
2932
3007
  end
2933
3008
 
@@ -3129,25 +3204,112 @@ class AgMultiEditor < ArcadiaExt
3129
3204
  @tabs_editor =Hash.new
3130
3205
  Arcadia.attach_listener(self, BufferEvent)
3131
3206
  Arcadia.attach_listener(self, DebugEvent)
3132
- Arcadia.attach_listener(self, RunRubyFileEvent)
3133
- # Arcadia.attach_listener(self, StartDebugEvent)
3207
+ # Arcadia.attach_listener(self, RunRubyFileEvent)
3208
+ Arcadia.attach_listener(self, RunCmdEvent)
3209
+ # Arcadia.attach_listener(self, StartDebugEvent)
3134
3210
  Arcadia.attach_listener(self, FocusEvent)
3135
3211
  end
3136
3212
 
3137
3213
 
3138
- def on_before_run_ruby_file(_event)
3214
+ # def on_before_run_ruby_file(_event)
3215
+ # _filename = _event.file
3216
+ # if _filename.nil?
3217
+ # current_editor = self.raised
3218
+ # if current_editor
3219
+ # if current_editor.file
3220
+ # _event.file = current_editor.file
3221
+ # _event.persistent = true
3222
+ # else
3223
+ # _event.file = current_editor.create_temp_file
3224
+ # end
3225
+ # end
3226
+ # end
3227
+ # end
3228
+
3229
+ def on_before_run_cmd(_event)
3139
3230
  _filename = _event.file
3140
- if _filename.nil?
3231
+ _event.persistent = true
3232
+ if _filename.nil? || _filename == "*CURR"
3141
3233
  current_editor = self.raised
3142
- if current_editor
3143
- if current_editor.file
3144
- _event.file = current_editor.file
3145
- _event.persistent = true
3146
- else
3147
- _event.file = current_editor.create_temp_file
3148
- end
3149
- end
3234
+ if current_editor
3235
+ if current_editor.file
3236
+ _event.file = current_editor.file
3237
+ else
3238
+ _event.persistent = false
3239
+ _event.file = current_editor.create_temp_file
3240
+ _event.title = current_editor.tab_title
3241
+ end
3242
+ end
3243
+ # here insert persistent entry of runner instance
3244
+ bn = File.basename(_event.file)
3245
+ if _event.persistent && _event.runner_name && Arcadia.persistent("runners.#{bn}").nil?
3246
+ entry_hash = Hash.new
3247
+ entry_hash[:runner]= _event.runner_name
3248
+ entry_hash[:file]= _event.file
3249
+ entry_hash[:dir]= _event.dir if _event.dir
3250
+ entry_hash[:title]= "#{bn}"
3251
+
3252
+ Arcadia.persistent("runners.#{bn}", entry_hash.to_s)
3253
+ # here add new menu' item
3254
+ mr = Arcadia.menu_root('runcurr')
3255
+ if mr
3256
+ _command = proc{
3257
+ _event = Arcadia.process_event(
3258
+ RunCmdEvent.new(self, entry_hash)
3259
+ )
3260
+ }
3261
+ exts = ''
3262
+ run = Application.runner(entry_hash[:runner])
3263
+ if run
3264
+ file_exts = run[:file_exts]
3265
+ end
3266
+
3267
+ mr.insert('0',
3268
+ :command ,{
3269
+ :image => Arcadia.file_icon(file_exts),
3270
+ :label => entry_hash[:title],
3271
+ :compound => 'left',
3272
+ :command => _command
3273
+ }
3274
+ )
3275
+ end
3276
+ end
3150
3277
  end
3278
+
3279
+ if _event.file == "*LAST"
3280
+ _event.file = Arcadia.persistent('run.file.last')
3281
+ _event.cmd = Arcadia.persistent('run.cmd.last')
3282
+ else
3283
+ if _event.dir.nil?
3284
+ _event.dir = File.dirname(_event.file)
3285
+ end
3286
+
3287
+ if _event.cmd.nil?
3288
+ if _event.runner_name
3289
+ runner = Arcadia.runner(_event.runner_name)
3290
+ else
3291
+ runner = Arcadia.runner_for_file(_event.file)
3292
+ end
3293
+ if runner
3294
+ _event.cmd = runner[:cmd]
3295
+ else
3296
+ _event.cmd = _event.file
3297
+ end
3298
+ end
3299
+ if _event.file && _event.cmd.include?('<<FILE>>')
3300
+ _event.cmd = _event.cmd.gsub('<<FILE>>',_event.file)
3301
+ end
3302
+ if _event.dir && _event.cmd.include?('<<DIR>>')
3303
+ _event.cmd = _event.cmd.gsub('<<DIR>>',_event.dir)
3304
+ end
3305
+ if _event.file && _event.cmd.include?('<<FILE_BASENAME_WITHOUT_EXT>>')
3306
+ _event.cmd = _event.cmd.gsub('<<FILE_BASENAME_WITHOUT_EXT>>',File.basename(_event.file).split('.')[0])
3307
+ end
3308
+ if _event.file && _event.cmd.include?('<<FILE_BASENAME>>')
3309
+ _event.cmd = _event.cmd.gsub('<<FILE_BASENAME>>',File.basename(_event.file))
3310
+ end
3311
+ end
3312
+ _event.title = _event.file if _event.title.nil?
3151
3313
  end
3152
3314
 
3153
3315
  # def on_before_start_debug(_event)
@@ -3189,6 +3351,7 @@ class AgMultiEditor < ArcadiaExt
3189
3351
  line_begin_index = raised.text.index('@0,0')
3190
3352
  line_begin = line_begin_index.split('.')[0].to_i
3191
3353
  line_end = raised.text.index('@0,'+TkWinfo.height(raised.text).to_s).split('.')[0].to_i + 1
3354
+ raised.reset_highlight(line_begin)
3192
3355
  raised.rehighlightlines(line_begin,line_end,true)
3193
3356
  else
3194
3357
  raised.check_modify
@@ -3257,6 +3420,7 @@ class AgMultiEditor < ArcadiaExt
3257
3420
  :tearoff=>0,
3258
3421
  :title => 'Menu'
3259
3422
  )
3423
+ @pop_up.extend(TkAutoPostMenu)
3260
3424
  @pop_up.configure(Arcadia.style('menu'))
3261
3425
  #Arcadia.instance.main_menu.update_style(@pop_up)
3262
3426
 
@@ -3688,15 +3852,21 @@ class AgMultiEditor < ArcadiaExt
3688
3852
  change_tab_title(_tab, _new_name)
3689
3853
  end
3690
3854
 
3855
+ def tab_title(_tab)
3856
+ @main_frame.enb.itemcget(page_name(_tab), 'text')
3857
+ end
3858
+
3691
3859
  def page_name(_page_frame)
3692
3860
  TkWinfo.appname(_page_frame).sub('f','')
3693
3861
  end
3694
3862
 
3695
3863
  def change_tab_reset_modify(_tab)
3696
3864
  #_new_name = @main_frame.enb.itemcget(@tabs_name[_tab], 'text').gsub!("(...)",'')
3697
- _new_name = @main_frame.enb.itemcget(page_name(_tab), 'text').gsub!("(...)",'')
3698
- if _new_name
3699
- change_tab_title(_tab, _new_name)
3865
+ if @main_frame.enb.index(page_name(_tab))
3866
+ _new_name = @main_frame.enb.itemcget(page_name(_tab), 'text').gsub!("(...)",'')
3867
+ if _new_name
3868
+ change_tab_title(_tab, _new_name)
3869
+ end
3700
3870
  end
3701
3871
  end
3702
3872
 
@@ -3747,7 +3917,7 @@ class AgMultiEditor < ArcadiaExt
3747
3917
 
3748
3918
  def open_file_in_debug(_filename=nil, _line=nil)
3749
3919
  #debug_reset
3750
- if _filename && _line
3920
+ if _filename && _line && File.exists?(_filename)
3751
3921
  @last_index = _line.to_s+'.0'
3752
3922
  _editor_exist = editor_exist?(_filename)
3753
3923
  @last_e = open_file(_filename, @last_index, false, false)
@@ -3759,6 +3929,8 @@ class AgMultiEditor < ArcadiaExt
3759
3929
  #p "add editor for close #{_filename}"
3760
3930
  @last_e.do_line_update
3761
3931
  end
3932
+ else
3933
+ p "file #{_filename} do not exist !"
3762
3934
  end
3763
3935
  end
3764
3936
 
@@ -3823,9 +3995,11 @@ class AgMultiEditor < ArcadiaExt
3823
3995
  def raise_file(_filename=nil, _pos=nil)
3824
3996
  if _filename && frame_def_visible?
3825
3997
  tab_name=self.tab_file_name(_filename)
3826
- @main_frame.enb.move(tab_name,_pos) if _pos
3827
- @main_frame.enb.raise(tab_name)
3828
- @main_frame.enb.see(tab_name)
3998
+ if @main_frame.enb.index(tab_name) != -1
3999
+ @main_frame.enb.move(tab_name,_pos) if _pos
4000
+ @main_frame.enb.raise(tab_name)
4001
+ @main_frame.enb.see(tab_name)
4002
+ end
3829
4003
  end
3830
4004
  end
3831
4005
 
@@ -3846,7 +4020,12 @@ class AgMultiEditor < ArcadiaExt
3846
4020
  open_buffer(_tab_name, _basefilename,0)
3847
4021
  end
3848
4022
  @tabs_editor[_tab_name].reset_highlight
3849
- @tabs_editor[_tab_name].load_file(_filename)
4023
+ begin
4024
+ @tabs_editor[_tab_name].load_file(_filename)
4025
+ rescue RuntimeError => e
4026
+ p "RuntimeError : #{e.message}"
4027
+ close_editor(@tabs_editor[_tab_name])
4028
+ end
3850
4029
  end
3851
4030
 
3852
4031
  if _text_index != nil && _text_index != '1.0'
@@ -3886,7 +4065,7 @@ class AgMultiEditor < ArcadiaExt
3886
4065
  'raisecmd'=>proc{do_buffer_raise(_buffer_name, _title)}
3887
4066
  )
3888
4067
  _e = AgEditor.new(self, _tab)
3889
- ext = _e.file_extension(_title)
4068
+ ext = Arcadia.file_extension(_title)
3890
4069
  ext='rb' if ext.nil?
3891
4070
  _e.init_editing(ext, w1)
3892
4071
  _e.text.set_focus