arcadia 0.12.2 → 0.13.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.
- data/README +25 -14
- data/conf/LC/en-UK.LANG +3 -1
- data/conf/arcadia.conf +10 -0
- data/conf/arcadia.res.rb +29 -1
- data/ext/ae-editor/ae-editor.rb +239 -48
- data/ext/ae-file-history/ae-file-history.conf +11 -1
- data/ext/ae-file-history/ae-file-history.rb +120 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +6 -5
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +7 -3
- data/ext/ae-term/ae-term.rb +1 -1
- data/lib/a-commons.rb +72 -56
- data/lib/a-contracts.rb +23 -1
- data/lib/a-core.rb +136 -41
- data/lib/a-tkcommons.rb +127 -36
- data/tcl/fsdialog/fsdialog.tcl +2 -2
- data/tcl/ptwidgets-1.1.0/COPYRIGHT +10 -0
- data/tcl/ptwidgets-1.1.0/ChangeLog +194 -0
- data/tcl/ptwidgets-1.1.0/README +50 -0
- data/tcl/ptwidgets-1.1.0/common/stacktrace.tcl +29 -0
- data/tcl/ptwidgets-1.1.0/common/tokenframe.tcl +200 -0
- data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_off.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_on.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/img/tokenentry.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example2.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/img/wmarkentry.png +0 -0
- data/tcl/ptwidgets-1.1.0/doc/toggleswitch.html +402 -0
- data/tcl/ptwidgets-1.1.0/doc/tokenentry.html +1366 -0
- data/tcl/ptwidgets-1.1.0/doc/tokensearch.html +1549 -0
- data/tcl/ptwidgets-1.1.0/doc/wmarkentry.html +634 -0
- data/tcl/ptwidgets-1.1.0/library/toggleswitch.tcl +432 -0
- data/tcl/ptwidgets-1.1.0/library/tokenentry.tcl +2208 -0
- data/tcl/ptwidgets-1.1.0/library/tokensearch.tcl +2488 -0
- data/tcl/ptwidgets-1.1.0/library/wmarkentry.tcl +630 -0
- data/tcl/ptwidgets-1.1.0/pkgIndex.tcl +10 -0
- data/tcl/ptwidgets-1.1.0/test/Makefile +3 -0
- data/tcl/ptwidgets-1.1.0/test/run.tcl +3 -0
- data/tcl/ptwidgets-1.1.0/test/test.tcl +89 -0
- data/tcl/ptwidgets-1.1.0/test/toggleswitch.test +562 -0
- data/tcl/ptwidgets-1.1.0/test/tokenentry.test +1023 -0
- data/tcl/ptwidgets-1.1.0/test/tokensearch.test +1023 -0
- data/tcl/ptwidgets-1.1.0/test/wmarkentry.test +1325 -0
- data/tcl/themes/altTheme.tcl +101 -0
- data/tcl/themes/aquaTheme.tcl +59 -0
- data/tcl/themes/clamTheme.tcl +140 -0
- data/tcl/themes/classicTheme.tcl +108 -0
- data/tcl/themes/pkgIndex.tcl +3 -0
- data/tcl/themes/ttk.tcl +176 -0
- data/tcl/themes/vistaTheme.tcl +224 -0
- data/tcl/themes/winTheme.tcl +80 -0
- data/tcl/themes/xpTheme.tcl +65 -0
- data/tcl/tkfbox/folder.gif +0 -0
- data/tcl/tkfbox/textfile.gif +0 -0
- data/tcl/tkfbox/tkfbox.tcl +1 -0
- data/tcl/tkfbox/tkfbox.tcl~ +1 -0
- data/tcl/tkfbox/updir.xbm +1 -0
- metadata +43 -2
data/README
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
= Arcadia Ide
|
2
|
-
version 0.
|
2
|
+
version 0.13.0
|
3
3
|
|
4
4
|
by Antonio Galeone
|
5
|
-
on
|
5
|
+
on Jul 24, 2013
|
6
6
|
|
7
7
|
|
8
8
|
== About
|
9
9
|
|
10
|
-
Arcadia is a
|
10
|
+
Arcadia is a light Integrated Development Environment (IDE) for Ruby language
|
11
11
|
written in Ruby using the classic tcl/tk GUI toolkit.
|
12
12
|
|
13
13
|
Some of Arcadia ide project features include:
|
14
14
|
* Editor with source browsing, syntax highlighting, code completion
|
15
15
|
* Working on any platform where ruby and tcl-tk work.
|
16
16
|
* Debugging support
|
17
|
-
* Highly
|
17
|
+
* Highly estensibile architecture.
|
18
18
|
|
19
19
|
|
20
20
|
== News
|
21
21
|
|
22
|
+
[0.13.0]
|
23
|
+
This realease:
|
24
|
+
- improves file-history introducing bookmarks management
|
25
|
+
- improves layout
|
26
|
+
- fixes bugs
|
27
|
+
|
22
28
|
[0.12.2]
|
23
29
|
- this release adds support to debugger gem and fixes minor bugs
|
24
30
|
|
@@ -35,27 +41,31 @@ Some of Arcadia ide project features include:
|
|
35
41
|
locale is settable in ~/.arcadia/arcadia.conf overriding default (locale=en-UK)
|
36
42
|
... collaborations in translations are welcome!
|
37
43
|
- added possibility to interact with running application typing input in output's console
|
38
|
-
- introduced in file-history a new kind of view (list view) activable by
|
44
|
+
- introduced in file-history a new kind of view (list view) activable by button on toolbar
|
39
45
|
- bugs fixed and optimizations
|
40
46
|
|
41
47
|
== Dependencies
|
42
48
|
|
43
49
|
- rubygems
|
44
50
|
- ruby-tk
|
45
|
-
- tcl/tk
|
51
|
+
- tcl/tk (ruby-tk supports fully tcl/tk runtime <= 8.5 )
|
46
52
|
- tk-tile (if tcl/tk < 8.5)
|
47
|
-
- ctags
|
53
|
+
- ctags (linux)
|
48
54
|
- xterm (linux, optional)
|
49
55
|
- xdotool (linux, optional)
|
50
56
|
- ack (optional)
|
51
57
|
- gem coderay (> 1.0)
|
52
|
-
- gem ruby-debug
|
58
|
+
- gem debugger (ruby-debug on ruby < 1.9)
|
53
59
|
- gem win32-process (only on windows)
|
54
60
|
- gem ruby-wmi (only on windows)
|
55
61
|
|
56
62
|
== How to install
|
57
63
|
* exec on command line "gem install arcadia"
|
58
64
|
|
65
|
+
NOTE: on some linux distributions like archlinux the default tcl/tk runtime at this time is on versions >= 8.6
|
66
|
+
on the other hand ruby-tk supports fully only versions <= 8.5.x.y so to make arcadia working a choice
|
67
|
+
can be install ActiveTcl 8.5 and use ruby via rvm.
|
68
|
+
|
59
69
|
== How to run
|
60
70
|
* exec on command line "arcadia"
|
61
71
|
|
@@ -63,7 +73,7 @@ Some of Arcadia ide project features include:
|
|
63
73
|
== Short User guide
|
64
74
|
Application layout is splitted in vertical and horizontal resizable frames.
|
65
75
|
On vertical and horizontal splitter appear two button for left or right
|
66
|
-
one shot frame
|
76
|
+
one shot frame closing.
|
67
77
|
Every frame has a title, a button to expand or resizing it and a menu-button
|
68
78
|
for dynamic layout functions (like add row, add column, close or for move a frame).
|
69
79
|
|
@@ -114,33 +124,34 @@ It is a navigational tree:
|
|
114
124
|
- open terminal from selected dir
|
115
125
|
|
116
126
|
==== File history
|
117
|
-
The last used files are organizing in tree so you can reopen them or
|
127
|
+
The last used files are organizing in tree so you can reopen them or their
|
118
128
|
directory by clicking on the tree node.
|
119
129
|
|
120
130
|
==== Debug
|
121
|
-
Require
|
131
|
+
Require debugger gem.
|
122
132
|
It is created when a debug session init.
|
123
133
|
The debug button are: Step Next, Step Into, Step Over, Resume and quit.
|
124
134
|
The debug frame show the local, instance and global variables for each
|
125
135
|
step.
|
126
136
|
|
137
|
+
NOTE: at this moment debugger doesn't seem to work with ruby >= 2.0
|
138
|
+
|
127
139
|
==== Configuration
|
128
140
|
Same Arcadia properties are locally configurabled by editing the file arcadia.conf
|
129
141
|
under ~/.arcadia directory. The format of property definition are:
|
130
142
|
<OPERATING SYSTEM IDENTIFY::>PROPERTY_NAME=PROPERTY_VALUE
|
131
143
|
|
132
144
|
|
133
|
-
I have tested arcadia with ruby 1.8
|
145
|
+
I have tested arcadia with ruby 1.8, 1.9, 2.0 on
|
134
146
|
|
135
147
|
* Archlinux
|
136
|
-
* Ubuntu
|
148
|
+
* Ubuntu/Mint
|
137
149
|
* Fedora
|
138
150
|
* FreeBsd6.x, FreeBsd7.x,
|
139
151
|
* Vector linux 5.*,
|
140
152
|
* Windows 2000/XP/7,
|
141
153
|
* Cygwin (note: same page fault error on dll under cygwin may be solved in this way:
|
142
154
|
by ash.exe exec "/bin/rebaseall").
|
143
|
-
If you will test arcadia on other operating system sends me an e-mail.
|
144
155
|
|
145
156
|
==Developers e general information
|
146
157
|
Released on arcadia web site (http://arcadia.rubyforge.org)
|
data/conf/LC/en-UK.LANG
CHANGED
@@ -99,6 +99,7 @@ main.ps.runtime_errors=Runtime errors
|
|
99
99
|
ext.editor.menu.view.show_hide_line_number=Show/Hide editor line numbers
|
100
100
|
ext.editor.menu.view.show_hide_tabs=Show/Hide editor tabs
|
101
101
|
ext.editor.button.link.hint=Link open editors with content in the Navigator
|
102
|
+
ext.editor.button.up.hint=View parent
|
102
103
|
ext.editor.outline.rebuild_tree=.... rebuild tree
|
103
104
|
ext.editor.outline.menu.rebuild=Rebuild
|
104
105
|
ext.editor.text_line.menu.title=line $0
|
@@ -198,6 +199,7 @@ ext.file_history.button.show_as_list.hint=Show as list
|
|
198
199
|
ext.file_history.menu.search_from_here=Search from here
|
199
200
|
ext.file_history.menu.find_in_files=Find in files...
|
200
201
|
ext.file_history.menu.act_in_files=Act in files...
|
202
|
+
ext.file_history.toggle_bookmark=Toggle boomark
|
201
203
|
#output
|
202
204
|
ext.output.menu.output=Output
|
203
205
|
ext.output.menu.save=Save
|
@@ -230,7 +232,7 @@ ext.ruby_debug.client.e.socket_session.2=Error on socket session : $0:$1
|
|
230
232
|
ext.ruby_debug.client.e.close_session=Error on close session : $0:$1
|
231
233
|
ext.ruby_debug.client.e.start_session=Error on start_session : $0:$1 $2
|
232
234
|
ext.ruby_debug.client.e.stop_session=Error on stop_session : $0:$1
|
233
|
-
ext.ruby_debug.client.e.abort_session=Debugger has finished executing: $
|
235
|
+
ext.ruby_debug.client.e.abort_session=Debugger has finished executing on command $0: $1:$2
|
234
236
|
ext.ruby_debug.client.e.raise.on_read.1=Debugged has finished executing
|
235
237
|
ext.ruby_debug.client.e.raise.on_read.2=Error: on command '$0' => $1 : $2
|
236
238
|
ext.ruby_debug.e.rdebug=Warning: Extension ae-ruby-debug depend upon rdebug command (install it or update system path!)
|
data/conf/arcadia.conf
CHANGED
@@ -103,6 +103,16 @@ titlemenu.tearoff=0
|
|
103
103
|
titlemenu.borderwidth=1
|
104
104
|
titlemenu.relief=flat
|
105
105
|
|
106
|
+
titlebutton.=>>>button
|
107
|
+
titlebutton.background=>>>titlelabel.background
|
108
|
+
titlebutton.foreground=>>>titlelabel.foreground
|
109
|
+
titlebutton.activebackground=>>>titlelabel.activebackground
|
110
|
+
titlebutton.activeforeground=>>>titlelabel.activeforeground
|
111
|
+
titlebutton.borderwidth=1
|
112
|
+
titlebutton.relief=flat
|
113
|
+
titlebutton.direction=above
|
114
|
+
titlebutton.font>>>titlelabel.font
|
115
|
+
|
106
116
|
|
107
117
|
splitter.background=>>>background
|
108
118
|
splitter.highlightbackground=>>>foreground
|
data/conf/arcadia.res.rb
CHANGED
@@ -272,6 +272,28 @@ R0lGODlhCQAJAPIAAP///8ziw4qyRHelIG2eDWaZAP///wAAACH5BAEAAAYA
|
|
272
272
|
LAAAAAAJAAkAAAMdaCFUJEGNQulYFVRWi3YeIIpUk5XCSUFTdyncEyUAOw==
|
273
273
|
EOS
|
274
274
|
|
275
|
+
ARROW_UP_GIF=<<EOS
|
276
|
+
R0lGODlhEAAQAIQYAAIsYxc7ZSZRhUhumUxvnU9yn1F0ok93pFR3pFZ7qVh7
|
277
|
+
qVqEsWePvoKYsXOdzX6p2o+u0Ym15pe225K98aDA5KjK7q7Q97fa////////
|
278
|
+
/////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEK
|
279
|
+
AB8ALAAAAAAQABAAAAVd4CeOHwCQKAkoypmqyXUl7gsg1jRZSK0alYgwUjH4
|
280
|
+
SgXKY8mkFGoAgsRBrVIlhBNgAGF4v2DIwGQSLM7os4A8Ahze8PexRK6bXnib
|
281
|
+
vZ4CNP6Af3MAAYWGhYN7bCIhADs=
|
282
|
+
EOS
|
283
|
+
|
284
|
+
|
285
|
+
STAR_EMPTY_GIF=<<EOS
|
286
|
+
R0lGODlhEAAQAKU3AGRkZHt7e3x8fJKSkpWVlZaWlpqampubm5ycnKmpqaqq
|
287
|
+
qqurq6ysrK2tra6urrCwsLGxsbKysrOzs7S0tLW1tba2tre3t8TExMXFxcbG
|
288
|
+
xsfHx9TU1NXV1djY2NnZ2dvb2+Dg4OHh4eLi4ujo6Ovr6+zs7O3t7e7u7u/v
|
289
|
+
7/Hx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v//
|
290
|
+
/////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1Q
|
291
|
+
ACH5BAEKAD8ALAAAAAAQABAAAAZpwJ9wSCwaj8ghJJIsajRNoscTFUpGI8nR
|
292
|
+
4JhMKh2VqmPxOg7DR4dkWrlerVOpAykmNiuYbBZrcRJHBx4yNTY0HwhIBCB7
|
293
|
+
NDQiBUgMKygXGCksDUgYIApCCyEZRwEUA0QDFQJGAEisVUZBADs=
|
294
|
+
EOS
|
295
|
+
|
296
|
+
|
275
297
|
ADD_GIF=<<EOS
|
276
298
|
R0lGODlhEAAQAMQAADRlpH2m14Oq2LbM5n+o14at2ZCz2pK02pS225++4LXM
|
277
299
|
5rbN5sDT6JW327TM5bfO5rvR57zR5////wAAAAAAAAAAAAAAAAAAAAAAAAAA
|
@@ -1330,6 +1352,12 @@ JgtCBMCTbQcibiFQVqcLIIc3lmdqqRSscTaQiGQK/Dqf0M1nlDldElrvcjkR
|
|
1330
1352
|
eqrNtPhBLrRLK8ELJorJ12VRg0TI1EWXcT5/SWRUSwQAOw==
|
1331
1353
|
EOS
|
1332
1354
|
|
1355
|
+
BOOKMARK_GIF=<<EOS
|
1356
|
+
R0lGODlhEAAQAKECADNmAEC/AP///////yH5BAEKAAIALAAAAAAQABAAAAIw
|
1357
|
+
lB0ZxxwAwWrnMUkNQHPn/WAetXllJpzp+rEq6bKwKTfqa8djvu9XqrCgNJGh
|
1358
|
+
8VAAADs=
|
1359
|
+
EOS
|
1360
|
+
|
1333
1361
|
FOLDER_GIF=<<EOS
|
1334
1362
|
R0lGODlhEgASAMIGAAAAAISCAISChK2qre/Tpffjtf///////yH+EUNyZWF0
|
1335
1363
|
ZWQgd2l0aCBHSU1QACH5BAEAAAcALAAAAAASABIAAANSeLrcPsPJA42BCstx
|
@@ -2030,4 +2058,4 @@ EOS
|
|
2030
2058
|
TREE_VIEW_GIF=<<EOS
|
2031
2059
|
R0lGODlhDgAOAIABAP///////yH5BAEAAAEALAAAAAAOAA4AQAIbjI9poO0P
|
2032
2060
|
gWRxhkkPvlbnt0WI1HyhNn7OCR0FADs=
|
2033
|
-
EOS
|
2061
|
+
EOS
|
data/ext/ae-editor/ae-editor.rb
CHANGED
@@ -45,7 +45,11 @@ class SourceStructure
|
|
45
45
|
attr_reader :root
|
46
46
|
|
47
47
|
def initialize
|
48
|
-
@root =
|
48
|
+
@root = SourceStructure.root
|
49
|
+
end
|
50
|
+
|
51
|
+
def SourceStructure.root
|
52
|
+
SourceTreeNode.new(nil, 'root'){|_node|
|
49
53
|
_node.rif= 'root'
|
50
54
|
_node.label=''
|
51
55
|
}
|
@@ -797,6 +801,31 @@ class AgEditorOutlineToolbar
|
|
797
801
|
}
|
798
802
|
@sync = false
|
799
803
|
@cb_sync.command(do_check)
|
804
|
+
|
805
|
+
#----
|
806
|
+
go_to_parent = proc{
|
807
|
+
e = @controller.active_instance.raised
|
808
|
+
if e
|
809
|
+
no = e.outline.last_opened
|
810
|
+
if no
|
811
|
+
e.outline.tree_exp.see(no)
|
812
|
+
else
|
813
|
+
_selected = e.outline.tree_exp.selected
|
814
|
+
if _selected && e.outline.tree_exp.exist?(_selected)
|
815
|
+
_parent = e.outline.tree_exp.parent(_selected)
|
816
|
+
if _parent && _parent != 'root'
|
817
|
+
e.outline.tree_exp.see(_parent)
|
818
|
+
else
|
819
|
+
e.outline.tree_exp.see(_selected)
|
820
|
+
end
|
821
|
+
end
|
822
|
+
end
|
823
|
+
end
|
824
|
+
|
825
|
+
}
|
826
|
+
|
827
|
+
@b_goto_p = @controller.main_instance.frame(1).root.add_button(@controller.main_instance.frame(1).name, Arcadia.text("ext.editor.button.up.hint"), go_to_parent, ARROW_UP_GIF)
|
828
|
+
#----
|
800
829
|
end
|
801
830
|
|
802
831
|
def sync_on
|
@@ -822,6 +851,7 @@ class AgEditorOutline
|
|
822
851
|
attr_reader :last_row
|
823
852
|
attr_reader :tree_exp
|
824
853
|
attr_reader :ss
|
854
|
+
attr_reader :last_opened
|
825
855
|
def initialize(_editor, _frame, _bar, _lang=nil)
|
826
856
|
@editor = _editor
|
827
857
|
@frame = _frame
|
@@ -838,7 +868,7 @@ class AgEditorOutline
|
|
838
868
|
end
|
839
869
|
|
840
870
|
# I think this is "if synced expand out the outline for the current selection"
|
841
|
-
def shure_select_node(_node)
|
871
|
+
def shure_select_node(_node, _close_if_opened = true)
|
842
872
|
return if @selecting_node
|
843
873
|
#return if @tree_exp.exist?(_node.rif)
|
844
874
|
@selecting_node = true
|
@@ -856,7 +886,7 @@ class AgEditorOutline
|
|
856
886
|
@last_open_node=parent.rif
|
857
887
|
parent = parent.parent
|
858
888
|
end
|
859
|
-
@tree_exp.close_tree(to_open) if to_open && !@opened
|
889
|
+
@tree_exp.close_tree(to_open) if _close_if_opened && to_open && !@opened
|
860
890
|
@tree_exp.see(_node.rif)
|
861
891
|
ensure
|
862
892
|
@tree_exp.selectcommand(_proc)
|
@@ -865,6 +895,15 @@ class AgEditorOutline
|
|
865
895
|
@tree_exp.call_after_next_show_h_scroll(proc{Tk.update;@tree_exp.see(_node.rif)})
|
866
896
|
end
|
867
897
|
|
898
|
+
def shure_select_line(_line, _close_if_opened = true)
|
899
|
+
if @ss && _line
|
900
|
+
node = @ss.node_by_line(@ss.root, _line)
|
901
|
+
else
|
902
|
+
node = SourceStructure.root
|
903
|
+
end
|
904
|
+
shure_select_node(node, _close_if_opened)
|
905
|
+
end
|
906
|
+
|
868
907
|
def select_without_event(_line)
|
869
908
|
if @ss
|
870
909
|
_node=@ss.deep_node_by_line(@ss.root, _line)
|
@@ -904,11 +943,15 @@ class AgEditorOutline
|
|
904
943
|
@bar.sync = sync_val
|
905
944
|
end
|
906
945
|
}
|
946
|
+
do_open_command = proc{|no|
|
947
|
+
@last_opened = no
|
948
|
+
}
|
907
949
|
@tree_exp = BWidgetTreePatched.new(_frame, Arcadia.style('treepanel')){
|
908
950
|
showlines false
|
909
951
|
deltay 18
|
910
952
|
dragenabled true
|
911
953
|
selectcommand proc{ _tree_goto.call(self) }
|
954
|
+
opencmd do_open_command
|
912
955
|
crosscloseimage Arcadia.image_res(ARROWRIGHT_GIF)
|
913
956
|
crossopenimage Arcadia.image_res(ARROWDOWN_GIF)
|
914
957
|
}
|
@@ -1056,7 +1099,7 @@ class AgEditor
|
|
1056
1099
|
@highlighting = false
|
1057
1100
|
@classbrowsing = false
|
1058
1101
|
@codeinsight = false
|
1059
|
-
|
1102
|
+
#@find = @controller.get_find
|
1060
1103
|
@read_only=false
|
1061
1104
|
@loading=false
|
1062
1105
|
@tabs_show = false
|
@@ -1677,7 +1720,7 @@ class AgEditor
|
|
1677
1720
|
when 'F5'
|
1678
1721
|
run_buffer
|
1679
1722
|
when 'F3'
|
1680
|
-
@
|
1723
|
+
@controller.get_find.do_find_next
|
1681
1724
|
when 'F1'
|
1682
1725
|
line, col = @text.index('insert').split('.')
|
1683
1726
|
_x, _y = xy_insert
|
@@ -1811,20 +1854,20 @@ class AgEditor
|
|
1811
1854
|
end
|
1812
1855
|
end
|
1813
1856
|
end
|
1814
|
-
|
1857
|
+
|
1815
1858
|
# show the "find in file" dialog
|
1816
1859
|
def find
|
1817
1860
|
_r = @text.tag_ranges('sel')
|
1818
1861
|
if _r.length>0
|
1819
1862
|
_text=@text.get(_r[0][0],_r[0][1])
|
1820
1863
|
if _text.length > 0
|
1821
|
-
@
|
1864
|
+
@controller.get_find.e_what.text(_text)
|
1822
1865
|
end
|
1823
1866
|
else
|
1824
1867
|
end
|
1825
|
-
@
|
1826
|
-
@
|
1827
|
-
@
|
1868
|
+
@controller.get_find.use(self)
|
1869
|
+
@controller.get_find.e_what.focus
|
1870
|
+
@controller.get_find.show
|
1828
1871
|
end
|
1829
1872
|
|
1830
1873
|
def disactivate_key_binding
|
@@ -1901,6 +1944,8 @@ class AgEditor
|
|
1901
1944
|
@text_line_num.tag_configure('normal_case', 'justify'=>'right')
|
1902
1945
|
@text_line_num.tag_configure('bold_case', 'spacing3'=>delta, 'justify'=>'right')
|
1903
1946
|
@text_line_num.tag_configure('breakpoint', 'background'=>'red','foreground'=>'yellow','borderwidth'=>1, 'relief'=>'raised')
|
1947
|
+
# @text_line_num.tag_configure('bookmark', 'background'=>'blue','foreground'=>'yellow','borderwidth'=>1, 'relief'=>'raised')
|
1948
|
+
@text_line_num.tag_configure('bookmark', 'background'=>'white','foreground'=>'red','borderwidth'=>1, 'relief'=>'raised')
|
1904
1949
|
@text_line_num.tag_configure('current',
|
1905
1950
|
'background'=>Arcadia.conf("activebackground"),
|
1906
1951
|
'foreground'=>Arcadia.conf("activeforeground"),
|
@@ -1961,6 +2006,24 @@ class AgEditor
|
|
1961
2006
|
}
|
1962
2007
|
)
|
1963
2008
|
|
2009
|
+
_pop_up.insert('end',
|
2010
|
+
:command,
|
2011
|
+
:label=> Arcadia.text('ext.file_history.toggle_bookmark'),
|
2012
|
+
:hidemargin => false,
|
2013
|
+
:command=> proc{
|
2014
|
+
if defined?(@text_line_num_current_index)
|
2015
|
+
row = @text_line_num.get(@text_line_num_current_index+' linestart',@text_line_num_current_index+' lineend').strip
|
2016
|
+
ToggleBookmarkEvent.new(self,
|
2017
|
+
'file'=>@file,
|
2018
|
+
'from_row'=>row,
|
2019
|
+
'to_row'=>row,
|
2020
|
+
'persistent'=>File.exists?(@file),
|
2021
|
+
'id'=>@id).go!
|
2022
|
+
end
|
2023
|
+
}
|
2024
|
+
)
|
2025
|
+
|
2026
|
+
|
1964
2027
|
@text_line_num.bind("Button-3",
|
1965
2028
|
proc{|*x|
|
1966
2029
|
_x = TkWinfo.pointerx(@text_line_num)
|
@@ -2020,6 +2083,24 @@ class AgEditor
|
|
2020
2083
|
end
|
2021
2084
|
end
|
2022
2085
|
|
2086
|
+
def add_tag_bookmark(_line)
|
2087
|
+
rel_line = file_line_to_text_line_num_line(_line)
|
2088
|
+
if rel_line
|
2089
|
+
i1 = "#{rel_line}.2"
|
2090
|
+
i2 = i1+' lineend'
|
2091
|
+
@text_line_num.tag_add('bookmark',i1,i2)
|
2092
|
+
end
|
2093
|
+
end
|
2094
|
+
|
2095
|
+
def remove_tag_bookmark(_line)
|
2096
|
+
rel_line = file_line_to_text_line_num_line(_line)
|
2097
|
+
if rel_line
|
2098
|
+
i1 = "#{rel_line}.0"
|
2099
|
+
i2 = i1+' lineend'
|
2100
|
+
@text_line_num.tag_remove('bookmark',i1,i2)
|
2101
|
+
end
|
2102
|
+
end
|
2103
|
+
|
2023
2104
|
def reset_highlight(_from_row=nil)
|
2024
2105
|
if _from_row && @highlighting
|
2025
2106
|
invalidated_begin_zone= zone_of_row(_from_row)
|
@@ -2863,6 +2944,8 @@ class AgEditor
|
|
2863
2944
|
if @line_numbers_visible
|
2864
2945
|
# breakpoint
|
2865
2946
|
b = @controller.breakpoint_lines_on_file(@file)
|
2947
|
+
# bookmark
|
2948
|
+
bm = @controller.bookmark_lines_on_file(@file)
|
2866
2949
|
|
2867
2950
|
@text_line_num.delete('1.0','end')
|
2868
2951
|
_rx, _ry, _width, _heigth = @text.bbox(line_begin_index);
|
@@ -2901,6 +2984,9 @@ class AgEditor
|
|
2901
2984
|
if b.include?(j.to_s)
|
2902
2985
|
add_tag_breakpoint(j)
|
2903
2986
|
end
|
2987
|
+
if bm.include?(j.to_s)
|
2988
|
+
add_tag_bookmark(j)
|
2989
|
+
end
|
2904
2990
|
end
|
2905
2991
|
if _ry && _ry < 0
|
2906
2992
|
@text_line_num.yview_scroll(_ry.abs+2,"pixels")
|
@@ -3474,6 +3560,7 @@ class AgMultiEditorView
|
|
3474
3560
|
end
|
3475
3561
|
|
3476
3562
|
def page_title(_name, _title=nil, _image=nil)
|
3563
|
+
return nil if _name.nil? or _name.strip.length == 0
|
3477
3564
|
@pages[_name]['text'] = _title if _title != nil
|
3478
3565
|
@pages[_name]['image'] = _image if _image != nil
|
3479
3566
|
title = _title
|
@@ -3819,9 +3906,6 @@ class CoderayHighlightScanner < HighlightScanner
|
|
3819
3906
|
@i = nil
|
3820
3907
|
end
|
3821
3908
|
tok = @tok
|
3822
|
-
|
3823
|
-
#p tok
|
3824
|
-
|
3825
3909
|
if tok[1]==:space && tok[0].include?("\n")
|
3826
3910
|
row+=tok[0].count("\n")
|
3827
3911
|
begin_gap = tok[0].split("\n")[-1]
|
@@ -3834,6 +3918,7 @@ class CoderayHighlightScanner < HighlightScanner
|
|
3834
3918
|
toklength = tok[0].length
|
3835
3919
|
t_begin="#{row}.#{col}"
|
3836
3920
|
if tok[0].include?("\n")
|
3921
|
+
#if tok[0].to_s.include?("\n")
|
3837
3922
|
ar = tok[0].split("\n")
|
3838
3923
|
row+=tok[0].count("\n")
|
3839
3924
|
begin_gap = ar[-1]
|
@@ -3875,6 +3960,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
3875
3960
|
ArcadiaProblemEvent.new(self, "type"=>ArcadiaProblemEvent::DEPENDENCE_MISSING_TYPE,"title"=>Arcadia.text("ext.editor.e.ctags.title"), "detail"=>msg).go!
|
3876
3961
|
end
|
3877
3962
|
@breakpoints =Array.new
|
3963
|
+
@bookmarks =Array.new
|
3878
3964
|
@tabs_file =Hash.new
|
3879
3965
|
@tabs_editor =Hash.new
|
3880
3966
|
@raw_buffer_name = Hash.new
|
@@ -3888,6 +3974,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
3888
3974
|
Arcadia.attach_listener(self, RunCmdEvent)
|
3889
3975
|
# Arcadia.attach_listener(self, StartDebugEvent)
|
3890
3976
|
Arcadia.attach_listener(self, FocusEvent)
|
3977
|
+
Arcadia.attach_listener(self, BookmarkEvent)
|
3891
3978
|
end
|
3892
3979
|
|
3893
3980
|
# def on_before_run_ruby_file(_event)
|
@@ -4056,9 +4143,16 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4056
4143
|
end
|
4057
4144
|
@last_active_instance_name = _event.name if _event.name == @name || exist_name?(_event.name)
|
4058
4145
|
end
|
4146
|
+
|
4147
|
+
def deduplicate
|
4148
|
+
@main_frame.pages.each{|page|
|
4149
|
+
main_instance.move_buffer_here(page)
|
4150
|
+
}
|
4151
|
+
super
|
4152
|
+
end
|
4059
4153
|
|
4060
|
-
def duplicate(_name
|
4061
|
-
instance = super(_name)
|
4154
|
+
def duplicate(_name, _dom)
|
4155
|
+
instance = super(_name, _dom, false)
|
4062
4156
|
i_end = @buffer_menu.index('end')
|
4063
4157
|
if i_end
|
4064
4158
|
0.upto(i_end){|j|
|
@@ -4497,6 +4591,80 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4497
4591
|
# end
|
4498
4592
|
# end
|
4499
4593
|
|
4594
|
+
def on_before_bookmark(_event)
|
4595
|
+
_filename = _event.file
|
4596
|
+
if _filename.nil? || _filename == "*CURR"
|
4597
|
+
current_editor = self.raised
|
4598
|
+
_event.persistent=true
|
4599
|
+
if current_editor
|
4600
|
+
if current_editor.file
|
4601
|
+
_event.file=current_editor.file
|
4602
|
+
else
|
4603
|
+
_event.file=current_editor.create_temp_file
|
4604
|
+
_event.id=current_editor.id
|
4605
|
+
_event.persistent=false
|
4606
|
+
end
|
4607
|
+
end
|
4608
|
+
else
|
4609
|
+
current_editor = editor_of(_filename)
|
4610
|
+
end
|
4611
|
+
|
4612
|
+
if _event.from_row != nil && _event.to_row == nil
|
4613
|
+
_event.to_row = _event.from_row
|
4614
|
+
elsif _event.from_row == nil && _event.to_row == nil && _event.row != nil
|
4615
|
+
_event.from_row = _event.row
|
4616
|
+
_event.to_row = _event.row
|
4617
|
+
end
|
4618
|
+
|
4619
|
+
if _event.range == nil
|
4620
|
+
_event.range=0
|
4621
|
+
end
|
4622
|
+
|
4623
|
+
if _event.from_row == nil && current_editor != nil
|
4624
|
+
r_sel = current_editor.text.tag_ranges('sel')
|
4625
|
+
if !r_sel.empty?
|
4626
|
+
_event.from_row = r_sel[0][0].split('.')[0].to_i
|
4627
|
+
_event.to_row = r_sel[r_sel.length - 1][1].split('.')[0].to_i
|
4628
|
+
else
|
4629
|
+
_event.from_row = current_editor.text.index('insert').split('.')[0].to_i
|
4630
|
+
_event.to_row = _event.from_row
|
4631
|
+
end
|
4632
|
+
end
|
4633
|
+
|
4634
|
+
case _event
|
4635
|
+
when SetBookmarkEvent
|
4636
|
+
#set
|
4637
|
+
if _event.persistent
|
4638
|
+
@bookmarks << {:file=>_event.file,:from_line=>_event.from_row, :to_line=>_event.to_row}
|
4639
|
+
_e = @tabs_editor[tab_file_name(_event.file)]
|
4640
|
+
else
|
4641
|
+
@bookmarks << {:file=>"__TMP__#{_event.id}",:from_line=>_event.from_row, :to_line=>_event.to_row}
|
4642
|
+
_e = @editors[_event.id]
|
4643
|
+
end
|
4644
|
+
if _e
|
4645
|
+
index_from = "#{_event.from_row}.0"
|
4646
|
+
index_to = "#{_event.to_row}.0 lineend"
|
4647
|
+
_event.content = _e.text.get(index_from, index_to)
|
4648
|
+
_event.from_row.upto(_event.to_row) do |row|
|
4649
|
+
_e.add_tag_bookmark(row)
|
4650
|
+
end
|
4651
|
+
end
|
4652
|
+
when UnsetBookmarkEvent
|
4653
|
+
#unset
|
4654
|
+
@bookmarks.delete_if{|b| (b[:file]==_event.file && b[:from_line]==_event.from_row)}
|
4655
|
+
if _event.file && File.exists?(_event.file)
|
4656
|
+
_e = @tabs_editor[tab_file_name(_event.file)]
|
4657
|
+
elsif _event.id
|
4658
|
+
_e = @editors[_event.id]
|
4659
|
+
end
|
4660
|
+
_event.from_row.upto(_event.to_row) do |row|
|
4661
|
+
_e.remove_tag_bookmark(row) if _e
|
4662
|
+
end
|
4663
|
+
end
|
4664
|
+
end
|
4665
|
+
|
4666
|
+
|
4667
|
+
|
4500
4668
|
def on_before_step_debug(_event)
|
4501
4669
|
debug_reset
|
4502
4670
|
end
|
@@ -4597,7 +4765,8 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4597
4765
|
elsif !editor_exist?(_event.file) && _event.last_row
|
4598
4766
|
_index = _event.last_row.to_s+'.0'
|
4599
4767
|
end
|
4600
|
-
if _event.kind_of?(OpenBufferTransientEvent)
|
4768
|
+
if _event.kind_of?(OpenBufferTransientEvent)
|
4769
|
+
if conf('close-last-if-not-modified')=="yes"
|
4601
4770
|
if defined?(@last_transient_file) && !@last_transient_file.nil? && @last_transient_file != _event.file
|
4602
4771
|
_e = @tabs_editor[tab_name(@last_transient_file)]
|
4603
4772
|
if _e && !_e.modified_from_opening?
|
@@ -4608,6 +4777,10 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4608
4777
|
@last_transient_file = _event.file
|
4609
4778
|
else
|
4610
4779
|
@last_transient_file = nil
|
4780
|
+
_event.transient = false
|
4781
|
+
end
|
4782
|
+
else
|
4783
|
+
_event.transient = false
|
4611
4784
|
end
|
4612
4785
|
end
|
4613
4786
|
if _event.select_index.nil?
|
@@ -4814,6 +4987,18 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4814
4987
|
}
|
4815
4988
|
return result
|
4816
4989
|
end
|
4990
|
+
|
4991
|
+
def bookmark_lines_on_file(_file)
|
4992
|
+
result = Array.new
|
4993
|
+
@bookmarks.each{|value|
|
4994
|
+
if value[:file]==_file
|
4995
|
+
value[:from_line].upto(value[:to_line]) do |i|
|
4996
|
+
result << i.to_s
|
4997
|
+
end
|
4998
|
+
end
|
4999
|
+
}
|
5000
|
+
return result
|
5001
|
+
end
|
4817
5002
|
|
4818
5003
|
def on_layout_raising_frame(_event)
|
4819
5004
|
if _event.extension_name == "editor" && _event.frame_name=="editor_outline"
|
@@ -4861,46 +5046,46 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4861
5046
|
self
|
4862
5047
|
end
|
4863
5048
|
|
4864
|
-
def
|
4865
|
-
if @
|
4866
|
-
@
|
4867
|
-
@
|
5049
|
+
def chrono_bookmark_add(_file, _index)
|
5050
|
+
if @chrono_bookmarks == nil
|
5051
|
+
@chrono_bookmarks = Array.new
|
5052
|
+
@chrono_bookmarks_index = - 1
|
4868
5053
|
else
|
4869
|
-
_cur_file, _cur_index = @
|
5054
|
+
_cur_file, _cur_index = @chrono_bookmarks[@chrono_bookmarks_index]
|
4870
5055
|
if _cur_file == _file && _cur_index == _index
|
4871
5056
|
#@arcadia.outln('uguale ----> '+_file+':'+_index)
|
4872
5057
|
return
|
4873
5058
|
end
|
4874
|
-
@
|
5059
|
+
@chrono_bookmarks = @chrono_bookmarks[0..@chrono_bookmarks_index]
|
4875
5060
|
end
|
4876
|
-
@
|
4877
|
-
@
|
5061
|
+
@chrono_bookmarks << [_file, _index]
|
5062
|
+
@chrono_bookmarks_index = @chrono_bookmarks.length - 1
|
4878
5063
|
#@arcadia.outln('add ----> '+_file+':'+_index)
|
4879
5064
|
end
|
4880
5065
|
|
4881
|
-
def
|
4882
|
-
@
|
4883
|
-
@
|
5066
|
+
def chrono_bookmark_clear
|
5067
|
+
@chrono_bookmarks.clear
|
5068
|
+
@chrono_bookmarks_index = - 1
|
4884
5069
|
end
|
4885
5070
|
|
4886
|
-
def
|
4887
|
-
return if @
|
4888
|
-
|
5071
|
+
def chrono_bookmark_next
|
5072
|
+
return if @chrono_bookmarks == nil || @chrono_bookmarks_index >= @chrono_bookmarks.length - 1
|
5073
|
+
chrono_bookmark_move(+1)
|
4889
5074
|
end
|
4890
5075
|
|
4891
|
-
def
|
4892
|
-
@
|
5076
|
+
def chrono_bookmark_move(_n=0)
|
5077
|
+
@chrono_bookmarks_index = @chrono_bookmarks_index + _n
|
4893
5078
|
#Tk.messageBox('message'=>@bookmarks_index.to_s)
|
4894
|
-
_file, _index = @
|
5079
|
+
_file, _index = @chrono_bookmarks[@chrono_bookmarks_index]
|
4895
5080
|
_line, _col = _index.split('.') if _index
|
4896
5081
|
open_file(_file, _index)
|
4897
5082
|
#openfile(@bookmarks[@bookmarks_index])
|
4898
5083
|
end
|
4899
5084
|
|
4900
5085
|
|
4901
|
-
def
|
4902
|
-
return if @
|
4903
|
-
|
5086
|
+
def chrono_bookmark_prev
|
5087
|
+
return if @chrono_bookmarks == nil || @chrono_bookmarks_index <= 0
|
5088
|
+
chrono_bookmark_move(-1)
|
4904
5089
|
end
|
4905
5090
|
|
4906
5091
|
|
@@ -4921,7 +5106,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4921
5106
|
end
|
4922
5107
|
|
4923
5108
|
def unname_modified(_name)
|
4924
|
-
return _name.gsub("(...)",'')
|
5109
|
+
return (_name && _name.strip.length > 0) ? _name.gsub("(...)",'') : nil
|
4925
5110
|
end
|
4926
5111
|
|
4927
5112
|
|
@@ -5005,13 +5190,10 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5005
5190
|
if @arcadia.layout.headed?
|
5006
5191
|
if frame.root.title == frame.title || @last_frame_caption != _new_caption
|
5007
5192
|
make_buffer_string(@main_frame.page(_name)['text']) if @main_frame.page(_name)
|
5008
|
-
#@buffer_menu_button.configure('image'=>@main_frame.page(_name)['image']) if @main_frame.page(_name)
|
5009
|
-
# frame.root.top_text(@main_frame.page(_name)['text'], @main_frame.page(_name)['image']) if @main_frame.page(_name)
|
5010
5193
|
frame.root.top_text(top_text_string, @main_frame.page(_name)['image']) if @main_frame.page(_name)
|
5011
5194
|
frame.root.top_text_hint(_new_caption)
|
5012
5195
|
@last_frame_caption = _new_caption
|
5013
5196
|
end
|
5014
|
-
# frame.root.save_caption(frame.name, @main_frame.page(_name)['text'], @main_frame.page(_name)['image'])
|
5015
5197
|
end
|
5016
5198
|
end
|
5017
5199
|
|
@@ -5474,12 +5656,21 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5474
5656
|
# @raw_buffer_name.delete_if {|key, value| value == _name }
|
5475
5657
|
_index = @main_frame.index(_name)
|
5476
5658
|
@main_frame.delete_page(_name, !_moved)
|
5477
|
-
if
|
5478
|
-
|
5479
|
-
|
5480
|
-
|
5481
|
-
|
5482
|
-
|
5659
|
+
if is_raised
|
5660
|
+
if !@main_frame.pages.empty? # && is_raised
|
5661
|
+
#@main_frame.raise(@main_frame.pages[_index-1]) if TkWinfo.mapped?(@main_frame.root_frame)
|
5662
|
+
len = @main_frame.pages.length
|
5663
|
+
if _index < len
|
5664
|
+
ind = _index
|
5665
|
+
else
|
5666
|
+
ind = _index-1
|
5667
|
+
end
|
5668
|
+
@main_frame.raise(@main_frame.pages[ind]) if TkWinfo.mapped?(@main_frame.root_frame)
|
5669
|
+
else
|
5670
|
+
frame.root.top_text_clear if TkWinfo.mapped?(frame.hinner_frame)
|
5671
|
+
make_buffer_string("")
|
5672
|
+
reset_status
|
5673
|
+
end
|
5483
5674
|
end
|
5484
5675
|
end
|
5485
5676
|
|
@@ -5752,7 +5943,7 @@ class Finder < Findview
|
|
5752
5943
|
self.editor.text.tag_add('selected',_index,_index+' lineend')
|
5753
5944
|
#self.editor.text.tag_add('sel', _index,_index+' lineend')
|
5754
5945
|
self.editor.text.set_insert(_index)
|
5755
|
-
@controller.
|
5946
|
+
@controller.chrono_bookmark_add(self.editor.file, _index)
|
5756
5947
|
@goto_line_dialog.hide
|
5757
5948
|
end
|
5758
5949
|
#self.hide()
|
@@ -5823,7 +6014,7 @@ class Finder < Findview
|
|
5823
6014
|
@idx1 =_index
|
5824
6015
|
@idx2 =_index_sel_end
|
5825
6016
|
_found = true
|
5826
|
-
@controller.
|
6017
|
+
@controller.chrono_bookmark_add(self.editor.file, _index)
|
5827
6018
|
else
|
5828
6019
|
_message = '"'+@e_what.value+'" not found'
|
5829
6020
|
TkDialog2.new('message'=>_message, 'buttons'=>['Ok']).show()
|