]>
Commit | Line | Data |
---|---|---|
f522c9b5 SP |
1 | # git-gui options editor |
2 | # Copyright (C) 2006, 2007 Shawn Pearce | |
3 | ||
4 | proc save_config {} { | |
5 | global default_config font_descs | |
6 | global repo_config global_config | |
7 | global repo_config_new global_config_new | |
95b002ee | 8 | global ui_comm_spell |
f522c9b5 SP |
9 | |
10 | foreach option $font_descs { | |
11 | set name [lindex $option 0] | |
12 | set font [lindex $option 1] | |
13 | font configure $font \ | |
14 | -family $global_config_new(gui.$font^^family) \ | |
15 | -size $global_config_new(gui.$font^^size) | |
16 | font configure ${font}bold \ | |
17 | -family $global_config_new(gui.$font^^family) \ | |
18 | -size $global_config_new(gui.$font^^size) | |
debcd0fd SP |
19 | font configure ${font}italic \ |
20 | -family $global_config_new(gui.$font^^family) \ | |
21 | -size $global_config_new(gui.$font^^size) | |
f522c9b5 SP |
22 | set global_config_new(gui.$name) [font configure $font] |
23 | unset global_config_new(gui.$font^^family) | |
24 | unset global_config_new(gui.$font^^size) | |
25 | } | |
26 | ||
27 | foreach name [array names default_config] { | |
28 | set value $global_config_new($name) | |
29 | if {$value ne $global_config($name)} { | |
30 | if {$value eq $default_config($name)} { | |
31 | catch {git config --global --unset $name} | |
32 | } else { | |
33 | regsub -all "\[{}\]" $value {"} value | |
34 | git config --global $name $value | |
35 | } | |
36 | set global_config($name) $value | |
37 | if {$value eq $repo_config($name)} { | |
38 | catch {git config --unset $name} | |
39 | set repo_config($name) $value | |
40 | } | |
41 | } | |
42 | } | |
43 | ||
44 | foreach name [array names default_config] { | |
45 | set value $repo_config_new($name) | |
46 | if {$value ne $repo_config($name)} { | |
47 | if {$value eq $global_config($name)} { | |
48 | catch {git config --unset $name} | |
49 | } else { | |
50 | regsub -all "\[{}\]" $value {"} value | |
51 | git config $name $value | |
52 | } | |
53 | set repo_config($name) $value | |
54 | } | |
55 | } | |
95b002ee SP |
56 | |
57 | if {[info exists repo_config(gui.spellingdictionary)]} { | |
58 | set value $repo_config(gui.spellingdictionary) | |
59 | if {$value eq {none}} { | |
60 | if {[info exists ui_comm_spell]} { | |
61 | $ui_comm_spell stop | |
62 | } | |
63 | } elseif {[info exists ui_comm_spell]} { | |
64 | $ui_comm_spell lang $value | |
65 | } | |
66 | } | |
f522c9b5 SP |
67 | } |
68 | ||
f522c9b5 SP |
69 | proc do_options {} { |
70 | global repo_config global_config font_descs | |
71 | global repo_config_new global_config_new | |
95b002ee | 72 | global ui_comm_spell |
f522c9b5 SP |
73 | |
74 | array unset repo_config_new | |
75 | array unset global_config_new | |
76 | foreach name [array names repo_config] { | |
77 | set repo_config_new($name) $repo_config($name) | |
78 | } | |
79 | load_config 1 | |
80 | foreach name [array names repo_config] { | |
81 | switch -- $name { | |
82 | gui.diffcontext {continue} | |
83 | } | |
84 | set repo_config_new($name) $repo_config($name) | |
85 | } | |
86 | foreach name [array names global_config] { | |
87 | set global_config_new($name) $global_config($name) | |
88 | } | |
89 | ||
90 | set w .options_editor | |
91 | toplevel $w | |
92 | wm geometry $w "+[winfo rootx .]+[winfo rooty .]" | |
93 | ||
f522c9b5 | 94 | frame $w.buttons |
1ac17950 | 95 | button $w.buttons.restore -text [mc "Restore Defaults"] \ |
f522c9b5 SP |
96 | -default normal \ |
97 | -command do_restore_defaults | |
98 | pack $w.buttons.restore -side left | |
1ac17950 | 99 | button $w.buttons.save -text [mc Save] \ |
f522c9b5 SP |
100 | -default active \ |
101 | -command [list do_save_config $w] | |
102 | pack $w.buttons.save -side right | |
1ac17950 | 103 | button $w.buttons.cancel -text [mc "Cancel"] \ |
f522c9b5 SP |
104 | -default normal \ |
105 | -command [list destroy $w] | |
106 | pack $w.buttons.cancel -side right -padx 5 | |
107 | pack $w.buttons -side bottom -fill x -pady 10 -padx 10 | |
108 | ||
1ac17950 CS |
109 | labelframe $w.repo -text [mc "%s Repository" [reponame]] |
110 | labelframe $w.global -text [mc "Global (All Repositories)"] | |
f522c9b5 SP |
111 | pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5 |
112 | pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5 | |
113 | ||
114 | set optid 0 | |
115 | foreach option { | |
1ac17950 CS |
116 | {t user.name {mc "User Name"}} |
117 | {t user.email {mc "Email Address"}} | |
118 | ||
119 | {b merge.summary {mc "Summarize Merge Commits"}} | |
120 | {i-1..5 merge.verbosity {mc "Merge Verbosity"}} | |
121 | {b merge.diffstat {mc "Show Diffstat After Merge"}} | |
122 | ||
123 | {b gui.trustmtime {mc "Trust File Modification Timestamps"}} | |
124 | {b gui.pruneduringfetch {mc "Prune Tracking Branches During Fetch"}} | |
125 | {b gui.matchtrackingbranch {mc "Match Tracking Branches"}} | |
57cae87b AG |
126 | {b gui.fastcopyblame {mc "Blame Copy Only On Changed Files"}} |
127 | {i-20..200 gui.copyblamethreshold {mc "Minimum Letters To Blame Copy On"}} | |
1ac17950 | 128 | {i-0..99 gui.diffcontext {mc "Number of Diff Context Lines"}} |
11027d54 | 129 | {i-0..99 gui.commitmsgwidth {mc "Commit Message Text Width"}} |
1ac17950 | 130 | {t gui.newbranchtemplate {mc "New Branch Name Template"}} |
f522c9b5 SP |
131 | } { |
132 | set type [lindex $option 0] | |
133 | set name [lindex $option 1] | |
1ac17950 | 134 | set text [eval [lindex $option 2]] |
f522c9b5 SP |
135 | incr optid |
136 | foreach f {repo global} { | |
137 | switch -glob -- $type { | |
138 | b { | |
139 | checkbutton $w.$f.$optid -text $text \ | |
140 | -variable ${f}_config_new($name) \ | |
141 | -onvalue true \ | |
142 | -offvalue false | |
143 | pack $w.$f.$optid -side top -anchor w | |
144 | } | |
145 | i-* { | |
146 | regexp -- {-(\d+)\.\.(\d+)$} $type _junk min max | |
147 | frame $w.$f.$optid | |
148 | label $w.$f.$optid.l -text "$text:" | |
149 | pack $w.$f.$optid.l -side left -anchor w -fill x | |
150 | spinbox $w.$f.$optid.v \ | |
151 | -textvariable ${f}_config_new($name) \ | |
152 | -from $min \ | |
153 | -to $max \ | |
154 | -increment 1 \ | |
155 | -width [expr {1 + [string length $max]}] | |
156 | bind $w.$f.$optid.v <FocusIn> {%W selection range 0 end} | |
157 | pack $w.$f.$optid.v -side right -anchor e -padx 5 | |
158 | pack $w.$f.$optid -side top -anchor w -fill x | |
159 | } | |
160 | t { | |
161 | frame $w.$f.$optid | |
162 | label $w.$f.$optid.l -text "$text:" | |
163 | entry $w.$f.$optid.v \ | |
164 | -borderwidth 1 \ | |
165 | -relief sunken \ | |
166 | -width 20 \ | |
167 | -textvariable ${f}_config_new($name) | |
168 | pack $w.$f.$optid.l -side left -anchor w | |
169 | pack $w.$f.$optid.v -side left -anchor w \ | |
170 | -fill x -expand 1 \ | |
171 | -padx 5 | |
172 | pack $w.$f.$optid -side top -anchor w -fill x | |
173 | } | |
174 | } | |
175 | } | |
176 | } | |
177 | ||
95b002ee SP |
178 | set all_dicts [linsert \ |
179 | [spellcheck::available_langs] \ | |
180 | 0 \ | |
181 | none] | |
182 | incr optid | |
183 | foreach f {repo global} { | |
184 | if {![info exists ${f}_config_new(gui.spellingdictionary)]} { | |
185 | if {[info exists ui_comm_spell]} { | |
186 | set value [$ui_comm_spell lang] | |
187 | } else { | |
188 | set value none | |
189 | } | |
190 | set ${f}_config_new(gui.spellingdictionary) $value | |
191 | } | |
192 | ||
193 | frame $w.$f.$optid | |
194 | label $w.$f.$optid.l -text [mc "Spelling Dictionary:"] | |
195 | eval tk_optionMenu $w.$f.$optid.v \ | |
196 | ${f}_config_new(gui.spellingdictionary) \ | |
197 | $all_dicts | |
198 | pack $w.$f.$optid.l -side left -anchor w -fill x | |
740b9b9f | 199 | pack $w.$f.$optid.v -side right -anchor e -padx 5 |
95b002ee SP |
200 | pack $w.$f.$optid -side top -anchor w -fill x |
201 | } | |
202 | unset all_dicts | |
203 | ||
f522c9b5 SP |
204 | set all_fonts [lsort [font families]] |
205 | foreach option $font_descs { | |
206 | set name [lindex $option 0] | |
207 | set font [lindex $option 1] | |
1ac17950 | 208 | set text [eval [lindex $option 2]] |
f522c9b5 SP |
209 | |
210 | set global_config_new(gui.$font^^family) \ | |
211 | [font configure $font -family] | |
212 | set global_config_new(gui.$font^^size) \ | |
213 | [font configure $font -size] | |
214 | ||
215 | frame $w.global.$name | |
216 | label $w.global.$name.l -text "$text:" | |
afe2098d SP |
217 | button $w.global.$name.b \ |
218 | -text [mc "Change Font"] \ | |
219 | -command [list \ | |
220 | choose_font::pick \ | |
221 | $w \ | |
222 | [mc "Choose %s" $text] \ | |
223 | global_config_new(gui.$font^^family) \ | |
224 | global_config_new(gui.$font^^size) \ | |
225 | ] | |
226 | label $w.global.$name.f -textvariable global_config_new(gui.$font^^family) | |
227 | label $w.global.$name.s -textvariable global_config_new(gui.$font^^size) | |
228 | label $w.global.$name.pt -text [mc "pt."] | |
229 | pack $w.global.$name.l -side left -anchor w | |
230 | pack $w.global.$name.b -side right -anchor e | |
231 | pack $w.global.$name.pt -side right -anchor w | |
232 | pack $w.global.$name.s -side right -anchor w | |
233 | pack $w.global.$name.f -side right -anchor w | |
f522c9b5 SP |
234 | pack $w.global.$name -side top -anchor w -fill x |
235 | } | |
236 | ||
237 | bind $w <Visibility> "grab $w; focus $w.buttons.save" | |
238 | bind $w <Key-Escape> "destroy $w" | |
239 | bind $w <Key-Return> [list do_save_config $w] | |
13824e2d SP |
240 | |
241 | if {[is_MacOSX]} { | |
242 | set t [mc "Preferences"] | |
243 | } else { | |
244 | set t [mc "Options"] | |
245 | } | |
246 | wm title $w "[appname] ([reponame]): $t" | |
f522c9b5 SP |
247 | tkwait window $w |
248 | } | |
249 | ||
250 | proc do_restore_defaults {} { | |
251 | global font_descs default_config repo_config | |
252 | global repo_config_new global_config_new | |
253 | ||
254 | foreach name [array names default_config] { | |
255 | set repo_config_new($name) $default_config($name) | |
256 | set global_config_new($name) $default_config($name) | |
257 | } | |
258 | ||
259 | foreach option $font_descs { | |
260 | set name [lindex $option 0] | |
261 | set repo_config(gui.$name) $default_config(gui.$name) | |
262 | } | |
263 | apply_config | |
264 | ||
265 | foreach option $font_descs { | |
266 | set name [lindex $option 0] | |
267 | set font [lindex $option 1] | |
268 | set global_config_new(gui.$font^^family) \ | |
269 | [font configure $font -family] | |
270 | set global_config_new(gui.$font^^size) \ | |
271 | [font configure $font -size] | |
272 | } | |
273 | } | |
274 | ||
275 | proc do_save_config {w} { | |
276 | if {[catch {save_config} err]} { | |
31bb1d1b | 277 | error_popup [strcat [mc "Failed to completely save options:"] "\n\n$err"] |
f522c9b5 SP |
278 | } |
279 | reshow_diff | |
280 | destroy $w | |
281 | } |