summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-03-17 20:43:32 +0100
committerStefan Haller <stefan@haller-berlin.de>2024-03-22 09:58:54 +0100
commit3b29705a7876c13f47a6478e17ad7ee4fc78ff8c (patch)
tree36f75deac15124b7b4c6fb0279aa2208a624fcb5 /pkg
parent28dd7f946752d31487b207ab05338dbf4898042f (diff)
Add config to truncate commit hashes when copying them to the clipboard
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). We deliberately don't change this for the "Copy to clipboard" menu, since this gives users a way to copy the unabbreviated sha if they need this occasionally.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/config/user_config.go24
-rw-r--r--pkg/gui/global_handlers.go13
-rw-r--r--pkg/gui/keybindings.go4
3 files changed, 29 insertions, 12 deletions
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/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,
},