arcadia 1.0.0 → 1.1.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +90 -28
  3. data/conf/LC/en-UK.LANG +6 -0
  4. data/conf/LC/ru-RU.LANG +0 -0
  5. data/conf/arcadia.conf +8 -4
  6. data/conf/arcadia.res.rb +86 -1
  7. data/conf/theme-dark.conf +2 -1
  8. data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
  9. data/ext/ae-dir-projects/ae-dir-projects.rb +42 -6
  10. data/ext/ae-editor/ae-editor.rb +227 -120
  11. data/ext/ae-editor/langs/coderay.tokens +0 -0
  12. data/ext/ae-editor/langs/conf.lang +0 -0
  13. data/ext/ae-editor/langs/css.lang +0 -0
  14. data/ext/ae-editor/langs/html.lang +0 -0
  15. data/ext/ae-editor/langs/java.lang +0 -0
  16. data/ext/ae-editor/langs/python.lang +0 -0
  17. data/ext/ae-editor/langs/ruby.lang +0 -0
  18. data/ext/ae-editor/langs/text.lang +0 -0
  19. data/ext/ae-editor/langs/xml.lang +0 -0
  20. data/ext/ae-editor/lib/rbeautify.rb +0 -0
  21. data/ext/ae-file-history/ae-file-history.rb +4 -3
  22. data/ext/ae-output/ae-output.rb +44 -31
  23. data/ext/ae-ruby-debug/ae-ruby-debug.conf +3 -2
  24. data/ext/ae-ruby-debug/ae-ruby-debug.rb +1 -0
  25. data/ext/ae-search-in-files/ae-search-in-files.rb +3 -3
  26. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +0 -0
  27. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +0 -0
  28. data/ext/ae-shell/ae-shell.rb +37 -15
  29. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +14 -8
  30. data/ext/ae-subprocess-inspector/butterfly.res +0 -0
  31. data/ext/ae-subprocess-inspector/process.res +0 -0
  32. data/ext/ae-subprocess-inspector/space-invader.res +0 -0
  33. data/ext/ae-term/ae-term.conf +0 -0
  34. data/ext/ae-term/ae-term.rb +0 -0
  35. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +0 -0
  36. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +0 -0
  37. data/lib/a-commons.rb +1 -1
  38. data/lib/a-contracts.rb +13 -3
  39. data/lib/a-core.rb +612 -142
  40. data/lib/a-tkcommons.rb +661 -50
  41. data/lib/anigif.rb +0 -0
  42. data/lib/iosync.rb +71 -0
  43. data/tcl/anigif/anigif.tcl +0 -0
  44. data/tcl/anigif/pkgIndex.tcl +0 -0
  45. metadata +5 -2
@@ -916,8 +916,8 @@ class TkTextListBox < TkText
916
916
  tag_configure('class', 'foreground' => Arcadia.conf('hightlight.class_variable.foreground'))
917
917
  @count = 0
918
918
  @selected = -1
919
- self.bind_append('KeyPress'){|e| key_press(e)}
920
- self.bind_append('KeyRelease'){|e| key_release(e)}
919
+ self.bind_append('KeyPress', "%K"){|_keysym| key_press(_keysym)}
920
+ self.bind_append('KeyRelease', "%K"){|_keysym| key_release(_keysym)}
921
921
  self.bind_append("ButtonPress-1", proc{|x,y| button_press(x,y)}, "%x %y")
922
922
  end
923
923
 
@@ -953,8 +953,8 @@ class TkTextListBox < TkText
953
953
  self.select(_line)
954
954
  end
955
955
 
956
- def key_press(_e)
957
- case _e.keysym
956
+ def key_press(_keysym)
957
+ case _keysym
958
958
  when 'Up'
959
959
  if @selected > 0
960
960
  select(@selected-1)
@@ -966,8 +966,8 @@ class TkTextListBox < TkText
966
966
  end
967
967
  end
968
968
 
969
- def key_release(_e)
970
- case _e.keysym
969
+ def key_release(_keysym)
970
+ case _keysym
971
971
  when 'Next','Prior'
972
972
  index = self.index('@0,0')
973
973
  line = index.split('.')[0].to_i
@@ -1327,7 +1327,7 @@ class AgEditor
1327
1327
  attr_reader :highlighting
1328
1328
  attr_reader :last_tmp_file
1329
1329
  attr_reader :lang
1330
- attr_reader :file_info
1330
+ attr_reader :buffer_info
1331
1331
  attr_reader :outline
1332
1332
  attr_reader :file_loaded
1333
1333
  attr_reader :edit_initialized
@@ -1350,7 +1350,7 @@ class AgEditor
1350
1350
  @spaces_show = false
1351
1351
  @line_numbers_visible = @controller.conf('line-numbers') == 'yes'
1352
1352
  @id = -1
1353
- @file_info = Hash.new
1353
+ @buffer_info = Hash.new
1354
1354
  @file_loaded = false
1355
1355
  @edit_initialized = false
1356
1356
  @start_index='1.0'
@@ -1765,9 +1765,9 @@ class AgEditor
1765
1765
  @raised_listbox.select(_line)
1766
1766
  _insert_selected_value.call
1767
1767
  }, "%x %y")
1768
- @raised_listbox.bind_append('Shift-KeyPress'){|e|
1768
+ @raised_listbox.bind_append('Shift-KeyPress', "%K"){|_keysym|
1769
1769
  # todo
1770
- case e.keysym
1770
+ case _keysym
1771
1771
  when 'parenleft'
1772
1772
  @text.insert('insert','(')
1773
1773
  _buffer = _buffer + '('
@@ -1778,28 +1778,28 @@ class AgEditor
1778
1778
  end
1779
1779
  Tk.callback_break
1780
1780
  when 'A'..'Z','equal','greater','underscore'
1781
- if e.keysym == 'equal'
1781
+ if _keysym == 'equal'
1782
1782
  ch = '='
1783
- elsif e.keysym == 'greater'
1783
+ elsif _keysym == 'greater'
1784
1784
  ch = '>'
1785
- elsif e.keysym == 'underscore'
1785
+ elsif _keysym == 'underscore'
1786
1786
  ch = '_'
1787
1787
  else
1788
- ch = e.keysym
1788
+ ch = _keysym
1789
1789
  end
1790
1790
  @text.insert('insert',ch)
1791
1791
  _buffer = _buffer + ch
1792
1792
  _update_list.call(_buffer)
1793
1793
  Tk.callback_break
1794
1794
  else
1795
- if e.keysym.length > 1
1796
- p ">#{e.keysym}<"
1795
+ if _keysym.length > 1
1796
+ p ">#{_keysym}<"
1797
1797
  Tk.callback_break
1798
1798
  end
1799
1799
  end
1800
1800
  }
1801
- @raised_listbox.bind_append('KeyPress'){|e|
1802
- case e.keysym
1801
+ @raised_listbox.bind_append('KeyPress', "%K"){|_keysym|
1802
+ case _keysym
1803
1803
  when 'Escape'
1804
1804
  @raised_listbox.grab("release")
1805
1805
  @raised_listbox_frame.destroy
@@ -1815,12 +1815,12 @@ class AgEditor
1815
1815
  Arcadia.process_event(DocCodeEvent.new(self, 'doc_entry'=>_docs_entries[_key], 'xdoc'=>_x, 'ydoc'=>_y))
1816
1816
  #EditorContract.instance.doc_code(self, 'doc_entry'=>_docs_entries[_key], 'xdoc'=>_x, 'ydoc'=>_y)
1817
1817
  when 'a'..'z','less','space'
1818
- if e.keysym == 'less'
1818
+ if _keysym == 'less'
1819
1819
  ch = '<'
1820
- elsif e.keysym == 'space'
1820
+ elsif _keysym == 'space'
1821
1821
  ch = ''
1822
1822
  else
1823
- ch = e.keysym
1823
+ ch = _keysym
1824
1824
  end
1825
1825
  @text.insert('insert',ch)
1826
1826
  _buffer = _buffer + ch
@@ -1841,8 +1841,8 @@ class AgEditor
1841
1841
  Tk.callback_break
1842
1842
  end
1843
1843
  }
1844
- @raised_listbox.bind_append('KeyRelease'){|e|
1845
- case e.keysym
1844
+ @raised_listbox.bind_append('KeyRelease', "%K"){|_keysym|
1845
+ case _keysym
1846
1846
  when 'Return'
1847
1847
  _insert_selected_value.call
1848
1848
  end
@@ -1859,8 +1859,8 @@ class AgEditor
1859
1859
  def activate_complete_code_key_binding
1860
1860
  @n_complete_task = 0
1861
1861
  # key binding for complete code
1862
- @text.bind_append("Control-KeyPress"){|e|
1863
- case e.keysym
1862
+ @text.bind_append("Control-KeyPress", "%K"){|_keysym|
1863
+ case _keysym
1864
1864
  when 'space'
1865
1865
  if @n_complete_task == 0
1866
1866
  @do_complete = true
@@ -1869,8 +1869,8 @@ class AgEditor
1869
1869
  end
1870
1870
  }
1871
1871
 
1872
- @text.bind_append("KeyPress"){|e|
1873
- if e.keysym == "Escape"
1872
+ @text.bind_append("KeyPress", "%K"){|_keysym|
1873
+ if _keysym == "Escape"
1874
1874
  if @n_complete_task == 0
1875
1875
  @do_complete = true
1876
1876
  complete_code
@@ -1881,8 +1881,8 @@ class AgEditor
1881
1881
  }
1882
1882
  case @lang
1883
1883
  when 'ruby'
1884
- @text.bind_append("KeyRelease"){|e|
1885
- case e.keysym
1884
+ @text.bind_append("KeyRelease", "%K"){|_keysym|
1885
+ case _keysym
1886
1886
  when 'period'
1887
1887
  _focus_line = @text.get('insert linestart','insert')
1888
1888
  if _focus_line.strip[0..0] != '#'
@@ -1905,15 +1905,15 @@ class AgEditor
1905
1905
  def activate_key_binding
1906
1906
  activate_complete_code_key_binding #if @is_ruby
1907
1907
 
1908
- @text.bind_append("Control-KeyPress"){|e|
1909
- case e.keysym
1908
+ @text.bind_append("Control-KeyPress", "%K"){|_keysym|
1909
+ case _keysym
1910
1910
  when 'o'
1911
1911
  if @file
1912
1912
  _dir = File.dirname(@file)
1913
1913
  else
1914
1914
  _dir = MonitorLastUsedDir.get_last_dir
1915
1915
  end
1916
- _file = Arcadia.open_file_dialog(_dir)
1916
+ _file = Arcadia.select_file_dialog(_dir)
1917
1917
  Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file)) if _file
1918
1918
  Tk.callback_break
1919
1919
  break
@@ -1935,8 +1935,8 @@ class AgEditor
1935
1935
  end
1936
1936
  }
1937
1937
 
1938
- @text.bind_append("Control-Shift-KeyPress"){|e|
1939
- case e.keysym
1938
+ @text.bind_append("Control-Shift-KeyPress", "%K"){|_keysym|
1939
+ case _keysym
1940
1940
  when 'I'
1941
1941
  _r = @text.tag_ranges('sel')
1942
1942
  _row_begin = _r[0][0].split('.')[0].to_i
@@ -1972,9 +1972,9 @@ class AgEditor
1972
1972
  end
1973
1973
  }
1974
1974
 
1975
- @text.bind_append("KeyPress"){|e|
1976
- @last_keypress = e.keysym
1977
- case e.keysym
1975
+ @text.bind_append("KeyPress", "%K"){|_keysym|
1976
+ @last_keypress = _keysym
1977
+ case _keysym
1978
1978
  # when 'BackSpace'
1979
1979
  # _index = @text.index('insert')
1980
1980
  # _row, _col = _index.split('.')
@@ -2019,10 +2019,10 @@ class AgEditor
2019
2019
  end
2020
2020
  }
2021
2021
 
2022
- @text.bind_append("KeyRelease"){|e|
2023
- @last_keyrelease = e.keysym
2022
+ @text.bind_append("KeyRelease", "%K"){|_keysym|
2023
+ @last_keyrelease = _keysym
2024
2024
  #return if @last_keypress != e.keysym
2025
- case e.keysym
2025
+ case _keysym
2026
2026
  # when 'Up','Down'
2027
2027
  # refresh_outline
2028
2028
  when 'Left', 'Right'
@@ -2072,13 +2072,13 @@ class AgEditor
2072
2072
  rehighlightlines(row, row)
2073
2073
  end
2074
2074
  end
2075
- check_modify if !['Shift_L','Shift_R','Control_L','Control_R','Up','Down','Left', 'Right', 'Prior', 'Next'].include?(e.keysym)
2075
+ check_modify if !['Shift_L','Shift_R','Control_L','Control_R','Up','Down','Left', 'Right', 'Prior', 'Next'].include?(_keysym)
2076
2076
  }
2077
2077
 
2078
2078
 
2079
- @text.bind_append("Shift-KeyPress"){|e|
2080
- @last_keypress = e.keysym
2081
- case e.keysym
2079
+ @text.bind_append("Shift-KeyPress", "%K"){|_keysym|
2080
+ @last_keypress = _keysym
2081
+ case _keysym
2082
2082
  when 'Tab','ISO_Left_Tab'
2083
2083
  _r = @text.tag_ranges('sel')
2084
2084
  if _r && _r[0]
@@ -2101,6 +2101,7 @@ class AgEditor
2101
2101
  end
2102
2102
  end
2103
2103
  }
2104
+
2104
2105
  end
2105
2106
 
2106
2107
  def decrease_indent
@@ -2157,7 +2158,7 @@ class AgEditor
2157
2158
 
2158
2159
  @text.bind_append("Enter", proc{do_enter})
2159
2160
 
2160
- @text.bind("<Modified>"){|e|
2161
+ @text.bind("<Modified>"){
2161
2162
  check_modify
2162
2163
  }
2163
2164
  activate_key_binding
@@ -2298,7 +2299,7 @@ class AgEditor
2298
2299
 
2299
2300
 
2300
2301
  @text_line_num.bind("Button-3",
2301
- proc{|*x|
2302
+ proc{
2302
2303
  _x = TkWinfo.pointerx(@text_line_num)
2303
2304
  _y = TkWinfo.pointery(@text_line_num)
2304
2305
  _pop_up.entryconfigure(0,'label'=> Arcadia.text('ext.editor.text_line.menu.title', [@text_line_num_current_line]))
@@ -2309,6 +2310,7 @@ class AgEditor
2309
2310
  end
2310
2311
 
2311
2312
  def file_line_to_text_line_num_line(_line)
2313
+ return 0 if @text_line_num.nil?
2312
2314
  rel_line = nil
2313
2315
  line_begin = @text_line_num.get('1.0','1.end').strip.to_i
2314
2316
  line_end = @text_line_num.index('end').split('.')[0].to_i+line_begin
@@ -2366,6 +2368,7 @@ class AgEditor
2366
2368
  end
2367
2369
 
2368
2370
  def remove_tag_bookmark(_line)
2371
+ return if @text_line_num.nil?
2369
2372
  rel_line = file_line_to_text_line_num_line(_line)
2370
2373
  if rel_line
2371
2374
  i1 = "#{rel_line}.0"
@@ -2661,7 +2664,7 @@ class AgEditor
2661
2664
  :label=>Arcadia.text('ext.editor.text.menu.data_from_file'),
2662
2665
  :hidemargin => false,
2663
2666
  :command=> proc{
2664
- file = Arcadia.open_file_dialog
2667
+ file = Arcadia.select_file_dialog
2665
2668
  if file
2666
2669
  require 'base64'
2667
2670
  f = File.open(file,"rb")
@@ -3157,7 +3160,8 @@ class AgEditor
3157
3160
  def reset_modify(_reset_tab=true)
3158
3161
  @controller.change_tab_reset_modify(@page_frame) if _reset_tab
3159
3162
  @set_mod = false
3160
- @file_info['mtime'] = File.mtime(@file) if @file
3163
+ @buffer_info['mtime'] = File.mtime(@file) if @file
3164
+ @buffer_info['encoding'] = @text.value.encoding.name if @text
3161
3165
  #@file_last_access_time = File.mtime(@file) if @file
3162
3166
  @controller.refresh_status
3163
3167
  update_toolbar
@@ -3523,21 +3527,21 @@ class AgEditor
3523
3527
  if file
3524
3528
  new_file_name(file)
3525
3529
  save
3526
- #@controller.change_file_name(@page_frame, file)
3527
3530
  @last_tmp_file = nil if @last_tmp_file != nil
3531
+ @file_loaded = true
3528
3532
  Arcadia.process_event(OpenBufferEvent.new(self,'file'=>file))
3529
3533
  @controller.do_buffer_raise(@controller.page_name(@page_frame))
3530
- #EditorContract.instance.file_created(self, 'file'=>@file)
3531
3534
  end
3532
3535
  end
3533
3536
 
3534
3537
  def new_file_name(_new_file)
3538
+ @controller.change_file_name(@page_frame, _new_file)
3535
3539
  @file =_new_file
3536
- @controller.change_file_name(@page_frame, file)
3537
3540
  base_name= File.basename(_new_file)
3538
3541
  if base_name.include?('.')
3539
3542
  self.change_highlight(base_name.split('.')[-1])
3540
3543
  end
3544
+
3541
3545
  end
3542
3546
 
3543
3547
  def update_toolbar
@@ -3557,10 +3561,10 @@ class AgEditor
3557
3561
 
3558
3562
  def modified_by_others?
3559
3563
  ret = false
3560
- if @file_info['mtime'] && @file
3564
+ if @buffer_info['mtime'] && @file
3561
3565
  if File.exist?(@file)
3562
3566
  ftime = File.mtime(@file)
3563
- ret = @file_info['mtime'] != ftime
3567
+ ret = @buffer_info['mtime'] != ftime
3564
3568
  else
3565
3569
  ret = true
3566
3570
  end
@@ -3571,9 +3575,9 @@ class AgEditor
3571
3575
  def reset_file_last_access_time
3572
3576
  if @file
3573
3577
  if File.exist?(@file)
3574
- @file_info['mtime'] = File.mtime(@file)
3578
+ @buffer_info['mtime'] = File.mtime(@file)
3575
3579
  else
3576
- @file_info['mtime'] = nil
3580
+ @buffer_info['mtime'] = nil
3577
3581
  @file = nil
3578
3582
  end
3579
3583
  end
@@ -3582,16 +3586,16 @@ class AgEditor
3582
3586
  def check_file_last_access_time
3583
3587
  if @file
3584
3588
  file_exist = File.exist?(@file)
3585
- if @file_info['mtime'] && file_exist
3589
+ if @buffer_info['mtime'] && file_exist
3586
3590
  ftime = File.mtime(@file)
3587
- if @file_info['mtime'] != ftime
3591
+ if @buffer_info['mtime'] != ftime
3588
3592
  msg = Arcadia.text('ext.editor.text.d.file_changed.msg', [@file])
3589
3593
  title = Arcadia.text('ext.editor.text.d.file_changed.title')
3590
3594
  ans = Arcadia.hinner_dialog(self, 'type'=>'yes_no', 'msg'=> msg, 'title' => title, 'level' => 'error')
3591
3595
  if ans == 'yes'
3592
3596
  reload
3593
3597
  else
3594
- @file_info['mtime'] = ftime
3598
+ @buffer_info['mtime'] = ftime
3595
3599
  end
3596
3600
  end
3597
3601
  elsif !file_exist
@@ -3680,6 +3684,12 @@ class AgEditor
3680
3684
  @outline = nil
3681
3685
  end
3682
3686
 
3687
+ def destroy_text
3688
+ @text.destroy if @text
3689
+ @text = nil
3690
+ end
3691
+
3692
+
3683
3693
  def load_file(_filename = nil)
3684
3694
  #if filename is nil then open a new tab
3685
3695
  @loading=true
@@ -3756,7 +3766,6 @@ class AgMultiEditorView
3756
3766
  def initialize(_parent=nil, _frame=nil, _usetabs=true)
3757
3767
  @parent = _parent
3758
3768
  @frame = _frame
3759
-
3760
3769
  @usetabs = _usetabs
3761
3770
  if @usetabs
3762
3771
  initialize_tabs
@@ -3958,9 +3967,15 @@ class AgMultiEditorView
3958
3967
  end
3959
3968
  adapter_frame = @pages.delete(_name)['frame']
3960
3969
  if _delete_adapter
3961
- adapter_frame.frame.destroy if adapter_frame.frame
3970
+ frame = adapter_frame.frame
3971
+ adapter_frame.detach_frame
3962
3972
  adapter_frame.destroy
3963
- end
3973
+ frame.destroy
3974
+ # adapter_frame.frame.destroy if adapter_frame.frame
3975
+ # adapter_frame.destroy
3976
+ end
3977
+ @raised_page = nil if @raised_page == _name
3978
+ Tk.update
3964
3979
  end
3965
3980
 
3966
3981
  def add_menu_button(_name, _buffer_string)
@@ -4011,7 +4026,7 @@ class AgMultiEditorView
4011
4026
  }
4012
4027
  res
4013
4028
  end
4014
-
4029
+
4015
4030
  def raise(_page=nil)
4016
4031
  if @usetabs
4017
4032
  if _page.nil?
@@ -4023,7 +4038,7 @@ class AgMultiEditorView
4023
4038
  end
4024
4039
  else
4025
4040
  if _page.nil?
4026
- @raised_page
4041
+ @raised_page
4027
4042
  elsif @raised_page != _page || @raised_page_usetabs != @usetabs
4028
4043
  if @raised_page
4029
4044
  # @pages[@raised_page]['frame'].unpack if @pages[@raised_page]
@@ -4334,7 +4349,7 @@ class AgMultiEditor < ArcadiaExtPlus
4334
4349
  @tabs_editor =Hash.new
4335
4350
  @raw_buffer_name = Hash.new
4336
4351
  @editor_seq=-1
4337
- @editors =Array.new
4352
+ @editors =Hash.new
4338
4353
  initialize_status
4339
4354
  #@statusbar_item.pack('side'=>'left','anchor'=>'e','expand'=>'yes')
4340
4355
  Arcadia.attach_listener(self, BufferEvent)
@@ -4379,10 +4394,21 @@ class AgMultiEditor < ArcadiaExtPlus
4379
4394
  end
4380
4395
  end
4381
4396
 
4397
+ def on_run_cmd(_event)
4398
+ case _event
4399
+ when RunCmdStartedEvent
4400
+ debug_begin
4401
+ when RunCmdEndedEvent
4402
+ debug_reset
4403
+ debug_end
4404
+ end
4405
+ end
4406
+
4382
4407
  def on_before_run_cmd(_event)
4383
4408
  _filename = _event.file
4384
4409
  _event.persistent = true
4385
- if _filename.nil? || _filename == "*CURR"
4410
+ #if _filename.nil? || _filename == "*CURR"
4411
+ if _filename == "*CURR" || (_filename.nil? && _event && _event.cmd.include?('<<FILE>>'))
4386
4412
  current_editor = self.raised
4387
4413
  if current_editor
4388
4414
  if current_editor.file
@@ -4433,7 +4459,7 @@ class AgMultiEditor < ArcadiaExtPlus
4433
4459
  _event.file = Arcadia.persistent('run.file.last')
4434
4460
  _event.cmd = Arcadia.persistent('run.cmd.last')
4435
4461
  else
4436
- if _event.dir.nil?
4462
+ if _event.dir.nil? && _event.file != nil
4437
4463
  _event.dir = File.dirname(_event.file)
4438
4464
  end
4439
4465
 
@@ -4451,8 +4477,26 @@ class AgMultiEditor < ArcadiaExtPlus
4451
4477
  _event.cmd = _event.file
4452
4478
  end
4453
4479
  end
4454
- if _event.file && _event.cmd.include?('<<RUBY>>')
4455
- _event.cmd = _event.cmd.gsub('<<RUBY>>',Arcadia.ruby)
4480
+ while _event.cmd.include?('<<INPUT_FILE>>')
4481
+ input_file = Arcadia.select_file_dialog(MonitorLastUsedDir.get_last_dir, "<<INPUT_FILE>> = ")
4482
+ if !input_file.nil?
4483
+ _event.cmd = _event.cmd.sub('<<INPUT_FILE>>', input_file)
4484
+ end
4485
+ end
4486
+ while _event.cmd.include?('<<INPUT_DIR>>')
4487
+ input_dir = Arcadia.select_dir_dialog(MonitorLastUsedDir.get_last_dir, nil, "<<INPUT_DIR>> = ")
4488
+ if !input_dir.nil?
4489
+ _event.cmd = _event.cmd.sub('<<INPUT_DIR>>',input_dir)
4490
+ end
4491
+ end
4492
+ while _event.cmd.include?('<<INPUT_STRING>>')
4493
+ input_string = Arcadia.open_string_dialog("<<INPUT_STRING>> = ")
4494
+ if !input_string.nil?
4495
+ _event.cmd = _event.cmd.sub('<<INPUT_STRING>>', input_string)
4496
+ end
4497
+ end
4498
+ if _event.cmd.include?('<<RUBY>>')
4499
+ _event.cmd = _event.cmd.gsub('<<RUBY>>',"#{Arcadia.ruby} -r #{Dir.pwd}/lib/iosync")
4456
4500
  end
4457
4501
  if _event.file && _event.cmd.include?('<<FILE>>')
4458
4502
  _event.cmd = _event.cmd.gsub('<<FILE>>',_event.file)
@@ -4943,7 +4987,7 @@ class AgMultiEditor < ArcadiaExtPlus
4943
4987
  )
4944
4988
 
4945
4989
  @main_frame.page_bind("Button-3",
4946
- proc{|*x|
4990
+ proc{
4947
4991
  _x = TkWinfo.pointerx(@main_frame.root_frame)
4948
4992
  _y = TkWinfo.pointery(@main_frame.root_frame)
4949
4993
  if @usetabs
@@ -5165,6 +5209,7 @@ class AgMultiEditor < ArcadiaExtPlus
5165
5209
  end
5166
5210
  if !editor_exist?(_event.file)
5167
5211
  @last_transient_file = _event.file
5212
+ open_transient_button(_event.file)
5168
5213
  else
5169
5214
  @last_transient_file = nil
5170
5215
  _event.transient = false
@@ -5185,7 +5230,13 @@ class AgMultiEditor < ArcadiaExtPlus
5185
5230
  er.mark_selected(_index) if select_index
5186
5231
  end
5187
5232
  else
5188
- _e = self.open_file(_event.file, _index, select_index)
5233
+ if _event.debug == 'yes'
5234
+ debug_reset
5235
+ r,c = _index.split('.')
5236
+ _e = self.open_file_in_debug(_event.file, r)
5237
+ else
5238
+ _e = self.open_file(_event.file, _index, select_index)
5239
+ end
5189
5240
  #_e.do_line_update
5190
5241
  end
5191
5242
  elsif _event.text
@@ -5199,7 +5250,7 @@ class AgMultiEditor < ArcadiaExtPlus
5199
5250
  #add_reverse_item(_e)
5200
5251
  end
5201
5252
  else
5202
- _event.file = Arcadia.open_file_dialog
5253
+ _event.file = Arcadia.select_file_dialog
5203
5254
  self.open_file(_event.file)
5204
5255
  end
5205
5256
  when CloseBufferEvent
@@ -5255,8 +5306,48 @@ class AgMultiEditor < ArcadiaExtPlus
5255
5306
  #close_file(_event.old_file)
5256
5307
  change_file(_event.old_file, _event.new_file)
5257
5308
  end
5309
+ when DeleteFileBufferEvent
5310
+ if _event.file == nil
5311
+ er = self.raised
5312
+ _event.file = er.file if er
5313
+ end
5314
+ if _event.file
5315
+ _title = Arcadia.text("ext.editor.file.d.delete.title")
5316
+ _msg = Arcadia.text("ext.editor.file.d.delete.msg", [_event.file])
5317
+ if File.exists?(_event.file) &&
5318
+ File.ftype(_event.file) == 'file' &&
5319
+ Arcadia.dialog(self,'type'=>'yes_no', 'level'=>'warning','title' => _title, 'msg'=>_msg)=='yes'
5320
+
5321
+ Arcadia.process_event(CloseBufferEvent.new(self,'file'=>_event.file))
5322
+ begin
5323
+ File.delete(_event.file)
5324
+ _event.flag = Event::FLAG_DEFAULT
5325
+ rescue RuntimeError => e
5326
+ _event.flag = Event::FLAG_ERROR
5327
+ Arcadia.runtime_error(e)
5328
+ end
5329
+
5330
+ else
5331
+ _event.flag = Event::FLAG_ERROR
5332
+ end
5333
+ end
5258
5334
  end
5259
5335
  end
5336
+
5337
+ def open_transient_button(_file)
5338
+ alive_check = proc{
5339
+ e = @tabs_editor[tab_name(_file)]
5340
+ @last_transient_file == _file && e && !e.modified_from_opening?
5341
+ }
5342
+ abort_action = proc{@last_transient_file=nil}
5343
+ Arcadia.process_event(SubProcessEvent.new(self,
5344
+ 'abort_dialog_yes'=>false,
5345
+ # 'anigif'=>'space-invader.res',
5346
+ 'anigif'=>'butterfly.res',
5347
+ 'name'=>File.basename(_file),
5348
+ 'abort_action'=>abort_action,
5349
+ 'alive_check'=>alive_check))
5350
+ end
5260
5351
 
5261
5352
  def get_find
5262
5353
  @find
@@ -5613,11 +5704,10 @@ class AgMultiEditor < ArcadiaExtPlus
5613
5704
  def change_tab_title(_tab, _new_text, _new_file=nil)
5614
5705
  p_name = page_name(_tab)
5615
5706
  old_text = @main_frame.page_title(p_name)
5616
-
5617
5707
  if @tabs_editor[p_name] && @tabs_editor[p_name].file
5618
5708
  mod_buffer_menu_item(@tabs_editor[p_name].file, _new_text, _new_file, self)
5619
5709
  else
5620
- mod_buffer_menu_item(unname_modified(tab_title_by_tab_name(p_name)), _new_text, nil, self)
5710
+ mod_buffer_menu_item(unname_modified(tab_title_by_tab_name(p_name)), _new_text, _new_file, self)
5621
5711
  @last_fa.refresh_layout_manager if @last_fa
5622
5712
  end
5623
5713
  # mod_buffer_menu_item(@main_frame.page(p_name)['file'], _new_text)
@@ -5693,6 +5783,7 @@ class AgMultiEditor < ArcadiaExtPlus
5693
5783
  else
5694
5784
  p "file #{_filename} do not exist !"
5695
5785
  end
5786
+ _editor
5696
5787
  end
5697
5788
 
5698
5789
  def change_outline(_e, _raised=false)
@@ -5739,6 +5830,7 @@ class AgMultiEditor < ArcadiaExtPlus
5739
5830
  @@statusbar_items = Hash.new
5740
5831
  @@statusbar_items['file_size'] = Arcadia.new_statusbar_item("File size")
5741
5832
  @@statusbar_items['file_mtime'] = Arcadia.new_statusbar_item("File modification time")
5833
+ @@statusbar_items['buffer_encoding'] = Arcadia.new_statusbar_item("Buffer encoding")
5742
5834
  @@statusbar_items['file_name'] = Arcadia.new_statusbar_item("File name")
5743
5835
  end
5744
5836
  end
@@ -5746,11 +5838,12 @@ class AgMultiEditor < ArcadiaExtPlus
5746
5838
  def reset_status
5747
5839
  @@statusbar_items['file_name'].text = '?'
5748
5840
  @@statusbar_items['file_mtime'].text = '?'
5841
+ @@statusbar_items['buffer_encoding'].text = '?'
5749
5842
  @@statusbar_items['file_size'].text = '?'
5750
5843
  end
5751
5844
 
5752
5845
  def refresh_status
5753
- #@statusbar_item.text("#{_title} | #{_e.file_info['mtime'].strftime("%d/%m/%Y %H:%m:%S") if _e}")
5846
+ #@statusbar_item.text("#{_title} | #{_e.buffer_info['mtime'].strftime("%d/%m/%Y %H:%m:%S") if _e}")
5754
5847
  if raised && raised.file
5755
5848
  size = File.size(raised.file)
5756
5849
  if size > 1024
@@ -5759,9 +5852,10 @@ class AgMultiEditor < ArcadiaExtPlus
5759
5852
  size_str = "#{size} b"
5760
5853
  end
5761
5854
  @@statusbar_items['file_name'].text(File.basename(raised.file))
5762
- @@statusbar_items['file_mtime'].text = raised.file_info['mtime'].localtime if raised.file_info['mtime']
5855
+ @@statusbar_items['file_mtime'].text = raised.buffer_info['mtime'].localtime if raised.buffer_info['mtime']
5856
+ @@statusbar_items['buffer_encoding'].text = raised.buffer_info['encoding'] if raised.buffer_info['encoding']
5763
5857
  @@statusbar_items['file_size'].text = size_str
5764
- #@statusbar_item.text("#{File.basename(raised.file)} | #{raised.file_info['mtime'].localtime} | #{size_str}")
5858
+ #@statusbar_item.text("#{File.basename(raised.file)} | #{raised.buffer_info['mtime'].localtime} | #{size_str}")
5765
5859
  else
5766
5860
  reset_status
5767
5861
  end
@@ -5769,8 +5863,8 @@ class AgMultiEditor < ArcadiaExtPlus
5769
5863
 
5770
5864
  def editor_of(_filename)
5771
5865
  _ret = nil
5772
- @editors.each{|e|
5773
- if e.file == _filename || e.last_tmp_file == _filename
5866
+ @editors.each{|id, e|
5867
+ if !e.nil? && e.file == _filename || e.last_tmp_file == _filename
5774
5868
  _ret = e
5775
5869
  break
5776
5870
  end
@@ -5813,8 +5907,8 @@ class AgMultiEditor < ArcadiaExtPlus
5813
5907
  _index = @main_frame.index(resolve_tab_name(name_read_only(_name)))
5814
5908
  end
5815
5909
  if _index == -1
5816
- @editors.each{|e|
5817
- if e.last_tmp_file == _filename
5910
+ @editors.each{|id, e|
5911
+ if !e.nil? && e.last_tmp_file == _filename
5818
5912
  _index = 0
5819
5913
  break
5820
5914
  end
@@ -5836,49 +5930,59 @@ class AgMultiEditor < ArcadiaExtPlus
5836
5930
 
5837
5931
  def open_file(_filename = nil, _text_index='1.0', _mark_selected=true, _load_file=true)
5838
5932
  return if _filename == nil || !File.exist?(_filename) || File.ftype(_filename) != 'file'
5839
- _basefilename = File.basename(_filename)
5840
- _tab_name = self.tab_file_name(_filename)
5841
- #_index = @main_frame.enb.index(_tab_name)
5842
- #_exist_buffer = _index != -1
5843
- _exist_buffer = @tabs_file[_tab_name] != nil
5844
- if _exist_buffer
5845
- open_buffer(_tab_name)
5846
- # ??? _text_index = nil
5847
- if !@tabs_editor[_tab_name].file_loaded
5933
+ if defined?(@opening_file)
5934
+ while @opening_file
5935
+ sleep(1)
5936
+ end
5937
+ end
5938
+ @opening_file = true
5939
+ begin
5940
+ _basefilename = File.basename(_filename)
5941
+ _tab_name = self.tab_file_name(_filename)
5942
+ #_index = @main_frame.enb.index(_tab_name)
5943
+ #_exist_buffer = _index != -1
5944
+ _exist_buffer = @tabs_file[_tab_name] != nil
5945
+ if _exist_buffer
5946
+ open_buffer(_tab_name)
5947
+ # ??? _text_index = nil
5948
+ if !@tabs_editor[_tab_name].file_loaded
5949
+ @tabs_editor[_tab_name].reset_highlight
5950
+ begin
5951
+ @tabs_editor[_tab_name].load_file_if_not_loaded
5952
+ rescue RuntimeError => e
5953
+ close_editor(@tabs_editor[_tab_name], true)
5954
+ Arcadia.runtime_error(e)
5955
+ end
5956
+ end
5957
+ else
5958
+ # @tabs_file[_tab_name]= _filename
5959
+ open_buffer(_tab_name, _basefilename, _filename, nil, false)
5848
5960
  @tabs_editor[_tab_name].reset_highlight
5849
5961
  begin
5850
- @tabs_editor[_tab_name].load_file_if_not_loaded
5962
+ if _load_file
5963
+ @tabs_editor[_tab_name].load_file(_filename)
5964
+ else
5965
+ @tabs_editor[_tab_name].file = _filename
5966
+ @tabs_editor[_tab_name].start_index = _text_index
5967
+ end
5851
5968
  rescue RuntimeError => e
5969
+ #Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
5970
+ #p "RuntimeError : #{e.message}"
5852
5971
  close_editor(@tabs_editor[_tab_name], true)
5853
5972
  Arcadia.runtime_error(e)
5854
5973
  end
5974
+ change_outline_frame_caption(File.basename(_filename)) if _filename
5855
5975
  end
5856
- else
5857
- # @tabs_file[_tab_name]= _filename
5858
- open_buffer(_tab_name, _basefilename, _filename, nil, false)
5859
- @tabs_editor[_tab_name].reset_highlight
5860
- begin
5861
- if _load_file
5862
- @tabs_editor[_tab_name].load_file(_filename)
5863
- else
5864
- @tabs_editor[_tab_name].file = _filename
5865
- @tabs_editor[_tab_name].start_index = _text_index
5976
+ editor = @tabs_editor[_tab_name]
5977
+ if editor && _load_file
5978
+ if _text_index != nil && _text_index != '1.0' && editor
5979
+ editor.text_see(_text_index)
5980
+ editor.mark_selected(_text_index) if _mark_selected
5866
5981
  end
5867
- rescue RuntimeError => e
5868
- #Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
5869
- #p "RuntimeError : #{e.message}"
5870
- close_editor(@tabs_editor[_tab_name], true)
5871
- Arcadia.runtime_error(e)
5982
+ editor.do_line_update if editor && !editor.highlighted?
5872
5983
  end
5873
- change_outline_frame_caption(File.basename(_filename)) if _filename
5874
- end
5875
- editor = @tabs_editor[_tab_name]
5876
- if editor && _load_file
5877
- if _text_index != nil && _text_index != '1.0' && editor
5878
- editor.text_see(_text_index)
5879
- editor.mark_selected(_text_index) if _mark_selected
5880
- end
5881
- editor.do_line_update if editor && !editor.highlighted?
5984
+ ensure
5985
+ @opening_file = false
5882
5986
  end
5883
5987
  return editor
5884
5988
  end
@@ -5960,6 +6064,9 @@ class AgMultiEditor < ArcadiaExtPlus
5960
6064
  e = @tabs_editor.delete(_buffer_name)
5961
6065
  @tabs_file.delete(_buffer_name)
5962
6066
  @editors.delete(e.id)
6067
+ if e.file == @last_transient_file
6068
+ @last_transient_file = nil
6069
+ end
5963
6070
  @raw_buffer_name.delete_if {|key, value| value == _buffer_name}
5964
6071
  end
5965
6072
 
@@ -6044,8 +6151,10 @@ class AgMultiEditor < ArcadiaExtPlus
6044
6151
  index = _editor.text.nil?? _editor.start_index : _editor.text.index("@0,0")
6045
6152
  r,c = index.split('.')
6046
6153
  _editor.destroy_outline
6154
+ #_editor.destroy_text
6047
6155
  change_outline_frame_caption('') if raised==_editor
6048
6156
  close_buffer_frame(_editor.page_frame)
6157
+ Tk.update
6049
6158
  BufferClosedEvent.new(self,'file'=>file,'row'=>r.to_i, 'col'=>c.to_i).shot!
6050
6159
  else
6051
6160
  return
@@ -6072,7 +6181,6 @@ class AgMultiEditor < ArcadiaExtPlus
6072
6181
  @main_frame.delete_page(_name, !_moved)
6073
6182
  if is_raised
6074
6183
  if !@main_frame.pages.empty? # && is_raised
6075
- #@main_frame.raise(@main_frame.pages[_index-1]) if TkWinfo.mapped?(@main_frame.root_frame)
6076
6184
  len = @main_frame.pages.length
6077
6185
  if _index < len
6078
6186
  ind = _index
@@ -6082,7 +6190,6 @@ class AgMultiEditor < ArcadiaExtPlus
6082
6190
  if TkWinfo.mapped?(@main_frame.root_frame)
6083
6191
  @main_frame.raise(@main_frame.pages[ind])
6084
6192
  editor = @tabs_editor[@main_frame.pages[ind]]
6085
- #editor.load_file_if_not_loaded if editor
6086
6193
  end
6087
6194
  else
6088
6195
  frame.root.top_text_clear if TkWinfo.mapped?(frame.hinner_frame)
@@ -6279,8 +6386,8 @@ class Finder < Findview
6279
6386
  @b_replace_all.bind('1', proc{hide; do_replace_all})
6280
6387
 
6281
6388
  # @e_what_entry.bind_append('KeyRelease'){|e|
6282
- @e_what.bind_append('KeyRelease'){|e|
6283
- case e.keysym
6389
+ @e_what.bind_append('KeyRelease', "%K"){|_keysym|
6390
+ case _keysym
6284
6391
  when 'Return'
6285
6392
  @find_action.call
6286
6393
  Tk.callback_break
@@ -6295,8 +6402,8 @@ class Finder < Findview
6295
6402
  @goto_line_dialog.on_close=proc{@goto_line_dialog.hide}
6296
6403
 
6297
6404
  @goto_line_dialog.b_go.bind('1',proc{go_line})
6298
- @goto_line_dialog.e_line.bind_append('KeyRelease'){|e|
6299
- case e.keysym
6405
+ @goto_line_dialog.e_line.bind_append('KeyRelease', "%K"){|_keysym|
6406
+ case _keysym
6300
6407
  when 'Return'
6301
6408
  go_line
6302
6409
  Tk.callback_break