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