From: "阿德烈 via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: 阿德烈 <adlternative@gmail.com>, "ZheNing Hu" <adlternative@gmail.com>
Subject: [PATCH] [RFC] gitk: tag add right click options
Date: Thu, 04 Feb 2021 08:18:08 +0000 [thread overview]
Message-ID: <pull.866.git.1612426689172.gitgitgadget@gmail.com> (raw)
From: ZheNing Hu <adlternative@gmail.com>
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.
But now I may need a little help:
after we successfully deleted or modified the tag,the content
show on gitk has not changed, and I am stuck here.
Signed-off-by: ZheNing Hu <adlternative@gmail.com>
---
[RFC] gitk: tag add right click options
This patch want to fix: https://github.com/gitgitgadget/git/issues/855
We can provide for right-clicking the tag icon in gitk Rename this tag",
"Remove this tag", "Copy tag name" function.
For convenience, only the tags on the branch with the number of tags <=3
are processed temporarily.
Now I may need a little help: after we successfully deleted or modified
the tag name,the content show on gitk has not changed, and I am stuck
here.
In addition,I just learned part of the syntax of the tcl/tk language,
and there may be some bad uses in my patch.
Thanks!
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-866%2Fadlternative%2Fgitk_tag_new_opt-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-866/adlternative/gitk_tag_new_opt-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/866
gitk-git/gitk | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 23d9dd1fe0d0..f69834d52785 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -1874,6 +1874,28 @@ proc removehead {id name} {
unset headids($name)
}
+proc movetag {id name} {
+ global tagids idtags
+
+ removetag $tagids($name) $name
+ set tagids($name) $id
+ lappend idtags($id) $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]
@@ -2077,6 +2099,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
@@ -2685,6 +2708,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 {
@@ -6581,6 +6612,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
@@ -6592,6 +6624,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
@@ -6678,6 +6711,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]
}
@@ -9531,6 +9567,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 mvtago $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
@@ -9582,6 +9669,38 @@ proc branchdia {top valvar uivar} {
focus $top.name
}
+proc mvtago {top prevname} {
+ global tagids 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 {
+ 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
+ run refill_reflist
+ }
+
+}
+
proc mkbrgo {top} {
global headids idheads
@@ -9915,6 +10034,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
@@ -10019,6 +10149,25 @@ 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
+ notbusy rmtag
+ run refill_reflist
+}
+
# Display a list of tags and heads
proc showrefs {} {
global showrefstop bgcolor fgcolor selectbgcolor NS
base-commit: e6362826a0409539642a5738db61827e5978e2e4
--
gitgitgadget
next reply other threads:[~2021-02-04 8:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 8:18 阿德烈 via GitGitGadget [this message]
2021-02-16 13:53 ` [PATCH v2] gitk: tag add right click options ZheNing Hu via GitGitGadget
2021-02-18 15:55 ` [PATCH v3] " ZheNing Hu via GitGitGadget
2021-02-24 10:58 ` [PATCH v4] " ZheNing Hu via GitGitGadget
2021-02-25 4:38 ` [PATCH v5] gitk: add right-click context menu for tags ZheNing Hu via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.866.git.1612426689172.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=adlternative@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.