summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2018-08-25 08:51:47 +1000
committerJesse Duffield <jessedduffield@gmail.com>2018-08-25 08:59:51 +1000
commit60422912c8d41628c5ed1b4dd9432694c1be9199 (patch)
treebc4c85c0291106b30ca1c8db541143ba3c7d4a45
parent6c389df57dacc1b65e1891c247b20a6d64f94702 (diff)
add 'a' keybinding to toggle staged/unstaged for all files
-rw-r--r--docs/Keybindings.md2
-rw-r--r--pkg/commands/git.go12
-rw-r--r--pkg/gui/files_panel.go28
-rw-r--r--pkg/gui/keybindings.go3
-rw-r--r--pkg/i18n/dutch.go3
-rw-r--r--pkg/i18n/english.go3
-rw-r--r--pkg/i18n/polish.go3
7 files changed, 52 insertions, 2 deletions
diff --git a/docs/Keybindings.md b/docs/Keybindings.md
index 37fb523a2..9160b9c2b 100644
--- a/docs/Keybindings.md
+++ b/docs/Keybindings.md
@@ -22,6 +22,7 @@
<pre>
<kbd>space</kbd>: toggle staged
+ <kbd>a</kbd>: stage/unstage all
<kbd>c</kbd>: commit changes
<kbd>shift</kbd>+<kbd>C</kbd>: commit using git editor
<kbd>shift</kbd>+<kbd>S</kbd>: stash files
@@ -33,6 +34,7 @@
<kbd>i</kbd>: add to .gitignore
<kbd>d</kbd>: delete if untracked checkout if tracked (aka go away)
<kbd>shift</kbd>+<kbd>R</kbd>: refresh files
+ <kbd>shift</kbd>+<kbd>A</kbd>: abort merge
</pre>
## Branches Panel:
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 14f3a433a..ab4cebf87 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -7,9 +7,9 @@ import (
"os/exec"
"strings"
- "github.com/sirupsen/logrus"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/utils"
+ "github.com/sirupsen/logrus"
gitconfig "github.com/tcnksm/go-gitconfig"
gogit "gopkg.in/src-d/go-git.v4"
)
@@ -340,6 +340,16 @@ func (c *GitCommand) StageFile(fileName string) error {
return c.OSCommand.RunCommand("git add " + c.OSCommand.Quote(fileName))
}
+// StageAll stages all files
+func (c *GitCommand) StageAll() error {
+ return c.OSCommand.RunCommand("git add -A")
+}
+
+// UnstageAll stages all files
+func (c *GitCommand) UnstageAll() error {
+ return c.OSCommand.RunCommand("git reset")
+}
+
// UnStageFile unstages a file
func (c *GitCommand) UnStageFile(fileName string, tracked bool) error {
var command string
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 5791a9d15..642f6432a 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -71,6 +71,33 @@ func (gui *Gui) handleFilePress(g *gocui.Gui, v *gocui.View) error {
return gui.handleFileSelect(g, v)
}
+func (gui *Gui) allFilesStaged() bool {
+ for _, file := range gui.State.Files {
+ if file.HasUnstagedChanges {
+ return false
+ }
+ }
+ return true
+}
+
+func (gui *Gui) handleStageAll(g *gocui.Gui, v *gocui.View) error {
+ var err error
+ if gui.allFilesStaged() {
+ err = gui.GitCommand.UnstageAll()
+ } else {
+ err = gui.GitCommand.StageAll()
+ }
+ if err != nil {
+ _ = gui.createErrorPanel(g, err.Error())
+ }
+
+ if err := gui.refreshFiles(g); err != nil {
+ return err
+ }
+
+ return gui.handleFileSelect(g, v)
+}
+
func (gui *Gui) handleAddPatch(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile(g)
if err != nil {
@@ -160,6 +187,7 @@ func (gui *Gui) renderfilesOptions(g *gocui.Gui, file *commands.File) error {
"R": gui.Tr.SLocalize("refresh"),
"t": gui.Tr.SLocalize("addPatch"),
"e": gui.Tr.SLocalize("edit"),
+ "a": gui.Tr.SLocalize("toggleStagedAll"),
"PgUp/PgDn": gui.Tr.SLocalize("scroll"),
}
if gui.State.HasMergeConflicts {
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 8041d14ff..e48507724 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -38,7 +38,8 @@ func (gui *Gui) keybindings(g *gocui.Gui) error {
{ViewName: "files", Key: 'i', Modifier: gocui.ModNone, Handler: gui.handleIgnoreFile},
{ViewName: "files", Key: 'r', Modifier: gocui.ModNone, Handler: gui.handleRefreshFiles},
{ViewName: "files", Key: 'S', Modifier: gocui.ModNone, Handler: gui.handleStashSave},
- {ViewName: "files", Key: 'a', Modifier: gocui.ModNone, Handler: gui.handleAbortMerge},
+ {ViewName: "files", Key: 'A', Modifier: gocui.ModNone, Handler: gui.handleAbortMerge},
+ {ViewName: "files", Key: 'a', Modifier: gocui.ModNone, Handler: gui.handleStageAll},
{ViewName: "files", Key: 't', Modifier: gocui.ModNone, Handler: gui.handleAddPatch},
{ViewName: "files", Key: 'D', Modifier: gocui.ModNone, Handler: gui.handleResetHard},
{ViewName: "main", Key: gocui.KeyEsc, Modifier: gocui.ModNone, Handler: gui.handleEscapeMerge},
diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go
index 68e7c82bd..ff588b264 100644
--- a/pkg/i18n/dutch.go
+++ b/pkg/i18n/dutch.go
@@ -56,6 +56,9 @@ func addDutch(i18nObject *i18n.Bundle) error {
ID: "toggleStaged",
Other: "toggle staged",
}, &i18n.Message{
+ ID: "toggleStagedAll",
+ Other: "toggle staged alle",
+ }, &i18n.Message{
ID: "refresh",
Other: "verversen",
}, &i18n.Message{
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 38fbac4cb..9c20826ac 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -64,6 +64,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
ID: "toggleStaged",
Other: "toggle staged",
}, &i18n.Message{
+ ID: "toggleStagedAll",
+ Other: "stage/unstage all",
+ }, &i18n.Message{
ID: "refresh",
Other: "refresh",
}, &i18n.Message{
diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go
index 9b9fa19e1..4bbfb91d5 100644
--- a/pkg/i18n/polish.go
+++ b/pkg/i18n/polish.go
@@ -54,6 +54,9 @@ func addPolish(i18nObject *i18n.Bundle) error {
ID: "toggleStaged",
Other: "przełącz zatwierdzenie",
}, &i18n.Message{
+ ID: "toggleStagedAll",
+ Other: "przełącz zatwierdzenie wszystko",
+ }, &i18n.Message{
ID: "refresh",
Other: "odśwież",
}, &i18n.Message{