39 proc create {win args} {
45 if {[
llength $args] & 1} {
46 return -code error "Invalid number of arguments given to ctext (uneven number after window) : $args"
49 frame $win -class Ctext
51 set tmp [text .__ctextTemp]
53 set data($win,config,-fg) [$tmp cget -foreground]
54 set data($win,config,-bg) [$tmp cget -background]
55 set data($win,config,-font) [$tmp cget -font]
56 set data($win,config,-relief) [$tmp cget -relief]
57 set data($win,config,-unhighlightcolor) [$win cget -bg]
59 set data($win,config,-xscrollcommand) ""
60 set data($win,config,-yscrollcommand) ""
61 set data($win,config,-highlightcolor) "yellow"
62 set data($win,config,-linemap) 1
63 set data($win,config,-linemapfg) $data($win,config,-fg)
64 set data($win,config,-linemapbg) $data($win,config,-bg)
65 set data($win,config,-linemap_mark_command) {}
66 set data($win,config,-linemap_markable) 1
67 set data($win,config,-linemap_mark_color) orange
68 set data($win,config,-linemap_cursor) left_ptr
69 set data($win,config,-linemap_relief) $data($win,config,-relief)
70 set data($win,config,-linemap_minwidth) 1
71 set data($win,config,-linemap_type) absolute
72 set data($win,config,-linemap_align) left
73 set data($win,config,-linemap_separator) auto
74 set data($win,config,-linemap_separator_color) red
75 set data($win,config,-highlight) 1
76 set data($win,config,-lmargin) 0
77 set data($win,config,-warnwidth) ""
78 set data($win,config,-warnwidth_bg) red
79 set data($win,config,-casesensitive) 1
80 set data($win,config,-escapes) 1
81 set data($win,config,-peer) ""
82 set data($win,config,-undo) 0
83 set data($win,config,-maxundo) 0
84 set data($win,config,-autoseparators) 0
85 set data($win,config,-diff_mode) 0
86 set data($win,config,-diffsubbg) "pink"
87 set data($win,config,-diffaddbg) "light green"
88 set data($win,config,-folding) 0
89 set data($win,config,-delimiters) $REs(words)
90 set data($win,config,-matchchar) 0
91 set data($win,config,-matchchar_bg) $data($win,config,-fg)
92 set data($win,config,-matchchar_fg) $data($win,config,-bg)
93 set data($win,config,-matchaudit) 0
94 set data($win,config,-matchaudit_bg) "red"
95 set data($win,config,-theme) [list]
96 set data($win,config,-hidemeta) 0
97 set data($win,config,re_opts) ""
98 set data($win,config,win) $win
99 set data($win,config,modified) 0
100 set data($win,config,lastUpdate) 0
101 set data($win,config,csl_array) [list]
102 set data($win,config,csl_markers) [list]
103 set data($win,config,csl_tag_pair) [list]
104 set data($win,config,csl_tags) [list]
105 set data($win,config,langs) [list {}]
106 set data($win,config,gutters) [list]
107 set data($win,config,undo_hist) [list]
108 set data($win,config,undo_hist_size) 0
109 set data($win,config,undo_sep_last) -1
110 set data($win,config,undo_sep_next) -1
111 set data($win,config,undo_sep_size) 0
112 set data($win,config,undo_sep_count) 0
113 set data($win,config,redo_hist) [list]
114 set data($win,config,linemap_cmd_ip) 0
115 set data($win,config,meta_classes) [list]
117 set data($win,config,ctextFlags) [list -xscrollcommand -yscrollcommand -linemap -linemapfg -linemapbg \
118 -font -linemap_mark_command -highlight -warnwidth -warnwidth_bg -linemap_markable \
119 -linemap_cursor -highlightcolor -folding -delimiters -matchchar -matchchar_bg -matchchar_fg -matchaudit -matchaudit_bg \
120 -linemap_mark_color -linemap_relief -linemap_minwidth -linemap_type -linemap_align \
121 -linemap_separator -linemap_separator_color -casesensitive -peer -theme -hidemeta \
122 -undo -maxundo -autoseparators -diff_mode -diffsubbg -diffaddbg -escapes -spacing3 -lmargin]
125 foreach {name value} $args {
126 set data($win,config,$name) $value
129 set data($win,fontwidth) [font measure $data($win,config,-font) -displayof . "0"]
130 set data($win,fontdescent) [font metrics $data($win,config,-font) -displayof . -descent]
132 foreach flag {foreground background} short {fg bg} {
133 if {[
info exists data($win,config,-$flag)] == 1} {
134 set data($win,config,-$short) $data($win,config,-$flag)
135 unset data($win,config,-$flag)
141 foreach arg $data($win,config,ctextFlags) {
142 if {[
set loc [lsearch $args $arg]] >= 0} {
143 set args [
lreplace $args $loc [
expr {$loc + 1}]]
148 set data($win,linemap,id) 0
150 canvas $win.l -relief $data($win,config,-relief) -bd 0 \
151 -bg $data($win,config,-linemapbg) -takefocus 0 -highlightthickness 0
152 frame $win.f -width 1 -bd 0 -relief flat -bg $data($win,config,-linemap_separator_color)
154 set args [
concat $args [list -yscrollcommand [list ctext::event:yscroll $win $data($win,config,-yscrollcommand)]] \
155 [list -xscrollcommand [list ctext::event:xscroll $win $data($win,config,-xscrollcommand)]]]
157 if {$data($win,config,-peer) eq ""} {
158 text $win.t -font $data($win,config,-font) -bd 0 -highlightthickness 0 {*}$args
160 $data($win,config,-peer)._t peer create $win.t -font $data($win,config,-font) -bd 0 -highlightthickness 0 {*}$args
163 frame $win.t.w -width 1 -bd 0 -relief flat -bg $data($win,config,-warnwidth_bg)
165 if {$data($win,config,-warnwidth) ne ""} {
166 place $win.t.w -x [
expr $data($win,config,-lmargin) + [font measure [$win.t cget -font] -displayof . [
string repeat "m" $data($win,config,-warnwidth)]]] -relheight 1.0
169 grid rowconfigure $win 0 -weight 100
170 grid columnconfigure $win 2 -weight 100
171 grid $win.l -row 0 -column 0 -sticky ns
172 grid $win.f -row 0 -column 1 -sticky ns
173 grid $win.t -row 0 -column 2 -sticky news
176 if {!$data($win,config,-linemap) && !$data($win,config,-linemap_markable) && !$data($win,config,-folding)} {
182 $win.t tag configure _visibleH
183 $win.t tag configure _visibleL
184 $win.t tag configure _invisible
185 $win.t tag lower _visibleH sel
186 $win.t tag lower _visibleL _visibleH
187 $win.t tag lower _invisible _visibleL
190 $win.t tag configure __escape
191 $win.t tag configure __prewhite
192 $win.t tag configure rmargin
193 $win.t tag configure lmargin
194 $win.t tag lower __escape _invisible
195 $win.t tag lower __prewhite _invisible
196 $win.t tag lower rmargin _invisible
197 $win.t tag lower lmargin _invisible
200 if {$data($win,config,-matchchar)} {
201 $win.t tag configure matchchar -foreground $data($win,config,-matchchar_fg) -background $data($win,config,-matchchar_bg)
202 $win.t tag lower matchchar sel
206 bind $win.t <Configure> [list ctext::linemapUpdate $win]
207 bind $win.t <<CursorChanged>> [list ctext::linemapUpdate $win]
208 bind $win.l <Button-$right_click> [list ctext::linemapToggleMark $win %x %y]
209 bind $win.l <MouseWheel> [list event generate $win.t <MouseWheel> -delta %D]
210 bind $win.l <4> [list event generate $win.t <4>]
211 bind $win.l <5> [list event generate $win.t <5>]
212 bind $win.t <Destroy> [list ctext::event:Destroy $win]
214 bindtags $win.t [
linsert [
bindtags $win.t] 0 $win]