git-gui: Allow the user to manipulate the fonts from the options panel.
This turned out to take a lot more time than I thought it would take; but now users can edit the main UI font and the diff/fixed with font by changing both the family name and/or the point size of the text. We save the complete Tk font specification to the user's ~/.gitconfig file upon saving options. This is probably more verbose than it needs to be as there are many useless options recorded (e.g. -overstrike 0) that a user won't really want to use in this application. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
51f4d16b1d
commit
92148d8091
140
git-gui
140
git-gui
@ -14,8 +14,6 @@ set gitdir {}
|
||||
##
|
||||
## config
|
||||
|
||||
set default_config(gui.trustmtime) false
|
||||
|
||||
proc is_many_config {name} {
|
||||
switch -glob -- $name {
|
||||
remote.*.fetch -
|
||||
@ -69,10 +67,25 @@ proc load_config {} {
|
||||
}
|
||||
|
||||
proc save_config {} {
|
||||
global repo_config global_config default_config
|
||||
global default_config font_descs
|
||||
global repo_config global_config
|
||||
global repo_config_new global_config_new
|
||||
|
||||
foreach name [array names global_config_new] {
|
||||
foreach option $font_descs {
|
||||
set name [lindex $option 0]
|
||||
set font [lindex $option 1]
|
||||
font configure $font \
|
||||
-family $global_config_new(gui.$font^^family) \
|
||||
-size $global_config_new(gui.$font^^size)
|
||||
font configure ${font}bold \
|
||||
-family $global_config_new(gui.$font^^family) \
|
||||
-size $global_config_new(gui.$font^^size)
|
||||
set global_config_new(gui.$name) [font configure $font]
|
||||
unset global_config_new(gui.$font^^family)
|
||||
unset global_config_new(gui.$font^^size)
|
||||
}
|
||||
|
||||
foreach name [array names default_config] {
|
||||
set value $global_config_new($name)
|
||||
if {$value != $global_config($name)} {
|
||||
if {$value == $default_config($name)} {
|
||||
@ -88,7 +101,7 @@ proc save_config {} {
|
||||
}
|
||||
}
|
||||
|
||||
foreach name [array names repo_config_new] {
|
||||
foreach name [array names default_config] {
|
||||
set value $repo_config_new($name)
|
||||
if {$value != $repo_config($name)} {
|
||||
if {$value == $global_config($name)} {
|
||||
@ -158,8 +171,6 @@ if {$appname == {git-citool}} {
|
||||
set single_commit 1
|
||||
}
|
||||
|
||||
load_config
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## task management
|
||||
@ -1680,7 +1691,7 @@ proc do_commit {} {
|
||||
}
|
||||
|
||||
proc do_options {} {
|
||||
global appname gitdir
|
||||
global appname gitdir font_descs
|
||||
global repo_config global_config
|
||||
global repo_config_new global_config_new
|
||||
|
||||
@ -1702,19 +1713,25 @@ proc do_options {} {
|
||||
pack $w.header -side top -fill x
|
||||
|
||||
frame $w.buttons
|
||||
button $w.buttons.restore -text {Restore Defaults} \
|
||||
-font font_ui \
|
||||
-command do_restore_defaults
|
||||
pack $w.buttons.restore -side left
|
||||
button $w.buttons.save -text Save \
|
||||
-font font_ui \
|
||||
-command "save_config; destroy $w"
|
||||
-command [list do_save_config $w]
|
||||
pack $w.buttons.save -side right
|
||||
button $w.buttons.cancel -text {Cancel} \
|
||||
-font font_ui \
|
||||
-command "destroy $w"
|
||||
-command [list destroy $w]
|
||||
pack $w.buttons.cancel -side right
|
||||
pack $w.buttons -side bottom -anchor e -pady 10 -padx 10
|
||||
pack $w.buttons -side bottom -fill x -pady 10 -padx 10
|
||||
|
||||
labelframe $w.repo -text {This Repository} \
|
||||
-font font_ui \
|
||||
-relief raised -borderwidth 2
|
||||
labelframe $w.global -text {Global (All Repositories)} \
|
||||
-font font_ui \
|
||||
-relief raised -borderwidth 2
|
||||
pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5
|
||||
pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5
|
||||
@ -1734,6 +1751,33 @@ proc do_options {} {
|
||||
}
|
||||
}
|
||||
|
||||
set all_fonts [lsort [font families]]
|
||||
foreach option $font_descs {
|
||||
set name [lindex $option 0]
|
||||
set font [lindex $option 1]
|
||||
set text [lindex $option 2]
|
||||
|
||||
set global_config_new(gui.$font^^family) \
|
||||
[font configure $font -family]
|
||||
set global_config_new(gui.$font^^size) \
|
||||
[font configure $font -size]
|
||||
|
||||
frame $w.global.$name
|
||||
label $w.global.$name.l -text "$text:" -font font_ui
|
||||
pack $w.global.$name.l -side left -anchor w -fill x
|
||||
eval tk_optionMenu $w.global.$name.family \
|
||||
global_config_new(gui.$font^^family) \
|
||||
$all_fonts
|
||||
spinbox $w.global.$name.size \
|
||||
-textvariable global_config_new(gui.$font^^size) \
|
||||
-from 2 -to 80 -increment 1 \
|
||||
-width 3 \
|
||||
-font font_ui
|
||||
pack $w.global.$name.size -side right -anchor e
|
||||
pack $w.global.$name.family -side right -anchor e
|
||||
pack $w.global.$name -side top -anchor w -fill x
|
||||
}
|
||||
|
||||
bind $w <Visibility> "grab $w; focus $w"
|
||||
bind $w <Key-Escape> "destroy $w"
|
||||
wm title $w "$appname ([lindex [file split \
|
||||
@ -1742,6 +1786,38 @@ proc do_options {} {
|
||||
tkwait window $w
|
||||
}
|
||||
|
||||
proc do_restore_defaults {} {
|
||||
global font_descs default_config
|
||||
global repo_config_new global_config_new
|
||||
|
||||
foreach name [array names default_config] {
|
||||
set repo_config_new($name) $default_config($name)
|
||||
set global_config_new($name) $default_config($name)
|
||||
}
|
||||
|
||||
foreach option $font_descs {
|
||||
set name [lindex $option 0]
|
||||
set repo_config($name) $default_config(gui.$name)
|
||||
}
|
||||
apply_config
|
||||
|
||||
foreach option $font_descs {
|
||||
set name [lindex $option 0]
|
||||
set font [lindex $option 1]
|
||||
set global_config_new(gui.$font^^family) \
|
||||
[font configure $font -family]
|
||||
set global_config_new(gui.$font^^size) \
|
||||
[font configure $font -size]
|
||||
}
|
||||
}
|
||||
|
||||
proc do_save_config {w} {
|
||||
if {[catch {save_config} err]} {
|
||||
error_popup "Failed to completely save options:\n\n$err"
|
||||
}
|
||||
destroy $w
|
||||
}
|
||||
|
||||
# shift == 1: left click
|
||||
# 3: right click
|
||||
proc click {w x y shift wx wy} {
|
||||
@ -1774,7 +1850,7 @@ proc unclick {w x y} {
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## ui init
|
||||
## config defaults
|
||||
|
||||
set cursor_ptr arrow
|
||||
font create font_diff -family Courier -size 10
|
||||
@ -1785,10 +1861,8 @@ catch {
|
||||
destroy .dummy
|
||||
}
|
||||
|
||||
eval font create font_uibold [font configure font_ui]
|
||||
font configure font_uibold -weight bold
|
||||
eval font create font_diffbold [font configure font_diff]
|
||||
font configure font_diffbold -weight bold
|
||||
font create font_uibold
|
||||
font create font_diffbold
|
||||
|
||||
set M1B M1
|
||||
set M1T M1
|
||||
@ -1800,6 +1874,40 @@ if {$tcl_platform(platform) == {windows}} {
|
||||
set M1T Cmd
|
||||
}
|
||||
|
||||
proc apply_config {} {
|
||||
global repo_config font_descs
|
||||
|
||||
foreach option $font_descs {
|
||||
set name [lindex $option 0]
|
||||
set font [lindex $option 1]
|
||||
if {[catch {
|
||||
foreach {cn cv} $repo_config(gui.$name) {
|
||||
font configure $font $cn $cv
|
||||
}
|
||||
} err]} {
|
||||
error_popup "Invalid font specified in gui.$name:\n\n$err"
|
||||
}
|
||||
foreach {cn cv} [font configure $font] {
|
||||
font configure ${font}bold $cn $cv
|
||||
}
|
||||
font configure ${font}bold -weight bold
|
||||
}
|
||||
}
|
||||
|
||||
set default_config(gui.trustmtime) false
|
||||
set default_config(gui.fontui) [font configure font_ui]
|
||||
set default_config(gui.fontdiff) [font configure font_diff]
|
||||
set font_descs {
|
||||
{fontui font_ui {Main Font}}
|
||||
{fontdiff font_diff {Diff/Console Font}}
|
||||
}
|
||||
load_config
|
||||
apply_config
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## ui construction
|
||||
|
||||
# -- Menu Bar
|
||||
menu .mbar -tearoff 0
|
||||
.mbar add cascade -label Project -menu .mbar.project
|
||||
|
Loading…
Reference in New Issue
Block a user