@@ -2516,6 +2516,13 @@ proc makewindow {} {
2516
2516
} else {
2517
2517
bindall <ButtonRelease-4> " allcanvs yview scroll -5 units"
2518
2518
bindall <ButtonRelease-5> " allcanvs yview scroll 5 units"
2519
+ bind $ctext <Button> {
2520
+ if {" %b" eq 6} {
2521
+ $ctext xview scroll -5 units
2522
+ } elseif {" %b" eq 7} {
2523
+ $ctext xview scroll 5 units
2524
+ }
2525
+ }
2519
2526
if {[tk windowingsystem] eq " aqua" } {
2520
2527
bindall <MouseWheel> {
2521
2528
set delta [expr {- (%D)}]
@@ -2776,33 +2783,87 @@ proc doprogupdate {} {
2776
2783
}
2777
2784
}
2778
2785
2786
+ proc config_check_tmp_exists {tries_left} {
2787
+ global config_file_tmp
2788
+
2789
+ if {[file exists $config_file_tmp ]} {
2790
+ incr tries_left -1
2791
+ if {$tries_left > 0} {
2792
+ after 100 [list config_check_tmp_exists $tries_left ]
2793
+ } else {
2794
+ error_popup " There appears to be a stale $config_file_tmp \
2795
+ file, which will prevent gitk from saving its configuration on exit.\
2796
+ Please remove it if it is not being used by any existing gitk process."
2797
+ }
2798
+ }
2799
+ }
2800
+
2801
+ proc config_init_trace {name} {
2802
+ global config_variable_changed config_variable_original
2803
+
2804
+ upvar #0 $name var
2805
+ set config_variable_changed($name ) 0
2806
+ set config_variable_original($name ) $var
2807
+ }
2808
+
2809
+ proc config_variable_change_cb {name name2 op} {
2810
+ global config_variable_changed config_variable_original
2811
+
2812
+ upvar #0 $name var
2813
+ if {$op eq " write" &&
2814
+ (![info exists config_variable_original($name )] ||
2815
+ $config_variable_original($name) ne $var )} {
2816
+ set config_variable_changed($name ) 1
2817
+ }
2818
+ }
2819
+
2779
2820
proc savestuff {w} {
2780
- global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
2781
- global use_ttk
2782
2821
global stuffsaved
2783
2822
global config_file config_file_tmp
2784
- global config_variables
2823
+ global config_variables config_variable_changed
2824
+ global viewchanged
2825
+
2826
+ upvar #0 viewname current_viewname
2827
+ upvar #0 viewfiles current_viewfiles
2828
+ upvar #0 viewargs current_viewargs
2829
+ upvar #0 viewargscmd current_viewargscmd
2830
+ upvar #0 viewperm current_viewperm
2831
+ upvar #0 nextviewnum current_nextviewnum
2832
+ upvar #0 use_ttk current_use_ttk
2785
2833
2786
2834
if {$stuffsaved } return
2787
2835
if {![winfo viewable .]} return
2788
- catch {
2789
- if {[file exists $config_file_tmp ]} {
2790
- file delete -force $config_file_tmp
2836
+ set remove_tmp 0
2837
+ if {[catch {
2838
+ set try_count 0
2839
+ while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
2840
+ if {[incr try_count] > 50} {
2841
+ error " Unable to write config file: $config_file_tmp exists"
2842
+ }
2843
+ after 100
2791
2844
}
2792
- set f [ open $config_file_tmp w]
2845
+ set remove_tmp 1
2793
2846
if {$::tcl_platform(platform) eq {windows}} {
2794
2847
file attributes $config_file_tmp -hidden true
2795
2848
}
2849
+ if {[file exists $config_file ]} {
2850
+ source $config_file
2851
+ }
2796
2852
foreach var_name $config_variables {
2797
2853
upvar #0 $var_name var
2798
- puts $f [list set $var_name $var ]
2854
+ upvar 0 $var_name old_var
2855
+ if {!$config_variable_changed($var_name) && [info exists old_var]} {
2856
+ puts $f [list set $var_name $old_var ]
2857
+ } else {
2858
+ puts $f [list set $var_name $var ]
2859
+ }
2799
2860
}
2800
2861
2801
2862
puts $f " set geometry(main) [ wm geometry .] "
2802
2863
puts $f " set geometry(state) [ wm state .] "
2803
2864
puts $f " set geometry(topwidth) [ winfo width .tf] "
2804
2865
puts $f " set geometry(topheight) [ winfo height .tf] "
2805
- if {$use_ttk } {
2866
+ if {$current_use_ttk } {
2806
2867
puts $f " set geometry(pwsash0) \" [ .tf.histframe.pwclist sashpos 0] 1\" "
2807
2868
puts $f " set geometry(pwsash1) \" [ .tf.histframe.pwclist sashpos 1] 1\" "
2808
2869
} else {
@@ -2812,15 +2873,43 @@ proc savestuff {w} {
2812
2873
puts $f " set geometry(botwidth) [ winfo width .bleft] "
2813
2874
puts $f " set geometry(botheight) [ winfo height .bleft] "
2814
2875
2876
+ array set view_save {}
2877
+ array set views {}
2878
+ if {![info exists permviews]} { set permviews {} }
2879
+ foreach view $permviews {
2880
+ set view_save([lindex $view 0]) 1
2881
+ set views([lindex $view 0]) $view
2882
+ }
2815
2883
puts -nonewline $f " set permviews {"
2816
- for {set v 0} {$v < $nextviewnum } {incr v} {
2817
- if {$viewperm($v) } {
2818
- puts $f " {[ list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v) ] }"
2884
+ for {set v 1} {$v < $current_nextviewnum } {incr v} {
2885
+ if {$viewchanged($v) } {
2886
+ if {$current_viewperm($v) } {
2887
+ set views($current_viewname($v) ) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v) ]
2888
+ } else {
2889
+ set view_save($current_viewname($v) ) 0
2890
+ }
2891
+ }
2892
+ }
2893
+ # write old and updated view to their places and append remaining to the end
2894
+ foreach view $permviews {
2895
+ set view_name [lindex $view 0]
2896
+ if {$view_save($view_name) } {
2897
+ puts $f " {$views($view_name) }"
2819
2898
}
2899
+ unset views($view_name )
2900
+ }
2901
+ foreach view_name [array names views] {
2902
+ puts $f " {$views($view_name) }"
2820
2903
}
2821
2904
puts $f " }"
2822
2905
close $f
2823
2906
file rename -force $config_file_tmp $config_file
2907
+ set remove_tmp 0
2908
+ } err]} {
2909
+ puts " Error saving config: $err "
2910
+ }
2911
+ if {$remove_tmp } {
2912
+ file delete -force $config_file_tmp
2824
2913
}
2825
2914
set stuffsaved 1
2826
2915
}
@@ -3977,6 +4066,7 @@ set known_view_options {
3977
4066
{committer t15 . " --committer=*" {mc " Committer:" }}
3978
4067
{loginfo t15 .. " --grep=*" {mc " Commit Message:" }}
3979
4068
{allmatch b .. " --all-match" {mc " Matches all Commit Info criteria" }}
4069
+ {igrep b .. " --invert-grep" {mc " Matches none Commit Info criteria" }}
3980
4070
{changes_l l + {} {mc " Changes to Files:" }}
3981
4071
{pickaxe_s r0 . {} {mc " Fixed String" }}
3982
4072
{pickaxe_t r1 . " --pickaxe-regex" {mc " Regular Expression" }}
@@ -4238,7 +4328,7 @@ proc allviewmenus {n op args} {
4238
4328
4239
4329
proc newviewok {top n {apply 0}} {
4240
4330
global nextviewnum newviewperm newviewname newishighlight
4241
- global viewname viewfiles viewperm selectedview curview
4331
+ global viewname viewfiles viewperm viewchanged selectedview curview
4242
4332
global viewargs viewargscmd newviewopts viewhlmenu
4243
4333
4244
4334
if {[catch {
@@ -4259,6 +4349,7 @@ proc newviewok {top n {apply 0}} {
4259
4349
incr nextviewnum
4260
4350
set viewname($n ) $newviewname($n)
4261
4351
set viewperm($n ) $newviewopts($n,perm)
4352
+ set viewchanged($n ) 1
4262
4353
set viewfiles($n ) $files
4263
4354
set viewargs($n ) $newargs
4264
4355
set viewargscmd($n ) $newviewopts($n,cmd)
@@ -4271,6 +4362,7 @@ proc newviewok {top n {apply 0}} {
4271
4362
} else {
4272
4363
# editing an existing view
4273
4364
set viewperm($n ) $newviewopts($n,perm)
4365
+ set viewchanged($n ) 1
4274
4366
if {$newviewname($n) ne $viewname($n) } {
4275
4367
set viewname($n ) $newviewname($n)
4276
4368
doviewmenu .bar.view 5 [list showview $n ] \
@@ -4293,7 +4385,7 @@ proc newviewok {top n {apply 0}} {
4293
4385
}
4294
4386
4295
4387
proc delview {} {
4296
- global curview viewperm hlview selectedhlview
4388
+ global curview viewperm hlview selectedhlview viewchanged
4297
4389
4298
4390
if {$curview == 0} return
4299
4391
if {[info exists hlview] && $hlview == $curview } {
@@ -4302,6 +4394,7 @@ proc delview {} {
4302
4394
}
4303
4395
allviewmenus $curview delete
4304
4396
set viewperm($curview ) 0
4397
+ set viewchanged($curview ) 1
4305
4398
showview 0
4306
4399
}
4307
4400
@@ -11237,6 +11330,7 @@ proc prefspage_general {notebook} {
11237
11330
${NS} ::label $page .maxwidthl -text [mc " Maximum graph width (lines)" ]
11238
11331
spinbox $page .maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
11239
11332
grid $page .spacer $page .maxwidthl $page .maxwidth -sticky w
11333
+ # xgettext:no-tcl-format
11240
11334
${NS} ::label $page .maxpctl -text [mc " Maximum graph width (% of pane)" ]
11241
11335
spinbox $page .maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
11242
11336
grid x $page .maxpctl $page .maxpct -sticky w
@@ -11936,7 +12030,7 @@ if { [info exists ::env(GIT_TRACE)] } {
11936
12030
}
11937
12031
11938
12032
# defaults...
11939
- set wrcomcmd " git diff-tree --stdin -p --pretty"
12033
+ set wrcomcmd " git diff-tree --stdin -p --pretty=email "
11940
12034
11941
12035
set gitencoding {}
11942
12036
catch {
@@ -12109,6 +12203,7 @@ catch {
12109
12203
}
12110
12204
source $config_file
12111
12205
}
12206
+ config_check_tmp_exists 50
12112
12207
12113
12208
set config_variables {
12114
12209
mainfont textfont uifont tabstop findmergefiles maxgraphpct maxwidth
@@ -12122,6 +12217,10 @@ set config_variables {
12122
12217
linehoveroutlinecolor mainheadcirclecolor workingfilescirclecolor
12123
12218
indexcirclecolor circlecolors linkfgcolor circleoutlinecolor
12124
12219
}
12220
+ foreach var $config_variables {
12221
+ config_init_trace $var
12222
+ trace add variable $var write config_variable_change_cb
12223
+ }
12125
12224
12126
12225
parsefont mainfont $mainfont
12127
12226
eval font create mainfont [fontflags mainfont]
@@ -12249,6 +12348,7 @@ set highlight_related [mc "None"]
12249
12348
set highlight_files {}
12250
12349
set viewfiles(0) {}
12251
12350
set viewperm(0) 0
12351
+ set viewchanged(0) 0
12252
12352
set viewargs(0) {}
12253
12353
set viewargscmd(0) {}
12254
12354
@@ -12307,6 +12407,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
12307
12407
set viewargs(1) $revtreeargs
12308
12408
set viewargscmd(1) $revtreeargscmd
12309
12409
set viewperm(1) 0
12410
+ set viewchanged(1) 0
12310
12411
set vdatemode(1) 0
12311
12412
addviewmenu 1
12312
12413
.bar.view entryconf [mca " Edit view..." ] -state normal
@@ -12322,6 +12423,7 @@ if {[info exists permviews]} {
12322
12423
set viewargs($n ) [lindex $v 2]
12323
12424
set viewargscmd($n ) [lindex $v 3]
12324
12425
set viewperm($n ) 1
12426
+ set viewchanged($n ) 0
12325
12427
addviewmenu $n
12326
12428
}
12327
12429
}
0 commit comments