mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-01 00:54:58 +02:00
standardise getting selected item
This commit is contained in:
@ -46,17 +46,11 @@ func (gui *Gui) currentDiffTerminals() []string {
|
|||||||
names := []string{}
|
names := []string{}
|
||||||
switch currentView.Name() {
|
switch currentView.Name() {
|
||||||
case "files":
|
case "files":
|
||||||
// not supporting files for now
|
// not supporting files for now
|
||||||
// file, err := gui.getSelectedFile()
|
|
||||||
// if err == nil {
|
|
||||||
// names = append(names, file.Name)
|
|
||||||
// }
|
|
||||||
case "commitFiles":
|
case "commitFiles":
|
||||||
// not supporting commit files for now
|
// not supporting commit files for now
|
||||||
// file := gui.getSelectedCommitFile()
|
|
||||||
// if file != nil {
|
|
||||||
// names = append(names, file.Name)
|
|
||||||
// }
|
|
||||||
case "commits":
|
case "commits":
|
||||||
var commit *commands.Commit
|
var commit *commands.Commit
|
||||||
switch gui.getCommitsView().Context {
|
switch gui.getCommitsView().Context {
|
||||||
|
@ -5,11 +5,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,13 +19,13 @@ import (
|
|||||||
|
|
||||||
// list panel functions
|
// list panel functions
|
||||||
|
|
||||||
func (gui *Gui) getSelectedFile() (*commands.File, error) {
|
func (gui *Gui) getSelectedFile() *commands.File {
|
||||||
selectedLine := gui.State.Panels.Files.SelectedLine
|
selectedLine := gui.State.Panels.Files.SelectedLine
|
||||||
if selectedLine == -1 {
|
if selectedLine == -1 {
|
||||||
return &commands.File{}, gui.Errors.ErrNoFiles
|
return &commands.File{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return gui.State.Files[selectedLine], nil
|
return gui.State.Files[selectedLine]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) selectFile(alreadySelected bool) error {
|
func (gui *Gui) selectFile(alreadySelected bool) error {
|
||||||
@ -35,11 +35,8 @@ func (gui *Gui) selectFile(alreadySelected bool) error {
|
|||||||
return gui.renderDiff()
|
return gui.renderDiff()
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
gui.State.SplitMainPanel = false
|
gui.State.SplitMainPanel = false
|
||||||
gui.getMainView().Title = ""
|
gui.getMainView().Title = ""
|
||||||
return gui.newStringTask("main", gui.Tr.SLocalize("NoChangedFiles"))
|
return gui.newStringTask("main", gui.Tr.SLocalize("NoChangedFiles"))
|
||||||
@ -95,7 +92,7 @@ func (gui *Gui) refreshFiles() error {
|
|||||||
gui.State.RefreshingFilesMutex.Unlock()
|
gui.State.RefreshingFilesMutex.Unlock()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
selectedFile, _ := gui.getSelectedFile()
|
selectedFile := gui.getSelectedFile()
|
||||||
|
|
||||||
filesView := gui.getFilesView()
|
filesView := gui.getFilesView()
|
||||||
if filesView == nil {
|
if filesView == nil {
|
||||||
@ -111,8 +108,8 @@ func (gui *Gui) refreshFiles() error {
|
|||||||
gui.renderDisplayStrings(filesView, displayStrings)
|
gui.renderDisplayStrings(filesView, displayStrings)
|
||||||
|
|
||||||
if g.CurrentView() == filesView || (g.CurrentView() == gui.getMainView() && g.CurrentView().Context == "merging") {
|
if g.CurrentView() == filesView || (g.CurrentView() == gui.getMainView() && g.CurrentView().Context == "merging") {
|
||||||
newSelectedFile, _ := gui.getSelectedFile()
|
newSelectedFile := gui.getSelectedFile()
|
||||||
alreadySelected := newSelectedFile.Name == selectedFile.Name
|
alreadySelected := selectedFile != nil && newSelectedFile != nil && newSelectedFile.Name == selectedFile.Name
|
||||||
return gui.selectFile(alreadySelected)
|
return gui.selectFile(alreadySelected)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -146,10 +143,11 @@ func (gui *Gui) trackedFiles() []*commands.File {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) stageSelectedFile(g *gocui.Gui) error {
|
func (gui *Gui) stageSelectedFile(g *gocui.Gui) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return gui.GitCommand.StageFile(file.Name)
|
return gui.GitCommand.StageFile(file.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,13 +156,11 @@ func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error {
|
func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if file.HasInlineMergeConflicts {
|
if file.HasInlineMergeConflicts {
|
||||||
return gui.handleSwitchToMerge()
|
return gui.handleSwitchToMerge()
|
||||||
}
|
}
|
||||||
@ -178,12 +174,9 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleFilePress() error {
|
func (gui *Gui) handleFilePress() error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err == gui.Errors.ErrNoFiles {
|
return nil
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if file.HasInlineMergeConflicts {
|
if file.HasInlineMergeConflicts {
|
||||||
@ -191,12 +184,13 @@ func (gui *Gui) handleFilePress() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if file.HasUnstagedChanges {
|
if file.HasUnstagedChanges {
|
||||||
err = gui.GitCommand.StageFile(file.Name)
|
if err := gui.GitCommand.StageFile(file.Name); err != nil {
|
||||||
|
return gui.surfaceError(err)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
err = gui.GitCommand.UnStageFile(file.Name, file.Tracked)
|
if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil {
|
||||||
}
|
return gui.surfaceError(err)
|
||||||
if err != nil {
|
}
|
||||||
return gui.surfaceError(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil {
|
if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil {
|
||||||
@ -242,9 +236,9 @@ func (gui *Gui) handleStageAll(g *gocui.Gui, v *gocui.View) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return gui.surfaceError(err)
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if file.Tracked {
|
if file.Tracked {
|
||||||
@ -395,18 +389,18 @@ func (gui *Gui) editFile(filename string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleFileEdit(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) handleFileEdit(g *gocui.Gui, v *gocui.View) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return gui.surfaceError(err)
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return gui.editFile(file.Name)
|
return gui.editFile(file.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleFileOpen(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) handleFileOpen(g *gocui.Gui, v *gocui.View) error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return gui.surfaceError(err)
|
return nil
|
||||||
}
|
}
|
||||||
return gui.openFile(file.Name)
|
return gui.openFile(file.Name)
|
||||||
}
|
}
|
||||||
@ -419,7 +413,7 @@ func (gui *Gui) refreshStateFiles() error {
|
|||||||
// keep track of where the cursor is currently and the current file names
|
// keep track of where the cursor is currently and the current file names
|
||||||
// when we refresh, go looking for a matching name
|
// when we refresh, go looking for a matching name
|
||||||
// move the cursor to there.
|
// move the cursor to there.
|
||||||
selectedFile, _ := gui.getSelectedFile()
|
selectedFile := gui.getSelectedFile()
|
||||||
|
|
||||||
// get files to stage
|
// get files to stage
|
||||||
files := gui.GitCommand.GetStatusFiles(commands.GetStatusFileOptions{})
|
files := gui.GitCommand.GetStatusFiles(commands.GetStatusFileOptions{})
|
||||||
@ -581,13 +575,11 @@ func (gui *Gui) pushFiles(g *gocui.Gui, v *gocui.View) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleSwitchToMerge() error {
|
func (gui *Gui) handleSwitchToMerge() error {
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return gui.surfaceError(err)
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !file.HasInlineMergeConflicts {
|
if !file.HasInlineMergeConflicts {
|
||||||
return gui.createErrorPanel(gui.Tr.SLocalize("FileNoMergeCons"))
|
return gui.createErrorPanel(gui.Tr.SLocalize("FileNoMergeCons"))
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,8 @@ func (gui *Gui) handleCreateFilteringMenuPanel(g *gocui.Gui, v *gocui.View) erro
|
|||||||
fileName := ""
|
fileName := ""
|
||||||
switch v.Name() {
|
switch v.Name() {
|
||||||
case "files":
|
case "files":
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err == nil {
|
if file != nil {
|
||||||
fileName = file.Name
|
fileName = file.Name
|
||||||
}
|
}
|
||||||
case "commitFiles":
|
case "commitFiles":
|
||||||
|
@ -336,8 +336,8 @@ func (gui *Gui) handleOpenFileAtLine() error {
|
|||||||
case "patch-building":
|
case "patch-building":
|
||||||
filename = gui.getSelectedCommitFileName()
|
filename = gui.getSelectedCommitFileName()
|
||||||
case "staging":
|
case "staging":
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
filename = file.Name
|
filename = file.Name
|
||||||
|
@ -113,9 +113,9 @@ func (gui *Gui) isIndexToDelete(i int, conflict commands.Conflict, pick string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
|
func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
|
||||||
gitFile, err := gui.getSelectedFile()
|
gitFile := gui.getSelectedFile()
|
||||||
if err != nil {
|
if gitFile == nil {
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
file, err := os.Open(gitFile.Name)
|
file, err := os.Open(gitFile.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -139,9 +139,9 @@ func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error {
|
func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error {
|
||||||
gitFile, err := gui.getSelectedFile()
|
gitFile := gui.getSelectedFile()
|
||||||
if err != nil {
|
if gitFile == nil {
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
content, err := gui.GitCommand.CatFile(gitFile.Name)
|
content, err := gui.GitCommand.CatFile(gitFile.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -156,9 +156,9 @@ func (gui *Gui) handlePopFileSnapshot(g *gocui.Gui, v *gocui.View) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
prevContent := gui.State.Panels.Merging.EditHistory.Pop().(string)
|
prevContent := gui.State.Panels.Merging.EditHistory.Pop().(string)
|
||||||
gitFile, err := gui.getSelectedFile()
|
gitFile := gui.getSelectedFile()
|
||||||
if err != nil {
|
if gitFile == nil {
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
if err := ioutil.WriteFile(gitFile.Name, []byte(prevContent), 0644); err != nil {
|
if err := ioutil.WriteFile(gitFile.Name, []byte(prevContent), 0644); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -249,16 +249,15 @@ func (gui *Gui) refreshMergePanel() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
|
func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
|
||||||
item, err := gui.getSelectedFile()
|
item := gui.getSelectedFile()
|
||||||
if err != nil {
|
if item == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay"))
|
return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.Type != "file" {
|
if item.Type != "file" {
|
||||||
return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile"))
|
return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile"))
|
||||||
}
|
}
|
||||||
|
|
||||||
cat, err := gui.GitCommand.CatFile(item.Name)
|
cat, err := gui.GitCommand.CatFile(item.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
gui.Log.Error(err)
|
gui.Log.Error(err)
|
||||||
@ -353,8 +352,8 @@ func (gui *Gui) canScrollMergePanel() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,11 +19,8 @@ func (gui *Gui) refreshStagingPanel(forceSecondaryFocused bool, selectedLineIdx
|
|||||||
// return err
|
// return err
|
||||||
// }
|
// }
|
||||||
|
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
if err != gui.Errors.ErrNoFiles {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return gui.handleStagingEscape()
|
return gui.handleStagingEscape()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,9 +128,9 @@ func (gui *Gui) handleResetSelection(g *gocui.Gui, v *gocui.View) error {
|
|||||||
func (gui *Gui) applySelection(reverse bool) error {
|
func (gui *Gui) applySelection(reverse bool) error {
|
||||||
state := gui.State.Panels.LineByLine
|
state := gui.State.Panels.LineByLine
|
||||||
|
|
||||||
file, err := gui.getSelectedFile()
|
file := gui.getSelectedFile()
|
||||||
if err != nil {
|
if file == nil {
|
||||||
return err
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
patch := patch.ModifiedPatchForRange(gui.Log, file.Name, state.Diff, state.FirstLineIdx, state.LastLineIdx, reverse, false)
|
patch := patch.ModifiedPatchForRange(gui.Log, file.Name, state.Diff, state.FirstLineIdx, state.LastLineIdx, reverse, false)
|
||||||
@ -148,7 +145,7 @@ func (gui *Gui) applySelection(reverse bool) error {
|
|||||||
if !reverse || state.SecondaryFocused {
|
if !reverse || state.SecondaryFocused {
|
||||||
applyFlags = append(applyFlags, "cached")
|
applyFlags = append(applyFlags, "cached")
|
||||||
}
|
}
|
||||||
err = gui.GitCommand.ApplyPatch(patch, applyFlags...)
|
err := gui.GitCommand.ApplyPatch(patch, applyFlags...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return gui.surfaceError(err)
|
return gui.surfaceError(err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user