diff options
Diffstat (limited to 'pkg/gui/command_log_panel.go')
-rw-r--r-- | pkg/gui/command_log_panel.go | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/pkg/gui/command_log_panel.go b/pkg/gui/command_log_panel.go index bd037aa7d..2f9abff3b 100644 --- a/pkg/gui/command_log_panel.go +++ b/pkg/gui/command_log_panel.go @@ -2,10 +2,13 @@ package gui import ( "fmt" + "math/rand" "strings" + "time" "github.com/fatih/color" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" + "github.com/jesseduffield/lazygit/pkg/constants" "github.com/jesseduffield/lazygit/pkg/theme" "github.com/jesseduffield/lazygit/pkg/utils" ) @@ -35,3 +38,148 @@ func (gui *Gui) GetOnRunCommand() func(entry oscommands.CmdLogEntry) { fmt.Fprint(gui.Views.Extras, "\n"+utils.ColoredString(indentedCmdStr, clrAttr)) } } + +func (gui *Gui) printCommandLogHeader() { + introStr := fmt.Sprintf( + gui.Tr.CommandLogHeader, + gui.getKeyDisplay(gui.Config.GetUserConfig().Keybinding.Universal.ExtrasMenu), + ) + fmt.Fprintln(gui.Views.Extras, utils.ColoredString(introStr, color.FgCyan)) + + fmt.Fprint( + gui.Views.Extras, + fmt.Sprintf( + "%s: %s", + utils.ColoredString(gui.Tr.RandomTip, color.FgYellow), + utils.ColoredString(gui.getRandomTip(), color.FgGreen), + ), + ) +} + +func (gui *Gui) getRandomTip() string { + config := gui.Config.GetUserConfig().Keybinding + + formattedKey := func(key string) string { + return gui.getKeyDisplay(key) + } + + tips := []string{ + // keybindings and lazygit-specific advice + fmt.Sprintf( + "To force push, press '%s' and then if the push is rejected you will be asked if you want to force push", + formattedKey(config.Universal.PushFiles), + ), + fmt.Sprintf( + "To filter commits by path, press '%s'", + formattedKey(config.Universal.FilteringMenu), + ), + fmt.Sprintf( + "To start an interactive rebase, press '%s' on a commit. You can always abort the rebase by pressing '%s' and selecting 'abort'", + formattedKey(config.Universal.Edit), + formattedKey(config.Universal.CreateRebaseOptionsMenu), + ), + fmt.Sprintf( + "In flat file view, merge conflicts are sorted to the top. To switch to flat file view press '%s'", + formattedKey(config.Files.ToggleTreeView), + ), + "If you want to learn Go and can think of ways to improve lazygit, join the team! Click 'Ask Question' and express your interest", + fmt.Sprintf( + "If you press '%s'/'%s' you can undo/redo your changes. Be wary though, this only applies to branches/commits, so only do this if your worktree is clear.\nDocs: %s", + formattedKey(config.Universal.Undo), + formattedKey(config.Universal.Redo), + constants.Links.Docs.Undoing, + ), + fmt.Sprintf( + "to hard reset onto your current upstream branch, press '%s' in the files panel", + formattedKey(config.Files.ViewResetOptions), + ), + fmt.Sprintf( + "To push a tag, navigate to the tag in the tags tab and press '%s'", + formattedKey(config.Branches.PushTag), + ), + fmt.Sprintf( + "You can view the individual files of a stash entry by pressing '%s'", + formattedKey(config.Universal.GoInto), + ), + fmt.Sprintf( + "You can diff two commits by pressing '%s' one one commit and then navigating to the other. You can then press '%s' to view the files of the diff", + formattedKey(config.Universal.DiffingMenu), + formattedKey(config.Universal.GoInto), + ), + fmt.Sprintf( + "press '%s' on a commit to drop it (delete it)", + formattedKey(config.Universal.Remove), + ), + fmt.Sprintf( + "If you need to pull out the big guns to resolve merge conflicts, you can press '%s' in the files panel to open 'git mergetool'", + formattedKey(config.Files.OpenMergeTool), + ), + fmt.Sprintf( + "To revert a commit, press '%s' on that commit", + formattedKey(config.Commits.RevertCommit), + ), + fmt.Sprintf( + "To escape a mode, for example cherry-picking, patch-building, diffing, or filtering mode, you can just spam the '%s' button. Unless of course you have `quitOnTopLevelReturn` enabled in your config", + formattedKey(config.Universal.Return), + ), + fmt.Sprintf( + "To search for a string in your panel, press '%s'", + formattedKey(config.Universal.StartSearch), + ), + fmt.Sprintf( + "You can page through the items of a panel using '%s' and '%s'", + formattedKey(config.Universal.PrevPage), + formattedKey(config.Universal.NextPage), + ), + fmt.Sprintf( + "You can jump to the top/bottom of a panel using '%s' and '%s'", + formattedKey(config.Universal.GotoTop), + formattedKey(config.Universal.GotoBottom), + ), + fmt.Sprintf( + "To collapse/expand a directory, press '%s'", + formattedKey(config.Universal.GoInto), + ), + fmt.Sprintf( + "You can append your staged changes to an older commit by pressing '%s' on that commit", + formattedKey(config.Commits.AmendToCommit), + ), + fmt.Sprintf( + "You can amend the last commit with your new file changes by pressing '%s' in the files panel", + formattedKey(config.Files.AmendLastCommit), + ), + fmt.Sprintf( + "You can now navigate the side panels with '%s' and '%s'", + formattedKey(config.Universal.NextBlockAlt2), + formattedKey(config.Universal.PrevBlockAlt2), + ), + + "You can use lazygit with a bare repo by passing the --git-dir and --work-tree arguments as you would for the git CLI", + + // general advice + "`git commit` is really just the programmer equivalent of saving your game. Always do it before embarking on an ambitious change!", + "Try to separate commits that refactor code from commits that add new functionality: if they're squashed into the one commit, it can be hard to spot what's new.", + "If you ever want to experiment, it's easy to create a new branch off your current one and go nuts, then delete it afterwards", + "Always read through the diff of your changes before assigning somebody to review your code. Better for you to catch any silly mistakes than your colleagues!", + "If something goes wrong, you can always checkout a commit from your reflog to return to an earlier state", + "The stash is a good place to save snippets of code that you always find yourself adding when debugging.", + + // links + fmt.Sprintf( + "If you want a git diff with syntax colouring, check out lazygit's integration with delta:\n%s", + constants.Links.Docs.CustomPagers, + ), + fmt.Sprintf( + "You can build your own custom menus and commands to run from within lazygit. For examples see:\n%s", + constants.Links.Docs.CustomCommands, + ), + fmt.Sprintf( + "If you ever find a bug, do not hesistate to raise an issue on the repo:\n%s", + constants.Links.Issues, + ), + } + + rand.Seed(time.Now().UnixNano()) + randomIndex := rand.Intn(len(tips)) + return tips[randomIndex] +} |