1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-01-04 03:48:07 +02:00

facilitate toggling whitespace in the diff view with a hotkey (c-w by default)

This commit is contained in:
Davyd McColl 2021-05-28 12:02:19 +02:00 committed by Jesse Duffield
parent 83834a2c2e
commit a9f04d3925
9 changed files with 32 additions and 9 deletions

View File

@ -189,17 +189,18 @@ func (c *GitCommand) Ignore(filename string) error {
}
// WorktreeFileDiff returns the diff of a file
func (c *GitCommand) WorktreeFileDiff(file *models.File, plain bool, cached bool) string {
func (c *GitCommand) WorktreeFileDiff(file *models.File, plain bool, cached bool, ignoreWhitespace bool) string {
// for now we assume an error means the file was deleted
s, _ := c.OSCommand.RunCommandWithOutput(c.WorktreeFileDiffCmdStr(file, plain, cached))
s, _ := c.OSCommand.RunCommandWithOutput(c.WorktreeFileDiffCmdStr(file, plain, cached, ignoreWhitespace))
return s
}
func (c *GitCommand) WorktreeFileDiffCmdStr(node models.IFile, plain bool, cached bool) string {
func (c *GitCommand) WorktreeFileDiffCmdStr(node models.IFile, plain bool, cached bool, ignoreWhitespace bool) string {
cachedArg := ""
trackedArg := "--"
colorArg := c.colorArg()
path := c.OSCommand.Quote(node.GetPath())
ignoreWhitespaceArg := ""
if cached {
cachedArg = "--cached"
}
@ -209,8 +210,11 @@ func (c *GitCommand) WorktreeFileDiffCmdStr(node models.IFile, plain bool, cache
if plain {
colorArg = "never"
}
if ignoreWhitespace {
ignoreWhitespaceArg = "-w"
}
return fmt.Sprintf("git diff --submodule --no-ext-diff --color=%s %s %s %s", colorArg, cachedArg, trackedArg, path)
return fmt.Sprintf("git diff --submodule --no-ext-diff --color=%s %s %s %s %s", colorArg, ignoreWhitespaceArg, cachedArg, trackedArg, path)
}
func (c *GitCommand) ApplyPatch(patch string, flags ...string) error {

View File

@ -165,6 +165,7 @@ type KeybindingUniversalConfig struct {
SubmitEditorText string `yaml:"submitEditorText"`
AppendNewline string `yaml:"appendNewline"`
ExtrasMenu string `yaml:"extrasMenu"`
ToggleWhitespaceInDiffView string `yaml:"toggleWhitespaceInDiffView"`
}
type KeybindingStatusConfig struct {
@ -404,6 +405,7 @@ func GetDefaultConfig() *UserConfig {
SubmitEditorText: "<enter>",
AppendNewline: "<a-enter>",
ExtrasMenu: "@",
ToggleWhitespaceInDiffView: "<c-w>",
},
Status: KeybindingStatusConfig{
CheckForUpdate: "u",

View File

@ -71,7 +71,7 @@ func (gui *Gui) selectFile(alreadySelected bool) error {
return gui.refreshMergePanelWithLock()
}
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(node, false, !node.GetHasUnstagedChanges() && node.GetHasStagedChanges())
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(node, false, !node.GetHasUnstagedChanges() && node.GetHasStagedChanges(), gui.State.IgnoreWhitespaceInDiffView)
cmd := gui.OSCommand.ExecutableFromString(cmdStr)
refreshOpts := refreshMainOpts{main: &viewUpdateOpts{
@ -81,7 +81,7 @@ func (gui *Gui) selectFile(alreadySelected bool) error {
if node.GetHasUnstagedChanges() {
if node.GetHasStagedChanges() {
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(node, false, true)
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(node, false, true, gui.State.IgnoreWhitespaceInDiffView)
cmd := gui.OSCommand.ExecutableFromString(cmdStr)
refreshOpts.secondary = &viewUpdateOpts{

View File

@ -339,6 +339,9 @@ type guiState struct {
// do this whenever we switch back and forth between repos to get the views
// back in sync with the repo state
ViewsSetup bool
// flag as to whether or not the diff view should ignore whitespace
IgnoreWhitespaceInDiffView bool
}
// reuseState determines if we pull the repo state from our repo state map or

View File

@ -1719,6 +1719,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Description: gui.Tr.LcViewBulkSubmoduleOptions,
OpensMenu: true,
},
{
ViewName: "files",
Contexts: []string{string(FILES_CONTEXT_KEY)},
Key: gui.getKey(config.Universal.ToggleWhitespaceInDiffView),
Handler: gui.toggleWhitespaceInDiffView,
Description: gui.Tr.ToggleWhitespaceInDiffView,
},
{
ViewName: "extras",
Key: gocui.MouseWheelUp,

View File

@ -29,6 +29,11 @@ func (gui *Gui) handleQuitWithoutChangingDirectory() error {
return gui.quit()
}
func (gui *Gui) toggleWhitespaceInDiffView() error {
gui.State.IgnoreWhitespaceInDiffView = !gui.State.IgnoreWhitespaceInDiffView
return gui.refreshFilesAndSubmodules()
}
func (gui *Gui) handleQuit() error {
gui.State.RetainOriginalDir = false
return gui.quit()

View File

@ -34,8 +34,8 @@ func (gui *Gui) refreshStagingPanel(forceSecondaryFocused bool, selectedLineIdx
}
// note for custom diffs, we'll need to send a flag here saying not to use the custom diff
diff := gui.GitCommand.WorktreeFileDiff(file, true, secondaryFocused)
secondaryDiff := gui.GitCommand.WorktreeFileDiff(file, true, !secondaryFocused)
diff := gui.GitCommand.WorktreeFileDiff(file, true, secondaryFocused, gui.State.IgnoreWhitespaceInDiffView)
secondaryDiff := gui.GitCommand.WorktreeFileDiff(file, true, !secondaryFocused, gui.State.IgnoreWhitespaceInDiffView)
// if we have e.g. a deleted file with nothing else to the diff will have only
// 4-5 lines in which case we'll swap panels

View File

@ -37,7 +37,7 @@ func (gui *Gui) handleSubmoduleSelect() error {
if file == nil {
task = NewRenderStringTask(prefix)
} else {
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(file, false, !file.HasUnstagedChanges && file.HasStagedChanges)
cmdStr := gui.GitCommand.WorktreeFileDiffCmdStr(file, false, !file.HasUnstagedChanges && file.HasStagedChanges, gui.State.IgnoreWhitespaceInDiffView)
cmd := gui.OSCommand.ExecutableFromString(cmdStr)
task = NewRunCommandTaskWithPrefix(cmd, prefix)
}

View File

@ -451,6 +451,7 @@ type TranslationSet struct {
CommandLogHeader string
RandomTip string
SelectParentCommitForMerge string
ToggleWhitespaceInDiffView string
Spans Spans
}
@ -995,6 +996,7 @@ func englishTranslationSet() TranslationSet {
CommandLogHeader: "You can hide/focus this panel by pressing '%s' or hide it permanently in your config with `gui.showCommandLog: false`\n",
RandomTip: "Random Tip",
SelectParentCommitForMerge: "Select parent commit for merge",
ToggleWhitespaceInDiffView: "Toggle whether or not whitespace changes are shown in the diff view",
Spans: Spans{
// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
CheckoutCommit: "Checkout commit",