diff --git a/Keybindings_en.md b/Keybindings_en.md index ff91437df..e80ba5f95 100644 --- a/Keybindings_en.md +++ b/Keybindings_en.md @@ -30,8 +30,8 @@ o: open file i: add to .gitignore r: refresh files - s: stash files - S: soft reset to last commit + S: stash files + s: soft reset to last commit a: stage/unstage all t: add patch D: reset hard and remove untracked files @@ -57,7 +57,7 @@
   s: squash down
-  r: rename commit
+  r: reword commit
   R: rename commit with editor
   g: reset to this commit
   f: fixup commit
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 3e0e3b1d1..eb49fe672 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -13,7 +13,6 @@ type Binding struct {
 	Key         interface{} // FIXME: find out how to get `gocui.Key | rune`
 	Modifier    gocui.Modifier
 	Description string
-	panic       bool
 }
 
 // GetDisplayStrings returns the display string of a file
@@ -32,10 +31,6 @@ func (b *Binding) GetKey() string {
 		key = int(b.Key.(gocui.Key))
 	}
 
-	if b.panic {
-		panic(key)
-	}
-
 	// special keys
 	switch key {
 	case 27:
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 7195c5f0d..79c1e9854 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -311,10 +311,10 @@ func addEnglish(i18nObject *i18n.Bundle) error {
 			Other: "revert commit", // TODO: i18n
 		}, &i18n.Message{
 			ID:    "OnlyRenameTopCommit",
-			Other: "Can only rename topmost commit from within lazygit. Use shift+R instead",
+			Other: "Can only reword topmost commit from within lazygit. Use shift+R instead",
 		}, &i18n.Message{
 			ID:    "renameCommit",
-			Other: "rename commit",
+			Other: "reword commit",
 		}, &i18n.Message{
 			ID:    "deleteCommit",
 			Other: "delete commit", // TODO: other languages
diff --git a/scripts/generate_cheatsheet.go b/scripts/generate_cheatsheet.go
index 92d5880a5..f8beaa457 100644
--- a/scripts/generate_cheatsheet.go
+++ b/scripts/generate_cheatsheet.go
@@ -19,6 +19,24 @@ import (
 	"github.com/jesseduffield/lazygit/pkg/gui"
 )
 
+type bindingSection struct {
+	title    string
+	bindings []*gui.Binding
+}
+
+func main() {
+	mConfig, _ := config.NewAppConfig("", "", "", "", "", true)
+	mApp, _ := app.NewApp(mConfig)
+	lang := mApp.Tr.GetLanguage()
+	file, _ := os.Create("Keybindings_" + lang + ".md")
+
+	bindingSections := getBindingSections(mApp)
+
+	content := formatSections(mApp, bindingSections)
+
+	writeString(file, content)
+}
+
 func writeString(file *os.File, str string) {
 	_, err := file.WriteString(str)
 	if err != nil {
@@ -35,24 +53,12 @@ func formatTitle(title string) string {
 	return fmt.Sprintf("\n## %s\n\n", title)
 }
 
-func writeBinding(file *os.File, binding *gui.Binding) {
-	info := fmt.Sprintf("  %s: %s\n", binding.GetKey(), binding.Description)
-	writeString(file, info)
+func formatBinding(binding *gui.Binding) string {
+	return fmt.Sprintf("  %s: %s\n", binding.GetKey(), binding.Description)
 }
 
-// I should really just build an array of tuples, one thing with a string and the other with a list of bindings, and then build them like that.
-
-func main() {
-	mConfig, _ := config.NewAppConfig("", "", "", "", "", true)
-	mApp, _ := app.NewApp(mConfig)
-	lang := mApp.Tr.GetLanguage()
-	file, _ := os.Create("Keybindings_" + lang + ".md")
-	current := ""
-
-	writeString(file, fmt.Sprintf("# Lazygit %s\n", mApp.Tr.SLocalize("menu")))
-	writeString(file, formatTitle(localisedTitle(mApp, "global")))
-
-	writeString(file, "
\n")
+func getBindingSections(mApp *app.App) []*bindingSection {
+	bindingSections := []*bindingSection{}
 
 	// TODO: add context-based keybindings
 	for _, binding := range mApp.Gui.GetInitialKeybindings() {
@@ -60,32 +66,61 @@ func main() {
 			continue
 		}
 
-		if binding.ViewName != current {
-			current = binding.ViewName
-			writeString(file, "
\n") - writeString(file, formatTitle(localisedTitle(mApp, current))) - writeString(file, "
\n")
+		viewName := binding.ViewName
+		if viewName == "" {
+			viewName = "global"
 		}
+		title := localisedTitle(mApp, viewName)
 
-		writeBinding(file, binding)
+		bindingSections = addBinding(title, bindingSections, binding)
 	}
 
-	writeString(file, "
\n") - for view, contexts := range mApp.Gui.GetContextMap() { for contextName, contextBindings := range contexts { translatedView := localisedTitle(mApp, view) translatedContextName := localisedTitle(mApp, contextName) - writeString(file, fmt.Sprintf("\n## %s (%s)\n\n", translatedView, translatedContextName)) - writeString(file, "
\n")
-			for _, binding := range contextBindings {
-				if binding.Description == "" {
-					continue
-				}
+			title := fmt.Sprintf("%s (%s)", translatedView, translatedContextName)
 
-				writeBinding(file, binding)
+			for _, binding := range contextBindings {
+				bindingSections = addBinding(title, bindingSections, binding)
 			}
-			writeString(file, "
\n") } } + + return bindingSections +} + +func addBinding(title string, bindingSections []*bindingSection, binding *gui.Binding) []*bindingSection { + if binding.Description == "" { + return bindingSections + } + + for _, section := range bindingSections { + if title == section.title { + section.bindings = append(section.bindings, binding) + return bindingSections + } + } + + section := &bindingSection{ + title: title, + bindings: []*gui.Binding{binding}, + } + + return append(bindingSections, section) +} + +func formatSections(mApp *app.App, bindingSections []*bindingSection) string { + content := fmt.Sprintf("# Lazygit %s\n", mApp.Tr.SLocalize("menu")) + + for _, section := range bindingSections { + content += formatTitle(section.title) + content += "
\n"
+		for _, binding := range section.bindings {
+			content += formatBinding(binding)
+		}
+		content += "
\n" + } + + return content }