summaryrefslogtreecommitdiffstats
path: root/pkg/gui/line_by_line_panel.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/line_by_line_panel.go')
-rw-r--r--pkg/gui/line_by_line_panel.go275
1 files changed, 0 insertions, 275 deletions
diff --git a/pkg/gui/line_by_line_panel.go b/pkg/gui/line_by_line_panel.go
deleted file mode 100644
index 56de72426..000000000
--- a/pkg/gui/line_by_line_panel.go
+++ /dev/null
@@ -1,275 +0,0 @@
-package gui
-
-import (
- "github.com/go-errors/errors"
- "github.com/jesseduffield/lazygit/pkg/commands/patch"
- "github.com/jesseduffield/lazygit/pkg/gui/lbl"
-)
-
-// Currently there are two 'pseudo-panels' that make use of this 'pseudo-panel'.
-// One is the staging panel where we stage files line-by-line, the other is the
-// patch building panel where we add lines of an old commit's file to a patch.
-// This file contains the logic around selecting lines and displaying the diffs
-// staging_panel.go and patch_building_panel.go have functions specific to their
-// use cases
-
-// returns whether the patch is empty so caller can escape if necessary
-// both diffs should be non-coloured because we'll parse them and colour them here
-func (gui *Gui) refreshLineByLinePanel(diff string, secondaryDiff string, secondaryFocused bool, selectedLineIdx int) (bool, error) {
- gui.splitMainPanel(true)
-
- var oldState *lbl.State
- if gui.State.Panels.LineByLine != nil {
- oldState = gui.State.Panels.LineByLine.State
- }
-
- state := lbl.NewState(diff, selectedLineIdx, oldState, gui.Log)
- if state == nil {
- return true, nil
- }
-
- gui.State.Panels.LineByLine = &LblPanelState{
- State: state,
- SecondaryFocused: secondaryFocused,
- }
-
- if err := gui.refreshMainViewForLineByLine(gui.State.Panels.LineByLine); err != nil {
- return false, err
- }
-
- if err := gui.focusSelection(gui.State.Panels.LineByLine); err != nil {
- return false, err
- }
-
- gui.Views.Secondary.Highlight = true
- gui.Views.Secondary.Wrap = false
-
- secondaryPatchParser := patch.NewPatchParser(gui.Log, secondaryDiff)
-
- gui.setViewContent(gui.Views.Secondary, secondaryPatchParser.Render(-1, -1, nil))
-
- return false, nil
-}
-
-func (gui *Gui) handleSelectPrevLine() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.CycleSelection(false)
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleSelectNextLine() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.CycleSelection(true)
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleSelectPrevHunk() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.CycleHunk(false)
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleSelectNextHunk() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.CycleHunk(true)
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) copySelectedToClipboard() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- selected := state.PlainRenderSelected()
-
- gui.c.LogAction(gui.c.Tr.Actions.CopySelectedTextToClipboard)
- if err := gui.os.CopyToClipboard(selected); err != nil {
- return gui.c.Error(err)
- }
-
- return nil
- })
-}
-
-func (gui *Gui) refreshAndFocusLblPanel(state *LblPanelState) error {
- if err := gui.refreshMainViewForLineByLine(state); err != nil {
- return err
- }
-
- return gui.focusSelection(state)
-}
-
-func (gui *Gui) handleLBLMouseDown() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SelectNewLineForRange(gui.Views.Main.SelectedLineIdx())
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleMouseDrag() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SelectLine(gui.Views.Main.SelectedLineIdx())
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) refreshMainViewForLineByLine(state *LblPanelState) error {
- var includedLineIndices []int
- // I'd prefer not to have knowledge of contexts using this file but I'm not sure
- // how to get around this
- if gui.currentContext().GetKey() == gui.State.Contexts.PatchBuilding.GetKey() {
- filename := gui.getSelectedCommitFileName()
- var err error
- includedLineIndices, err = gui.git.Patch.PatchManager.GetFileIncLineIndices(filename)
- if err != nil {
- return err
- }
- }
- colorDiff := state.RenderForLineIndices(includedLineIndices)
-
- gui.Views.Main.Highlight = true
- gui.Views.Main.Wrap = false
-
- gui.setViewContent(gui.Views.Main, colorDiff)
-
- return nil
-}
-
-// focusSelection works out the best focus for the staging panel given the
-// selected line and size of the hunk
-func (gui *Gui) focusSelection(state *LblPanelState) error {
- stagingView := gui.Views.Main
-
- _, viewHeight := stagingView.Size()
- bufferHeight := viewHeight - 1
- _, origin := stagingView.Origin()
-
- selectedLineIdx := state.GetSelectedLineIdx()
-
- newOrigin := state.CalculateOrigin(origin, bufferHeight)
-
- if err := stagingView.SetOriginY(newOrigin); err != nil {
- return err
- }
-
- return stagingView.SetCursor(0, selectedLineIdx-newOrigin)
-}
-
-func (gui *Gui) handleToggleSelectRange() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.ToggleSelectRange()
-
- return gui.refreshMainViewForLineByLine(state)
- })
-}
-
-func (gui *Gui) handleToggleSelectHunk() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.ToggleSelectHunk()
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) escapeLineByLinePanel() {
- gui.State.Panels.LineByLine = nil
-}
-
-func (gui *Gui) handleOpenFileAtLine() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- // again, would be good to use inheritance here (or maybe even composition)
- var filename string
- switch gui.State.MainContext {
- case gui.State.Contexts.PatchBuilding.GetKey():
- filename = gui.getSelectedCommitFileName()
- case gui.State.Contexts.Staging.GetKey():
- file := gui.getSelectedFile()
- if file == nil {
- return nil
- }
- filename = file.Name
- default:
- return errors.Errorf("unknown main context: %s", gui.State.MainContext)
- }
-
- // need to look at current index, then work out what my hunk's header information is, and see how far my line is away from the hunk header
- lineNumber := state.CurrentLineNumber()
- if err := gui.os.OpenFileAtLine(filename, lineNumber); err != nil {
- return err
- }
-
- return nil
- })
-}
-
-func (gui *Gui) handleLineByLineNextPage() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SetLineSelectMode()
- state.AdjustSelectedLineIdx(gui.pageDelta(gui.Views.Main))
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleLineByLinePrevPage() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SetLineSelectMode()
- state.AdjustSelectedLineIdx(-gui.pageDelta(gui.Views.Main))
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleLineByLineGotoBottom() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SelectBottom()
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handleLineByLineGotoTop() error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SelectTop()
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) handlelineByLineNavigateTo(selectedLineIdx int) error {
- return gui.withLBLActiveCheck(func(state *LblPanelState) error {
- state.SetLineSelectMode()
- state.SelectLine(selectedLineIdx)
-
- return gui.refreshAndFocusLblPanel(state)
- })
-}
-
-func (gui *Gui) withLBLActiveCheck(f func(*LblPanelState) error) error {
- gui.Mutexes.LineByLinePanelMutex.Lock()
- defer gui.Mutexes.LineByLinePanelMutex.Unlock()
-
- state := gui.State.Panels.LineByLine
- if state == nil {
- return nil
- }
-
- return f(state)
-}
-
-func (gui *Gui) handleLineByLineEdit() error {
- file := gui.getSelectedFile()
- if file == nil {
- return nil
- }
-
- lineNumber := gui.State.Panels.LineByLine.CurrentLineNumber()
- return gui.helpers.Files.EditFileAtLine(file.Name, lineNumber)
-}