gitk: Add user preference to hide specific references

External tools such as Jujutsu may add many references that are of no interest to the user. This preference allows hiding them. Signed-off-by: Ori Avtalion <ori@avtalion.name>

Ori Avtalion committed May 21, 2025 at 20:12 UTC 2441e19d4c675abcb71e02d19f4077738ffb1dbd
1 file changed +38 -9
gitk
+38 -9
@@ -1939,8 +1939,10 @@ proc readrefs {} {
1939 set tagids($name) $id
1940 lappend idtags($id) $name
1941 } else {
1942 - set otherrefids($name) $id
1943 - lappend idotherrefs($id) $name
1942 + if [is_other_ref_visible $name] {
1943 + set otherrefids($name) $id
1944 + lappend idotherrefs($id) $name
1945 + }
1946 }
1947 }
1948 catch {close $refd}
@@ -11696,7 +11698,7 @@ proc prefspage_general {notebook} {
11698 global NS maxwidth maxgraphpct showneartags showlocalchanges
11699 global tabstop wrapcomment wrapdefault limitdiffs
11700 global autocopy autoselect autosellen extdifftool perfile_attrs
11699 - global hideremotes want_ttk have_ttk maxrefs web_browser
11701 + global hideremotes refstohide want_ttk have_ttk maxrefs web_browser
11702
11703 set page [create_prefs_page $notebook.general]
11704
@@ -11717,6 +11719,13 @@ proc prefspage_general {notebook} {
11719 -variable hideremotes
11720 grid x $page.hideremotes -sticky w
11721
11722 + ${NS}::entry $page.refstohide -textvariable refstohide
11723 + ${NS}::frame $page.refstohidef
11724 + ${NS}::label $page.refstohidef.l -text [mc "Refs to hide (space-separated)" ]
11725 + pack $page.refstohidef.l -side left
11726 + pack configure $page.refstohidef.l -padx 10
11727 + grid x $page.refstohidef $page.refstohide -sticky ew
11728 +
11729 ${NS}::checkbutton $page.autocopy -text [mc "Copy commit ID to clipboard"] \
11730 -variable autocopy
11731 grid x $page.autocopy -sticky w
@@ -11863,7 +11872,7 @@ proc doprefs {} {
11872 global oldprefs prefstop showneartags showlocalchanges
11873 global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
11874 global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
11866 - global hideremotes want_ttk have_ttk wrapcomment wrapdefault
11875 + global hideremotes refstohide want_ttk have_ttk wrapcomment wrapdefault
11876
11877 set top .gitkprefs
11878 set prefstop $top
@@ -11872,7 +11881,8 @@ proc doprefs {} {
11881 return
11882 }
11883 foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
11875 - limitdiffs tabstop perfile_attrs hideremotes want_ttk wrapcomment wrapdefault} {
11884 + limitdiffs tabstop perfile_attrs hideremotes refstohide \
11885 + want_ttk wrapcomment wrapdefault} {
11886 set oldprefs($v) [set $v]
11887 }
11888 ttk_toplevel $top
@@ -11998,7 +12008,8 @@ proc prefscan {} {
12008 global oldprefs prefstop
12009
12010 foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
12001 - limitdiffs tabstop perfile_attrs hideremotes want_ttk wrapcomment wrapdefault} {
12011 + limitdiffs tabstop perfile_attrs hideremotes refstohide \
12012 + want_ttk wrapcomment wrapdefault} {
12013 global $v
12014 set $v $oldprefs($v)
12015 }
@@ -12012,7 +12023,7 @@ proc prefsok {} {
12023 global oldprefs prefstop showneartags showlocalchanges
12024 global fontpref mainfont textfont uifont
12025 global limitdiffs treediffs perfile_attrs
12015 - global hideremotes wrapcomment wrapdefault
12026 + global hideremotes refstohide wrapcomment wrapdefault
12027 global ctext
12028
12029 catch {destroy $prefstop}
@@ -12059,7 +12070,7 @@ proc prefsok {} {
12070 $limitdiffs != $oldprefs(limitdiffs)} {
12071 reselectline
12072 }
12062 - if {$hideremotes != $oldprefs(hideremotes)} {
12073 + if {$hideremotes != $oldprefs(hideremotes) || $refstohide != $oldprefs(refstohide)} {
12074 rereadrefs
12075 }
12076 if {$wrapcomment != $oldprefs(wrapcomment)} {
@@ -12436,6 +12447,23 @@ proc get_path_encoding {path} {
12447 return $tcl_enc
12448 }
12449
12450 +proc is_other_ref_visible {ref} {
12451 + global refstohide
12452 +
12453 + if {$refstohide eq {}} {
12454 + return 1
12455 + }
12456 +
12457 + foreach pat [split $refstohide " "] {
12458 + if {$pat eq {}} continue
12459 + if {[string match $pat $ref]} {
12460 + return 0
12461 + }
12462 + }
12463 +
12464 + return 1
12465 +}
12466 +
12467 ## For msgcat loading, first locate the installation location.
12468 if { [info exists ::env(GITK_MSGSDIR)] } {
12469 ## Msgsdir was manually set in the environment.
@@ -12539,6 +12567,7 @@ set wrapcomment "none"
12567 set wrapdefault "none"
12568 set showneartags 1
12569 set hideremotes 0
12570 +set refstohide ""
12571 set maxrefs 20
12572 set visiblerefs {"master"}
12573 set maxlinelen 200
@@ -12645,7 +12674,7 @@ set config_variables {
12674 mainfont textfont uifont tabstop findmergefiles maxgraphpct maxwidth
12675 cmitmode wrapcomment wrapdefault autocopy autoselect autosellen
12676 showneartags maxrefs visiblerefs
12648 - hideremotes showlocalchanges datetimeformat limitdiffs uicolor want_ttk
12677 + hideremotes refstohide showlocalchanges datetimeformat limitdiffs uicolor want_ttk
12678 bgcolor fgcolor uifgcolor uifgdisabledcolor colors diffcolors mergecolors
12679 markbgcolor diffcontext selectbgcolor foundbgcolor currentsearchhitbgcolor
12680 extdifftool perfile_attrs headbgcolor headfgcolor headoutlinecolor