Skip to content

Commit

Permalink
gitk: tag add right click options
Browse files Browse the repository at this point in the history
In gitk, we can right-click on the icon of the branch,
and a directory will pop up to provide us with functions
such as "Checkout this branch", "Rename this branch"...,
but we found that the right-click tag icon does not have such
a function , So I learned how to write the branch icon, and
added the following functions "Rename this tag","Remove this tag",
"Copy tag name" to right-click the tag icon. This function is
temporarily supported work on the branch with <=3 tags.

Signed-off-by: ZheNing Hu <[email protected]>
  • Loading branch information
adlternative committed Feb 16, 2021
1 parent e636282 commit f3a5d7d
Showing 1 changed file with 147 additions and 0 deletions.
147 changes: 147 additions & 0 deletions gitk-git/gitk
Original file line number Diff line number Diff line change
Expand Up @@ -1874,6 +1874,20 @@ proc removehead {id name} {
unset headids($name)
}

proc removetag {id name} {
global tagids idtags

if {$idtags($id) eq $name} {
unset idtags($id)
} else {
set i [lsearch -exact $idtags($id) $name]
if {$i >= 0} {
set idtags($id) [lreplace $idtags($id) $i $i]
}
}
unset tagids($name)
}

proc ttk_toplevel {w args} {
global use_ttk
eval [linsert $args 0 ::toplevel $w]
Expand Down Expand Up @@ -2077,6 +2091,7 @@ proc makewindow {} {
global filesepbgcolor filesepfgcolor
global mergecolors foundbgcolor currentsearchhitbgcolor
global headctxmenu progresscanv progressitem progresscoords statusw
global tagctxmenu
global fprogitem fprogcoord lastprogupdate progupdatepending
global rprogitem rprogcoord rownumsel numcommits
global have_tk85 use_ttk NS
Expand Down Expand Up @@ -2685,6 +2700,14 @@ proc makewindow {} {
}
$headctxmenu configure -tearoff 0

set tagctxmenu .tagctxmenu
makemenu $tagctxmenu {
{mc "Rename this tag" command mvtag}
{mc "Remove this tag" command rmtag}
{mc "Copy tag name" command {clipboard clear; clipboard append $tagmenutag}}
}
$tagctxmenu configure -tearoff 0

global flist_menu
set flist_menu .flistctxmenu
makemenu $flist_menu {
Expand Down Expand Up @@ -6581,6 +6604,7 @@ proc drawtags {id x xt y1} {

set marks {}
set ntags 0
set ntags_copy 0
set nheads 0
set singletag 0
set maxtags 3
Expand All @@ -6592,6 +6616,7 @@ proc drawtags {id x xt y1} {
if {[info exists idtags($id)]} {
set marks $idtags($id)
set ntags [llength $marks]
set ntags_copy $ntags
if {$ntags > $maxtags ||
[totalwidth $marks mainfont $extra] > $maxwidth} {
# show just a single "n tags..." tag
Expand Down Expand Up @@ -6678,6 +6703,9 @@ proc drawtags {id x xt y1} {
-font $font -tags [list tag.$id text]]
if {$ntags >= 0} {
$canv bind $t <1> $tagclick
if {$ntags_copy < $maxtags} {
$canv bind $t $ctxbut [list tagmenu %X %Y $id $tag_quoted]
}
} elseif {$nheads >= 0} {
$canv bind $t $ctxbut [list headmenu %X %Y $id $tag_quoted]
}
Expand Down Expand Up @@ -9531,6 +9559,57 @@ proc mkbranch {} {
branchdia $top val ui
}

proc mvtag {} {
global NS
global tagmenuid tagmenutag

set top .tagdialog

set val(name) $tagmenutag
set val(id) $tagmenuid
set val(command) [list mvtaggo $top $tagmenutag]

set ui(title) [mc "Rename tag %s" $tagmenutag]
set ui(accept) [mc "Rename"]

tagdia $top val ui
}

proc tagdia {top valvar uivar} {
global NS commitinfo
upvar $valvar val $uivar ui

catch {destroy $top}
ttk_toplevel $top
make_transient $top .
${NS}::label $top.title -text $ui(title)
grid $top.title - -pady 10
${NS}::label $top.id -text [mc "ID:"]
${NS}::entry $top.sha1 -width 40
$top.sha1 insert 0 $val(id)
$top.sha1 conf -state readonly
grid $top.id $top.sha1 -sticky w
${NS}::entry $top.head -width 60
$top.head insert 0 [lindex $commitinfo($val(id)) 0]
$top.head conf -state readonly
grid x $top.head -sticky ew
grid columnconfigure $top 1 -weight 1
${NS}::label $top.nlab -text [mc "Name:"]
${NS}::entry $top.name -width 40
$top.name insert 0 $val(name)
grid $top.nlab $top.name -sticky w
${NS}::frame $top.buts
${NS}::button $top.buts.go -text $ui(accept) -command $val(command)
${NS}::button $top.buts.can -text [mc "Cancel"] -command "catch {destroy $top}"
bind $top <Key-Return> $val(command)
bind $top <Key-Escape> "catch {destroy $top}"
grid $top.buts.go $top.buts.can
grid columnconfigure $top.buts 0 -weight 1 -uniform a
grid columnconfigure $top.buts 1 -weight 1 -uniform a
grid $top.buts - -pady 10 -sticky ew
focus $top.name
}

proc mvbranch {} {
global NS
global headmenuid headmenuhead
Expand Down Expand Up @@ -9582,6 +9661,43 @@ proc branchdia {top valvar uivar} {
focus $top.name
}

proc mvtaggo {top prevname} {
global tagids idtags idheads mainhead mainheadid

set name [$top.name get]
set id [$top.sha1 get]
if {$name eq $prevname} {
catch {destroy $top}
return
}
if {$name eq {}} {
error_popup [mc "Please specify a new name for the tag"] $top
return
}
catch {destroy $top}
nowbusy renametag
update
if {[catch {
# NOTE: for an annotated tag, the new tag points to the old tag object
# where the old primary tag name is still recorded inside. Acceptable.
eval exec "git tag $name $prevname"
eval exec "git tag -d $prevname"
} err]} {
notbusy renametag
error_popup $err
} else {
notbusy renametag
removetag $id $prevname
set tagids($name) $id
lappend idtags($id) $name
redrawtags $id
addedtag $id
dispneartags 0
run refill_reflist
}

}

proc mkbrgo {top} {
global headids idheads

Expand Down Expand Up @@ -9915,6 +10031,17 @@ proc headmenu {x y id head} {
tk_popup $headctxmenu $x $y
}

# context menu for a tag
proc tagmenu {x y id tag} {
global tagmenuid tagmenutag tagctxmenu mainhead

stopfinding
set tagmenuid $id
set tagmenutag $tag

tk_popup $tagctxmenu $x $y
}

proc cobranch {} {
global headmenuid headmenuhead headids
global showlocalchanges
Expand Down Expand Up @@ -10019,6 +10146,26 @@ proc rmbranch {} {
run refill_reflist
}

proc rmtag {} {
global tagmenuid tagmenutag
global idtags

set tag $tagmenutag
set id $tagmenuid

nowbusy rmtag
update
if {[catch {exec git tag -d $tag} err]} {
notbusy rmtag
error_popup $err
return
}
removetag $id $tag
redrawtags $id
notbusy rmtag
run refill_reflist
}

# Display a list of tags and heads
proc showrefs {} {
global showrefstop bgcolor fgcolor selectbgcolor NS
Expand Down

0 comments on commit f3a5d7d

Please sign in to comment.