summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-06-15 15:48:18 +0200
committerStefan Haller <stefan@haller-berlin.de>2024-06-29 11:28:44 +0200
commitbd782f16ddde1bdff6ee6e5237826be25e90fa9d (patch)
treeaebbaa4a20b82f1e1eb19332a443c93d17992a04
parent7be82d47135d8fa28823c506080311cba6d7b5f0 (diff)
Provide two config keys for configuring the author length in commits view
One is for the normal view, the other for the expanded view.
-rw-r--r--docs/Config.md6
-rw-r--r--pkg/config/user_config.go6
-rw-r--r--pkg/gui/presentation/authors/authors.go35
-rw-r--r--pkg/gui/presentation/authors/authors_test.go25
-rw-r--r--pkg/gui/presentation/commits.go7
-rw-r--r--schema/config.json10
6 files changed, 79 insertions, 10 deletions
diff --git a/docs/Config.md b/docs/Config.md
index 86e268550..ac296532f 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -185,6 +185,12 @@ gui:
# If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.
showFileIcons: true
+ # Length of author name in (non-expanded) commits view. 2 means show initials only.
+ commitAuthorShortLength: 2
+
+ # Length of author name in expanded commits view. 2 means show initials only.
+ commitAuthorLongLength: 17
+
# Length of commit hash in commits view. 0 shows '*' if NF icons aren't on.
commitHashLength: 8
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 522a4f234..2c3baaa1b 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -125,6 +125,10 @@ type GuiConfig struct {
NerdFontsVersion string `yaml:"nerdFontsVersion" jsonschema:"enum=2,enum=3,enum="`
// If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.
ShowFileIcons bool `yaml:"showFileIcons"`
+ // Length of author name in (non-expanded) commits view. 2 means show initials only.
+ CommitAuthorShortLength int `yaml:"commitAuthorShortLength"`
+ // Length of author name in expanded commits view. 2 means show initials only.
+ CommitAuthorLongLength int `yaml:"commitAuthorLongLength"`
// Length of commit hash in commits view. 0 shows '*' if NF icons aren't on.
CommitHashLength int `yaml:"commitHashLength" jsonschema:"minimum=0"`
// If true, show commit hashes alongside branch names in the branches view.
@@ -694,6 +698,8 @@ func GetDefaultConfig() *UserConfig {
ShowIcons: false,
NerdFontsVersion: "",
ShowFileIcons: true,
+ CommitAuthorShortLength: 2,
+ CommitAuthorLongLength: 17,
CommitHashLength: 8,
ShowBranchCommitHash: false,
ShowDivergenceFromBaseBranch: "none",
diff --git a/pkg/gui/presentation/authors/authors.go b/pkg/gui/presentation/authors/authors.go
index 8f6325841..28c375f75 100644
--- a/pkg/gui/presentation/authors/authors.go
+++ b/pkg/gui/presentation/authors/authors.go
@@ -11,11 +11,16 @@ import (
"github.com/mattn/go-runewidth"
)
+type authorNameCacheKey struct {
+ authorName string
+ truncateTo int
+}
+
// if these being global variables causes trouble we can wrap them in a struct
// attached to the gui state.
var (
authorInitialCache = make(map[string]string)
- authorNameCache = make(map[string]string)
+ authorNameCache = make(map[authorNameCacheKey]string)
authorStyleCache = make(map[string]style.TextStyle)
)
@@ -37,19 +42,37 @@ func ShortAuthor(authorName string) string {
return value
}
-func LongAuthor(authorName string) string {
- if value, ok := authorNameCache[authorName]; ok {
+func LongAuthor(authorName string, length int) string {
+ cacheKey := authorNameCacheKey{authorName: authorName, truncateTo: length}
+ if value, ok := authorNameCache[cacheKey]; ok {
return value
}
- paddedAuthorName := utils.WithPadding(authorName, 17, utils.AlignLeft)
- truncatedName := utils.TruncateWithEllipsis(paddedAuthorName, 17)
+ paddedAuthorName := utils.WithPadding(authorName, length, utils.AlignLeft)
+ truncatedName := utils.TruncateWithEllipsis(paddedAuthorName, length)
value := AuthorStyle(authorName).Sprint(truncatedName)
- authorNameCache[authorName] = value
+ authorNameCache[cacheKey] = value
return value
}
+// AuthorWithLength returns a representation of the author that fits into a
+// given maximum length:
+// - if the length is less than 2, it returns an empty string
+// - if the length is 2, it returns the initials
+// - otherwise, it returns the author name truncated to the maximum length
+func AuthorWithLength(authorName string, length int) string {
+ if length < 2 {
+ return ""
+ }
+
+ if length == 2 {
+ return ShortAuthor(authorName)
+ }
+
+ return LongAuthor(authorName, length)
+}
+
func AuthorStyle(authorName string) style.TextStyle {
if value, ok := authorStyleCache[authorName]; ok {
return value
diff --git a/pkg/gui/presentation/authors/authors_test.go b/pkg/gui/presentation/authors/authors_test.go
index 58efba297..d7c651031 100644
--- a/pkg/gui/presentation/authors/authors_test.go
+++ b/pkg/gui/presentation/authors/authors_test.go
@@ -1,6 +1,11 @@
package authors
-import "testing"
+import (
+ "testing"
+
+ "github.com/jesseduffield/lazygit/pkg/utils"
+ "github.com/stretchr/testify/assert"
+)
func TestGetInitials(t *testing.T) {
for input, expectedOutput := range map[string]string{
@@ -18,3 +23,21 @@ func TestGetInitials(t *testing.T) {
}
}
}
+
+func TestAuthorWithLength(t *testing.T) {
+ scenarios := []struct {
+ authorName string
+ length int
+ expectedOutput string
+ }{
+ {"Jesse Duffield", 0, ""},
+ {"Jesse Duffield", 1, ""},
+ {"Jesse Duffield", 2, "JD"},
+ {"Jesse Duffield", 3, "Je…"},
+ {"Jesse Duffield", 10, "Jesse Duf…"},
+ {"Jesse Duffield", 14, "Jesse Duffield"},
+ }
+ for _, s := range scenarios {
+ assert.Equal(t, s.expectedOutput, utils.Decolorise(AuthorWithLength(s.authorName, s.length)))
+ }
+}
diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go
index c385d3407..92327462f 100644
--- a/pkg/gui/presentation/commits.go
+++ b/pkg/gui/presentation/commits.go
@@ -440,10 +440,11 @@ func displayCommit(
mark = fmt.Sprintf("%s ", willBeRebased)
}
- authorFunc := authors.ShortAuthor
+ authorLength := common.UserConfig.Gui.CommitAuthorShortLength
if fullDescription {
- authorFunc = authors.LongAuthor
+ authorLength = common.UserConfig.Gui.CommitAuthorLongLength
}
+ author := authors.AuthorWithLength(commit.AuthorName, authorLength)
cols := make([]string, 0, 7)
cols = append(
@@ -453,7 +454,7 @@ func displayCommit(
bisectString,
descriptionString,
actionString,
- authorFunc(commit.AuthorName),
+ author,
graphLine+mark+tagString+theme.DefaultTextColor.Sprint(name),
)
diff --git a/schema/config.json b/schema/config.json
index 77a16099f..ba422388a 100644
--- a/schema/config.json
+++ b/schema/config.json
@@ -332,6 +332,16 @@
"description": "If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.",
"default": true
},
+ "commitAuthorShortLength": {
+ "type": "integer",
+ "description": "Length of author name in (non-expanded) commits view. 2 means show initials only.",
+ "default": 2
+ },
+ "commitAuthorLongLength": {
+ "type": "integer",
+ "description": "Length of author name in expanded commits view. 2 means show initials only.",
+ "default": 17
+ },
"commitHashLength": {
"type": "integer",
"minimum": 0,