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:20 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
List information: http://vger.kernel.org/majordomo-info.html
* 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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).