]>
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 | |
8 | ||
9 | foreach option $font_descs { | |
10 | set name [lindex $option 0] | |
11 | set font [lindex $option 1] | |
12 | font configure $font \ | |
13 | -family $global_config_new(gui.$font^^family) \ | |
14 | -size $global_config_new(gui.$font^^size) | |
15 | font configure ${font}bold \ | |
16 | -family $global_config_new(gui.$font^^family) \ | |
17 | -size $global_config_new(gui.$font^^size) | |
debcd0fd SP |
18 | font configure ${font}italic \ |
19 | -family $global_config_new(gui.$font^^family) \ | |
20 | -size $global_config_new(gui.$font^^size) | |
f522c9b5 SP |
21 | set global_config_new(gui.$name) [font configure $font] |
22 | unset global_config_new(gui.$font^^family) | |
23 | unset global_config_new(gui.$font^^size) | |
24 | } | |
25 | ||
26 | foreach name [array names default_config] { | |
27 | set value $global_config_new($name) | |
28 | if {$value ne $global_config($name)} { | |
29 | if {$value eq $default_config($name)} { | |
30 | catch {git config --global --unset $name} | |
31 | } else { | |
32 | regsub -all "\[{}\]" $value {"} value | |
33 | git config --global $name $value | |
34 | } | |
35 | set global_config($name) $value | |
36 | if {$value eq $repo_config($name)} { | |
37 | catch {git config --unset $name} | |
38 | set repo_config($name) $value | |
39 | } | |
40 | } | |
41 | } | |
42 | ||
43 | foreach name [array names default_config] { | |
44 | set value $repo_config_new($name) | |
45 | if {$value ne $repo_config($name)} { | |
46 | if {$value eq $global_config($name)} { | |
47 | catch {git config --unset $name} | |
48 | } else { | |
49 | regsub -all "\[{}\]" $value {"} value | |
50 | git config $name $value | |
51 | } | |
52 | set repo_config($name) $value | |
53 | } | |
54 | } | |
55 | } | |
56 | ||
57 | proc do_about {} { | |
26ae37d6 | 58 | global appvers copyright oguilib |
f522c9b5 SP |
59 | global tcl_patchLevel tk_patchLevel |
60 | ||
61 | set w .about_dialog | |
62 | toplevel $w | |
63 | wm geometry $w "+[winfo rootx .]+[winfo rooty .]" | |
64 | ||
65 | label $w.header -text "About [appname]" \ | |
66 | -font font_uibold | |
67 | pack $w.header -side top -fill x | |
68 | ||
69 | frame $w.buttons | |
70 | button $w.buttons.close -text {Close} \ | |
71 | -default active \ | |
72 | -command [list destroy $w] | |
73 | pack $w.buttons.close -side right | |
74 | pack $w.buttons -side bottom -fill x -pady 10 -padx 10 | |
75 | ||
76 | label $w.desc \ | |
77 | -text "git-gui - a graphical user interface for Git. | |
78 | $copyright" \ | |
79 | -padx 5 -pady 5 \ | |
80 | -justify left \ | |
81 | -anchor w \ | |
82 | -borderwidth 1 \ | |
83 | -relief solid | |
84 | pack $w.desc -side top -fill x -padx 5 -pady 5 | |
85 | ||
86 | set v {} | |
87 | append v "git-gui version $appvers\n" | |
88 | append v "[git version]\n" | |
89 | append v "\n" | |
90 | if {$tcl_patchLevel eq $tk_patchLevel} { | |
91 | append v "Tcl/Tk version $tcl_patchLevel" | |
92 | } else { | |
93 | append v "Tcl version $tcl_patchLevel" | |
94 | append v ", Tk version $tk_patchLevel" | |
95 | } | |
96 | ||
26ae37d6 | 97 | set d {} |
0b812616 | 98 | append d "git wrapper: $::_git\n" |
26ae37d6 SP |
99 | append d "git exec dir: [gitexec]\n" |
100 | append d "git-gui lib: $oguilib" | |
101 | ||
f522c9b5 SP |
102 | label $w.vers \ |
103 | -text $v \ | |
104 | -padx 5 -pady 5 \ | |
105 | -justify left \ | |
106 | -anchor w \ | |
107 | -borderwidth 1 \ | |
108 | -relief solid | |
109 | pack $w.vers -side top -fill x -padx 5 -pady 5 | |
110 | ||
26ae37d6 SP |
111 | label $w.dirs \ |
112 | -text $d \ | |
113 | -padx 5 -pady 5 \ | |
114 | -justify left \ | |
115 | -anchor w \ | |
116 | -borderwidth 1 \ | |
117 | -relief solid | |
118 | pack $w.dirs -side top -fill x -padx 5 -pady 5 | |
119 | ||
f522c9b5 SP |
120 | menu $w.ctxm -tearoff 0 |
121 | $w.ctxm add command \ | |
122 | -label {Copy} \ | |
123 | -command " | |
124 | clipboard clear | |
125 | clipboard append -format STRING -type STRING -- \[$w.vers cget -text\] | |
126 | " | |
127 | ||
128 | bind $w <Visibility> "grab $w; focus $w.buttons.close" | |
129 | bind $w <Key-Escape> "destroy $w" | |
130 | bind $w <Key-Return> "destroy $w" | |
131 | bind_button3 $w.vers "tk_popup $w.ctxm %X %Y; grab $w; focus $w" | |
132 | wm title $w "About [appname]" | |
133 | tkwait window $w | |
134 | } | |
135 | ||
136 | proc do_options {} { | |
137 | global repo_config global_config font_descs | |
138 | global repo_config_new global_config_new | |
139 | ||
140 | array unset repo_config_new | |
141 | array unset global_config_new | |
142 | foreach name [array names repo_config] { | |
143 | set repo_config_new($name) $repo_config($name) | |
144 | } | |
145 | load_config 1 | |
146 | foreach name [array names repo_config] { | |
147 | switch -- $name { | |
148 | gui.diffcontext {continue} | |
149 | } | |
150 | set repo_config_new($name) $repo_config($name) | |
151 | } | |
152 | foreach name [array names global_config] { | |
153 | set global_config_new($name) $global_config($name) | |
154 | } | |
155 | ||
156 | set w .options_editor | |
157 | toplevel $w | |
158 | wm geometry $w "+[winfo rootx .]+[winfo rooty .]" | |
159 | ||
160 | label $w.header -text "Options" \ | |
161 | -font font_uibold | |
162 | pack $w.header -side top -fill x | |
163 | ||
164 | frame $w.buttons | |
165 | button $w.buttons.restore -text {Restore Defaults} \ | |
166 | -default normal \ | |
167 | -command do_restore_defaults | |
168 | pack $w.buttons.restore -side left | |
169 | button $w.buttons.save -text Save \ | |
170 | -default active \ | |
171 | -command [list do_save_config $w] | |
172 | pack $w.buttons.save -side right | |
173 | button $w.buttons.cancel -text {Cancel} \ | |
174 | -default normal \ | |
175 | -command [list destroy $w] | |
176 | pack $w.buttons.cancel -side right -padx 5 | |
177 | pack $w.buttons -side bottom -fill x -pady 10 -padx 10 | |
178 | ||
179 | labelframe $w.repo -text "[reponame] Repository" | |
180 | labelframe $w.global -text {Global (All Repositories)} | |
181 | pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5 | |
182 | pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5 | |
183 | ||
184 | set optid 0 | |
185 | foreach option { | |
186 | {t user.name {User Name}} | |
187 | {t user.email {Email Address}} | |
188 | ||
189 | {b merge.summary {Summarize Merge Commits}} | |
190 | {i-1..5 merge.verbosity {Merge Verbosity}} | |
fc8ce406 | 191 | {b merge.diffstat {Show Diffstat After Merge}} |
f522c9b5 SP |
192 | |
193 | {b gui.trustmtime {Trust File Modification Timestamps}} | |
5b6ffff6 | 194 | {b gui.pruneduringfetch {Prune Tracking Branches During Fetch}} |
7cf04426 | 195 | {b gui.matchtrackingbranch {Match Tracking Branches}} |
b8848f77 | 196 | {i-0..99 gui.diffcontext {Number of Diff Context Lines}} |
f522c9b5 SP |
197 | {t gui.newbranchtemplate {New Branch Name Template}} |
198 | } { | |
199 | set type [lindex $option 0] | |
200 | set name [lindex $option 1] | |
201 | set text [lindex $option 2] | |
202 | incr optid | |
203 | foreach f {repo global} { | |
204 | switch -glob -- $type { | |
205 | b { | |
206 | checkbutton $w.$f.$optid -text $text \ | |
207 | -variable ${f}_config_new($name) \ | |
208 | -onvalue true \ | |
209 | -offvalue false | |
210 | pack $w.$f.$optid -side top -anchor w | |
211 | } | |
212 | i-* { | |
213 | regexp -- {-(\d+)\.\.(\d+)$} $type _junk min max | |
214 | frame $w.$f.$optid | |
215 | label $w.$f.$optid.l -text "$text:" | |
216 | pack $w.$f.$optid.l -side left -anchor w -fill x | |
217 | spinbox $w.$f.$optid.v \ | |
218 | -textvariable ${f}_config_new($name) \ | |
219 | -from $min \ | |
220 | -to $max \ | |
221 | -increment 1 \ | |
222 | -width [expr {1 + [string length $max]}] | |
223 | bind $w.$f.$optid.v <FocusIn> {%W selection range 0 end} | |
224 | pack $w.$f.$optid.v -side right -anchor e -padx 5 | |
225 | pack $w.$f.$optid -side top -anchor w -fill x | |
226 | } | |
227 | t { | |
228 | frame $w.$f.$optid | |
229 | label $w.$f.$optid.l -text "$text:" | |
230 | entry $w.$f.$optid.v \ | |
231 | -borderwidth 1 \ | |
232 | -relief sunken \ | |
233 | -width 20 \ | |
234 | -textvariable ${f}_config_new($name) | |
235 | pack $w.$f.$optid.l -side left -anchor w | |
236 | pack $w.$f.$optid.v -side left -anchor w \ | |
237 | -fill x -expand 1 \ | |
238 | -padx 5 | |
239 | pack $w.$f.$optid -side top -anchor w -fill x | |
240 | } | |
241 | } | |
242 | } | |
243 | } | |
244 | ||
245 | set all_fonts [lsort [font families]] | |
246 | foreach option $font_descs { | |
247 | set name [lindex $option 0] | |
248 | set font [lindex $option 1] | |
249 | set text [lindex $option 2] | |
250 | ||
251 | set global_config_new(gui.$font^^family) \ | |
252 | [font configure $font -family] | |
253 | set global_config_new(gui.$font^^size) \ | |
254 | [font configure $font -size] | |
255 | ||
256 | frame $w.global.$name | |
257 | label $w.global.$name.l -text "$text:" | |
258 | pack $w.global.$name.l -side left -anchor w -fill x | |
259 | eval tk_optionMenu $w.global.$name.family \ | |
260 | global_config_new(gui.$font^^family) \ | |
261 | $all_fonts | |
262 | spinbox $w.global.$name.size \ | |
263 | -textvariable global_config_new(gui.$font^^size) \ | |
264 | -from 2 -to 80 -increment 1 \ | |
265 | -width 3 | |
266 | bind $w.global.$name.size <FocusIn> {%W selection range 0 end} | |
267 | pack $w.global.$name.size -side right -anchor e | |
268 | pack $w.global.$name.family -side right -anchor e | |
269 | pack $w.global.$name -side top -anchor w -fill x | |
270 | } | |
271 | ||
272 | bind $w <Visibility> "grab $w; focus $w.buttons.save" | |
273 | bind $w <Key-Escape> "destroy $w" | |
274 | bind $w <Key-Return> [list do_save_config $w] | |
275 | wm title $w "[appname] ([reponame]): Options" | |
276 | tkwait window $w | |
277 | } | |
278 | ||
279 | proc do_restore_defaults {} { | |
280 | global font_descs default_config repo_config | |
281 | global repo_config_new global_config_new | |
282 | ||
283 | foreach name [array names default_config] { | |
284 | set repo_config_new($name) $default_config($name) | |
285 | set global_config_new($name) $default_config($name) | |
286 | } | |
287 | ||
288 | foreach option $font_descs { | |
289 | set name [lindex $option 0] | |
290 | set repo_config(gui.$name) $default_config(gui.$name) | |
291 | } | |
292 | apply_config | |
293 | ||
294 | foreach option $font_descs { | |
295 | set name [lindex $option 0] | |
296 | set font [lindex $option 1] | |
297 | set global_config_new(gui.$font^^family) \ | |
298 | [font configure $font -family] | |
299 | set global_config_new(gui.$font^^size) \ | |
300 | [font configure $font -size] | |
301 | } | |
302 | } | |
303 | ||
304 | proc do_save_config {w} { | |
305 | if {[catch {save_config} err]} { | |
306 | error_popup "Failed to completely save options:\n\n$err" | |
307 | } | |
308 | reshow_diff | |
309 | destroy $w | |
310 | } |