1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-15 00:15:32 +02:00

Copy Tags to clipboard

Add an option to copy tag(s) to the clipboard.

Works on both the Tags and Commits sections.
This commit is contained in:
Bruno Jesus
2025-01-27 21:53:13 +00:00
parent 3722824298
commit 333802fffc
3 changed files with 88 additions and 43 deletions

View File

@ -3,6 +3,7 @@ package controllers
import ( import (
"errors" "errors"
"fmt" "fmt"
"strings"
"github.com/jesseduffield/lazygit/pkg/commands/git_commands" "github.com/jesseduffield/lazygit/pkg/commands/git_commands"
"github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/models"
@ -122,9 +123,7 @@ func (self *BasicCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
} }
func (self *BasicCommitsController) copyCommitAttribute(commit *models.Commit) error { func (self *BasicCommitsController) copyCommitAttribute(commit *models.Commit) error {
return self.c.Menu(types.CreateMenuOptions{ items := []*types.MenuItem{
Title: self.c.Tr.Actions.CopyCommitAttributeToClipboard,
Items: []*types.MenuItem{
{ {
Label: self.c.Tr.CommitHash, Label: self.c.Tr.CommitHash,
OnPress: func() error { OnPress: func() error {
@ -166,7 +165,25 @@ func (self *BasicCommitsController) copyCommitAttribute(commit *models.Commit) e
}, },
Key: 'a', Key: 'a',
}, },
}
commitTagsItem := types.MenuItem{
Label: self.c.Tr.CommitTags,
OnPress: func() error {
return self.copyCommitTagsToClipboard(commit)
}, },
Key: 't',
}
if len(commit.Tags) == 0 {
commitTagsItem.DisabledReason = &types.DisabledReason{Text: self.c.Tr.NoTags}
}
items = append(items, &commitTagsItem)
return self.c.Menu(types.CreateMenuOptions{
Title: self.c.Tr.Actions.CopyCommitAttributeToClipboard,
Items: items,
}) })
} }
@ -257,6 +274,18 @@ func (self *BasicCommitsController) copyCommitSubjectToClipboard(commit *models.
return nil return nil
} }
func (self *BasicCommitsController) copyCommitTagsToClipboard(commit *models.Commit) error {
message := strings.Join(commit.Tags, "\n")
self.c.LogAction(self.c.Tr.Actions.CopyCommitTagsToClipboard)
if err := self.c.OS().CopyToClipboard(message); err != nil {
return err
}
self.c.Toast(self.c.Tr.CommitTagsCopiedToClipboard)
return nil
}
func (self *BasicCommitsController) openInBrowser(commit *models.Commit) error { func (self *BasicCommitsController) openInBrowser(commit *models.Commit) error {
url, err := self.c.Helpers().Host.GetCommitURL(commit.Hash) url, err := self.c.Helpers().Host.GetCommitURL(commit.Hash)
if err != nil { if err != nil {

View File

@ -145,6 +145,13 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason, GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
Description: self.c.Tr.CopyBranchNameToClipboard, Description: self.c.Tr.CopyBranchNameToClipboard,
}, },
{
ViewName: "tags",
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
Handler: self.handleCopySelectedSideContextItemCommitHashToClipboard,
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
Description: self.c.Tr.CopyTagToClipboard,
},
{ {
ViewName: "commits", ViewName: "commits",
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard), Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),

View File

@ -612,9 +612,11 @@ type TranslationSet struct {
CommitMessage string CommitMessage string
CommitSubject string CommitSubject string
CommitAuthor string CommitAuthor string
CommitTags string
CopyCommitAttributeToClipboard string CopyCommitAttributeToClipboard string
CopyCommitAttributeToClipboardTooltip string CopyCommitAttributeToClipboardTooltip string
CopyBranchNameToClipboard string CopyBranchNameToClipboard string
CopyTagToClipboard string
CopyPathToClipboard string CopyPathToClipboard string
CommitPrefixPatternError string CommitPrefixPatternError string
CopySelectedTextToClipboard string CopySelectedTextToClipboard string
@ -674,6 +676,8 @@ type TranslationSet struct {
CommitMessageCopiedToClipboard string CommitMessageCopiedToClipboard string
CommitSubjectCopiedToClipboard string CommitSubjectCopiedToClipboard string
CommitAuthorCopiedToClipboard string CommitAuthorCopiedToClipboard string
CommitTagsCopiedToClipboard string
NoTags string
PatchCopiedToClipboard string PatchCopiedToClipboard string
CopiedToClipboard string CopiedToClipboard string
ErrCannotEditDirectory string ErrCannotEditDirectory string
@ -905,6 +909,7 @@ type Actions struct {
CopyCommitURLToClipboard string CopyCommitURLToClipboard string
CopyCommitAuthorToClipboard string CopyCommitAuthorToClipboard string
CopyCommitAttributeToClipboard string CopyCommitAttributeToClipboard string
CopyCommitTagsToClipboard string
CopyPatchToClipboard string CopyPatchToClipboard string
CustomCommand string CustomCommand string
DiscardAllChangesInDirectory string DiscardAllChangesInDirectory string
@ -1627,9 +1632,11 @@ func EnglishTranslationSet() *TranslationSet {
CommitMessage: "Commit message", CommitMessage: "Commit message",
CommitSubject: "Commit subject", CommitSubject: "Commit subject",
CommitAuthor: "Commit author", CommitAuthor: "Commit author",
CommitTags: "Commit tags",
CopyCommitAttributeToClipboard: "Copy commit attribute to clipboard", CopyCommitAttributeToClipboard: "Copy commit attribute to clipboard",
CopyCommitAttributeToClipboardTooltip: "Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author).", CopyCommitAttributeToClipboardTooltip: "Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author).",
CopyBranchNameToClipboard: "Copy branch name to clipboard", CopyBranchNameToClipboard: "Copy branch name to clipboard",
CopyTagToClipboard: "Copy tag to clipboard",
CopyPathToClipboard: "Copy path to clipboard", CopyPathToClipboard: "Copy path to clipboard",
CopySelectedTextToClipboard: "Copy selected text to clipboard", CopySelectedTextToClipboard: "Copy selected text to clipboard",
CommitPrefixPatternError: "Error in commitPrefix pattern", CommitPrefixPatternError: "Error in commitPrefix pattern",
@ -1688,6 +1695,8 @@ func EnglishTranslationSet() *TranslationSet {
CommitMessageCopiedToClipboard: "Commit message copied to clipboard", CommitMessageCopiedToClipboard: "Commit message copied to clipboard",
CommitSubjectCopiedToClipboard: "Commit subject copied to clipboard", CommitSubjectCopiedToClipboard: "Commit subject copied to clipboard",
CommitAuthorCopiedToClipboard: "Commit author copied to clipboard", CommitAuthorCopiedToClipboard: "Commit author copied to clipboard",
CommitTagsCopiedToClipboard: "Commit tags copied to clipboard",
NoTags: "No tags",
PatchCopiedToClipboard: "Patch copied to clipboard", PatchCopiedToClipboard: "Patch copied to clipboard",
CopiedToClipboard: "copied to clipboard", CopiedToClipboard: "copied to clipboard",
ErrCannotEditDirectory: "Cannot edit directories: you can only edit individual files", ErrCannotEditDirectory: "Cannot edit directories: you can only edit individual files",