summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-03-22 10:01:43 +0100
committerGitHub <noreply@github.com>2024-03-22 10:01:43 +0100
commit53363b761cb183bf26fdd19928f31ee16bdefdcd (patch)
tree553f71524a51cfb3338f75d586aba6d0e09a6e82
parent28dd7f946752d31487b207ab05338dbf4898042f (diff)
parent96c5cbe34ee171a13a0f09235c3bb22d14c07b3e (diff)
Add config to truncate commit hashes when copying them to the clipboard (#3402)
- **PR Description** I often copy hashes in the commits panel in order to paste them into Github comments (or other places), and I can't stand it when they have the full length. I picked a default of 12 for this; I find this to be a good middle ground between being reliable in large repos (12 still works in the linux kernel repo today, but it might not be enough in really huge repos) and not being too ugly (many smaller repos can probably get away with less).
-rw-r--r--docs/Config.md1
-rw-r--r--pkg/config/user_config.go24
-rw-r--r--pkg/gui/controllers/basic_commits_controller.go2
-rw-r--r--pkg/gui/global_handlers.go13
-rw-r--r--pkg/gui/keybindings.go4
-rw-r--r--pkg/i18n/dutch.go2
-rw-r--r--pkg/i18n/english.go6
-rw-r--r--pkg/i18n/japanese.go1
-rw-r--r--pkg/i18n/korean.go1
-rw-r--r--pkg/i18n/polish.go3
-rw-r--r--pkg/i18n/russian.go1
-rw-r--r--pkg/i18n/traditional_chinese.go1
-rw-r--r--pkg/integration/tests/misc/copy_to_clipboard.go2
-rw-r--r--schema/config.json5
14 files changed, 41 insertions, 25 deletions
diff --git a/docs/Config.md b/docs/Config.md
index 4e2486784..243c807c4 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -126,6 +126,7 @@ git:
overrideGpg: false # prevents lazygit from spawning a separate process when using GPG
disableForcePushing: false
parseEmoji: false
+ truncateCopiedCommitHashesTo: 12 # When copying commit hashes to the clipboard, truncate them to this length. Set to 40 to disable truncation.
os:
copyToClipboardCmd: '' # See 'Custom Command for Copying to Clipboard' section
editPreset: '' # see 'Configuring File Editing' section
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 588fe2638..e93fbb06c 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -214,6 +214,9 @@ type GitConfig struct {
ParseEmoji bool `yaml:"parseEmoji"`
// Config for showing the log in the commits view
Log LogConfig `yaml:"log"`
+ // When copying commit hashes to the clipboard, truncate them to this
+ // length. Set to 40 to disable truncation.
+ TruncateCopiedCommitHashesTo int `yaml:"truncateCopiedCommitHashesTo"`
}
type PagerType string
@@ -690,16 +693,17 @@ func GetDefaultConfig() *UserConfig {
ShowGraph: "always",
ShowWholeGraph: false,
},
- SkipHookPrefix: "WIP",
- MainBranches: []string{"master", "main"},
- AutoFetch: true,
- AutoRefresh: true,
- FetchAll: true,
- BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
- AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium",
- DisableForcePushing: false,
- CommitPrefixes: map[string]CommitPrefixConfig(nil),
- ParseEmoji: false,
+ SkipHookPrefix: "WIP",
+ MainBranches: []string{"master", "main"},
+ AutoFetch: true,
+ AutoRefresh: true,
+ FetchAll: true,
+ BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
+ AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium",
+ DisableForcePushing: false,
+ CommitPrefixes: map[string]CommitPrefixConfig(nil),
+ ParseEmoji: false,
+ TruncateCopiedCommitHashesTo: 12,
},
Refresher: RefresherConfig{
RefreshInterval: 10,
diff --git a/pkg/gui/controllers/basic_commits_controller.go b/pkg/gui/controllers/basic_commits_controller.go
index a589e3828..1fde39e8b 100644
--- a/pkg/gui/controllers/basic_commits_controller.go
+++ b/pkg/gui/controllers/basic_commits_controller.go
@@ -175,7 +175,7 @@ func (self *BasicCommitsController) copyCommitSHAToClipboard(commit *models.Comm
return self.c.Error(err)
}
- self.c.Toast(self.c.Tr.CommitSHACopiedToClipboard)
+ self.c.Toast(fmt.Sprintf("'%s' %s", commit.Sha, self.c.Tr.CopiedToClipboard))
return nil
}
diff --git a/pkg/gui/global_handlers.go b/pkg/gui/global_handlers.go
index 9513fff61..c20b10ad7 100644
--- a/pkg/gui/global_handlers.go
+++ b/pkg/gui/global_handlers.go
@@ -110,6 +110,15 @@ func (gui *Gui) scrollDownConfirmationPanel() error {
}
func (gui *Gui) handleCopySelectedSideContextItemToClipboard() error {
+ return gui.handleCopySelectedSideContextItemToClipboardWithTruncation(-1)
+}
+
+func (gui *Gui) handleCopySelectedSideContextItemCommitHashToClipboard() error {
+ return gui.handleCopySelectedSideContextItemToClipboardWithTruncation(
+ gui.UserConfig.Git.TruncateCopiedCommitHashesTo)
+}
+
+func (gui *Gui) handleCopySelectedSideContextItemToClipboardWithTruncation(maxWidth int) error {
// important to note that this assumes we've selected an item in a side context
currentSideContext := gui.c.CurrentSideContext()
if currentSideContext == nil {
@@ -127,6 +136,10 @@ func (gui *Gui) handleCopySelectedSideContextItemToClipboard() error {
return nil
}
+ if maxWidth > 0 {
+ itemId = itemId[:utils.Min(len(itemId), maxWidth)]
+ }
+
gui.c.LogAction(gui.c.Tr.Actions.CopyToClipboard)
if err := gui.os.CopyToClipboard(itemId); err != nil {
return gui.c.Error(err)
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 6275d5189..02405b9b6 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -146,7 +146,7 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
{
ViewName: "commits",
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
- Handler: self.handleCopySelectedSideContextItemToClipboard,
+ Handler: self.handleCopySelectedSideContextItemCommitHashToClipboard,
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
Description: self.c.Tr.CopyCommitShaToClipboard,
},
@@ -166,7 +166,7 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
{
ViewName: "subCommits",
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
- Handler: self.handleCopySelectedSideContextItemToClipboard,
+ Handler: self.handleCopySelectedSideContextItemCommitHashToClipboard,
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
Description: self.c.Tr.CopyCommitShaToClipboard,
},
diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go
index 99ff50e06..0341d811e 100644
--- a/pkg/i18n/dutch.go
+++ b/pkg/i18n/dutch.go
@@ -319,7 +319,7 @@ func dutchTranslationSet() TranslationSet {
BranchNotFoundPrompt: "Branch niet gevonden. Creëer een nieuwe branch genaamd",
PullRequestURLCopiedToClipboard: "Pull-aanvraag-URL gekopieerd naar klembord",
CommitMessageCopiedToClipboard: "Commit message gekopieerd naar klembord",
- CopiedToClipboard: "Gekopieerd naar klembord",
+ CopiedToClipboard: "gekopieerd naar klembord",
NavigationTitle: "Lijstpaneel navigatie",
ViewCommits: "Bekijk commits",
ToggleTreeView: "Toggle bestandsboom weergave",
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index bcbf66da8..a31c8ceee 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -635,7 +635,6 @@ type TranslationSet struct {
PushingTagStatus string
PullRequestURLCopiedToClipboard string
CommitDiffCopiedToClipboard string
- CommitSHACopiedToClipboard string
CommitURLCopiedToClipboard string
CommitMessageCopiedToClipboard string
CommitSubjectCopiedToClipboard string
@@ -1599,13 +1598,12 @@ func EnglishTranslationSet() TranslationSet {
PushingTagStatus: "Pushing tag",
PullRequestURLCopiedToClipboard: "Pull request URL copied to clipboard",
CommitDiffCopiedToClipboard: "Commit diff copied to clipboard",
- CommitSHACopiedToClipboard: "Commit SHA copied to clipboard",
CommitURLCopiedToClipboard: "Commit URL copied to clipboard",
CommitMessageCopiedToClipboard: "Commit message copied to clipboard",
CommitSubjectCopiedToClipboard: "Commit subject copied to clipboard",
CommitAuthorCopiedToClipboard: "Commit author 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",
ErrStageDirWithInlineMergeConflicts: "Cannot stage/unstage directory containing files with inline merge conflicts. Please fix up the merge conflicts first",
ErrRepositoryMovedOrDeleted: "Cannot find repo. It might have been moved or deleted ¯\\_(ツ)_/¯",
@@ -1775,7 +1773,7 @@ func EnglishTranslationSet() TranslationSet {
CopyCommitMessageToClipboard: "Copy commit message to clipboard",
CopyCommitSubjectToClipboard: "Copy commit subject to clipboard",
CopyCommitDiffToClipboard: "Copy commit diff to clipboard",
- CopyCommitSHAToClipboard: "Copy commit SHA to clipboard",
+ CopyCommitSHAToClipboard: "Copy full commit SHA to clipboard",
CopyCommitURLToClipboard: "Copy commit URL to clipboard",
CopyCommitAuthorToClipboard: "Copy commit author to clipboard",
CopyCommitAttributeToClipboard: "Copy to clipboard",
diff --git a/pkg/i18n/japanese.go b/pkg/i18n/japanese.go
index 3b4a1076d..bb709bece 100644
--- a/pkg/i18n/japanese.go
+++ b/pkg/i18n/japanese.go
@@ -423,7 +423,6 @@ func japaneseTranslationSet() TranslationSet {
// PushingTagStatus: "Pushing tag",
PullRequestURLCopiedToClipboard: "Pull requestのURLがクリップボードにコピーされました",
CommitDiffCopiedToClipboard: "コミットの差分がクリップボードにコピーされました",
- CommitSHACopiedToClipboard: "コミットのSHAがクリップボードにコピーされました",
CommitURLCopiedToClipboard: "コミットのURLがクリップボードにコピーされました",
CommitMessageCopiedToClipboard: "コミットメッセージがクリップボードにコピーされました",
CommitAuthorCopiedToClipboard: "コミットの作成者名がクリップボードにコピーされました",
diff --git a/pkg/i18n/korean.go b/pkg/i18n/korean.go
index e8a921b9a..dd9ba31c8 100644
--- a/pkg/i18n/korean.go
+++ b/pkg/i18n/korean.go
@@ -417,7 +417,6 @@ func koreanTranslationSet() TranslationSet {
PushingTagStatus: "Pushing tag",
PullRequestURLCopiedToClipboard: "풀 리퀘스트의 URL을 클립보드에 복사했습니다.",
CommitDiffCopiedToClipboard: "커밋의 Diff를 클립보드에 복사했습니다.",
- CommitSHACopiedToClipboard: "커밋의 SHA를 클립보드에 복사했습니다.",
CommitURLCopiedToClipboard: "커밋의 URL를 클립보드에 복사했습니다.",
CommitMessageCopiedToClipboard: "커밋 메시지를 클립보드에 복사했습니다.",
CommitAuthorCopiedToClipboard: "커밋 작성자를 클립보드에 복사했습니다.",
diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go
index f1e0a3e1c..3d3f26e06 100644
--- a/pkg/i18n/polish.go
+++ b/pkg/i18n/polish.go
@@ -611,13 +611,12 @@ func polishTranslationSet() TranslationSet {
PushingTagStatus: "Wysyłanie tagu",
PullRequestURLCopiedToClipboard: "URL żądania ściągnięcia skopiowany do schowka",
CommitDiffCopiedToClipboard: "Różnice commita skopiowane do schowka",
- CommitSHACopiedToClipboard: "SHA commita skopiowany do schowka",
CommitURLCopiedToClipboard: "URL commita skopiowany do schowka",
CommitMessageCopiedToClipboard: "Wiadomość commita skopiowana do schowka",
CommitSubjectCopiedToClipboard: "Temat commita skopiowany do schowka",
CommitAuthorCopiedToClipboard: "Autor commita skopiowany do schowka",
PatchCopiedToClipboard: "Łatka skopiowana do schowka",
- CopiedToClipboard: "Skopiowane do schowka",
+ CopiedToClipboard: "skopiowane do schowka",
ErrCannotEditDirectory: "Nie można edytować katalogu: można edytować tylko pojedyncze pliki",
ErrStageDirWithInlineMergeConflicts: "Nie można przygotować/odprzygotować katalogu zawierającego pliki z konfliktami scalania w linii. Proszę najpierw rozwiązać konflikty scalania",
ErrRepositoryMovedOrDeleted: "Nie można znaleźć repozytorium. Mogło zostać przeniesione lub usunięte ¯\\_(ツ)_/¯",
diff --git a/pkg/i18n/russian.go b/pkg/i18n/russian.go
index b48004e2e..0b4f2e618 100644
--- a/pkg/i18n/russian.go
+++ b/pkg/i18n/russian.go
@@ -480,7 +480,6 @@ func RussianTranslationSet() TranslationSet {
PushingTagStatus: "Отправка тега",
PullRequestURLCopiedToClipboard: "URL запроса на принятие изменений скопирован в буфер обмена",
CommitDiffCopiedToClipboard: "Сравнения коммита скопированы в буфер обмена",
- CommitSHACopiedToClipboard: "SHA коммита скопировано в буфер обмена",
CommitURLCopiedToClipboard: "URL коммита скопирован в буфер обмена",
CommitMessageCopiedToClipboard: "Сообщение коммита скопировано в буфер обмена",
CommitSubjectCopiedToClipboard: "Тема коммита скопирована в буфер обмена",
diff --git a/pkg/i18n/traditional_chinese.go b/pkg/i18n/traditional_chinese.go
index a46509b24..54d283f00 100644
--- a/pkg/i18n/traditional_chinese.go
+++ b/pkg/i18n/traditional_chinese.go
@@ -511,7 +511,6 @@ func traditionalChineseTranslationSet() TranslationSet {
PushingTagStatus: "正在推送標籤",
PullRequestURLCopiedToClipboard: "複製拉取請求 URL 至剪貼簿",
CommitDiffCopiedToClipboard: "已複製提交差異至剪貼簿",
- CommitSHACopiedToClipboard: "已複製提交 SHA 至剪貼簿",
CommitURLCopiedToClipboard: "已複製提交 URL 至剪貼簿",
CommitMessageCopiedToClipboard: "已複製提交訊息至剪貼簿",
CommitAuthorCopiedToClipboard: "已複製提交者至剪貼簿",
diff --git a/pkg/integration/tests/misc/copy_to_clipboard.go b/pkg/integration/tests/misc/copy_to_clipboard.go
index 6b1d5d1f6..7afa31310 100644
--- a/pkg/integration/tests/misc/copy_to_clipboard.go
+++ b/pkg/integration/tests/misc/copy_to_clipboard.go
@@ -27,7 +27,7 @@ var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
).
Press(keys.Universal.CopyToClipboard)
- t.ExpectToast(Equals("'branch-a' Copied to clipboard"))
+ t.ExpectToast(Equals("'branch-a' copied to clipboard"))
t.Views().Files().
Focus()
diff --git a/schema/config.json b/schema/config.json
index 65383cd9f..3a2cad060 100644
--- a/schema/config.json
+++ b/schema/config.json
@@ -559,6 +559,11 @@
"additionalProperties": false,
"type": "object",
"description": "Config for showing the log in the commits view"
+ },
+ "truncateCopiedCommitHashesTo": {
+ "type": "integer",
+ "description": "When copying commit hashes to the clipboard, truncate them to this\nlength. Set to 40 to disable truncation.",
+ "default": 12
}
},
"additionalProperties": false,