summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-07-18 19:41:13 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-07-18 20:00:48 +1000
commit845c80721f8f0445b0abe39ee381a6feecf158a2 (patch)
treea2cfbd2c2710db01c95e3354923f831959da42d2
parent0e65db10d85304c2ab8418e5219c267277a9c886 (diff)
Decouple escaping from quittingv0.20.10
When a user is not entering text into a prompt, the 'q' key should immediately quit the application. On the other hand, the 'esc' key should cancel/close/go-back to the previous context. If we're at the surface level (nothing to cancel/close) and the user hits the escape key, the default behaviour is to close the app, however we now have a `quitOnTopLevelReturn` config key to override this. I actually think from the beginning we should have made this config option default to false rather than true which is the default this PR gives it, but I don't want to anger too many people familiar with the existing behaviour.
-rw-r--r--docs/Config.md2
-rw-r--r--docs/keybindings/Keybindings_en.md7
-rw-r--r--docs/keybindings/Keybindings_nl.md7
-rw-r--r--docs/keybindings/Keybindings_pl.md7
-rw-r--r--pkg/config/app_config.go1
-rw-r--r--pkg/gui/keybindings.go8
-rw-r--r--pkg/gui/menu_panel.go2
-rw-r--r--pkg/gui/quitting.go8
-rw-r--r--pkg/gui/view_helpers.go3
-rw-r--r--pkg/i18n/english.go3
-rw-r--r--scripts/generate_cheatsheet.go2
11 files changed, 34 insertions, 16 deletions
diff --git a/docs/Config.md b/docs/Config.md
index cf6558746..c2c320f7c 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -50,6 +50,8 @@ Default path for the config file:
days: 14 # how often an update is checked for
reporting: 'undetermined' # one of: 'on' | 'off' | 'undetermined'
confirmOnQuit: false
+ # determines whether hitting 'esc' will quit the application when there is nothing to cancel/close
+ quitOnTopLevelReturn: true
keybinding:
universal:
quit: 'q'
diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md
index ed8416305..c4ea18d97 100644
--- a/docs/keybindings/Keybindings_en.md
+++ b/docs/keybindings/Keybindings_en.md
@@ -16,6 +16,8 @@
<kbd>+</kbd>: next screen mode (normal/half/fullscreen)
<kbd>_</kbd>: prev screen mode
<kbd>:</kbd>: execute custom command
+ <kbd>|</kbd>: view scoping options
+ <kbd>ctrl+e</kbd>: open diff menu
</pre>
## Branches Panel
@@ -40,6 +42,7 @@
<kbd>f</kbd>: fast-forward this branch from its upstream
<kbd>g</kbd>: view reset options
<kbd>R</kbd>: rename branch
+ <kbd>ctrl+o</kbd>: copy branch name to clipboard
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
@@ -53,6 +56,7 @@
<kbd>esc</kbd>: return to remotes list
<kbd>g</kbd>: view reset options
<kbd>space</kbd>: checkout
+ <kbd>n</kbd>: new branch
<kbd>M</kbd>: merge into currently checked out branch
<kbd>d</kbd>: delete branch
<kbd>r</kbd>: rebase checked-out branch onto this branch
@@ -134,11 +138,11 @@
<kbd>p</kbd>: pick commit (when mid-rebase)
<kbd>t</kbd>: revert commit
<kbd>c</kbd>: copy commit (cherry-pick)
+ <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>v</kbd>: paste commits (cherry-pick)
<kbd>enter</kbd>: view commit's files
<kbd>space</kbd>: checkout commit
- <kbd>i</kbd>: select commit to diff with another commit
<kbd>T</kbd>: tag commit
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection
<kbd>,</kbd>: previous page
@@ -246,7 +250,6 @@
<pre>
<kbd>esc</kbd>: close menu
- <kbd>q</kbd>: close menu
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md
index 9b26b0ce8..f3bd9b37d 100644
--- a/docs/keybindings/Keybindings_nl.md
+++ b/docs/keybindings/Keybindings_nl.md
@@ -16,6 +16,8 @@
<kbd>+</kbd>: next screen mode (normal/half/fullscreen)
<kbd>_</kbd>: prev screen mode
<kbd>:</kbd>: voor aangepast commando uit
+ <kbd>|</kbd>: view scoping options
+ <kbd>ctrl+e</kbd>: open diff menu
</pre>
## Branches Panel
@@ -40,6 +42,7 @@
<kbd>f</kbd>: fast-forward this branch from its upstream
<kbd>g</kbd>: bekijk reset opties
<kbd>R</kbd>: rename branch
+ <kbd>ctrl+o</kbd>: copy branch name to clipboard
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
@@ -53,6 +56,7 @@
<kbd>esc</kbd>: return to remotes list
<kbd>g</kbd>: bekijk reset opties
<kbd>space</kbd>: uitchecken
+ <kbd>n</kbd>: nieuwe branch
<kbd>M</kbd>: merge in met huidige checked out branch
<kbd>d</kbd>: verwijder branch
<kbd>r</kbd>: rebase branch
@@ -134,11 +138,11 @@
<kbd>p</kbd>: pick commit (when mid-rebase)
<kbd>t</kbd>: commit omgedaan maken
<kbd>c</kbd>: kopiëer commit (cherry-pick)
+ <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>C</kbd>: kopiëer commit reeks (cherry-pick)
<kbd>v</kbd>: plak commits (cherry-pick)
<kbd>enter</kbd>: bekijk gecommite bestanden
<kbd>space</kbd>: checkout commit
- <kbd>i</kbd>: select commit to diff with another commit
<kbd>T</kbd>: tag commit
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection
<kbd>,</kbd>: previous page
@@ -246,7 +250,6 @@
<pre>
<kbd>esc</kbd>: close menu
- <kbd>q</kbd>: close menu
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md
index 2fa2b8205..3ea71d5d0 100644
--- a/docs/keybindings/Keybindings_pl.md
+++ b/docs/keybindings/Keybindings_pl.md
@@ -16,6 +16,8 @@
<kbd>+</kbd>: next screen mode (normal/half/fullscreen)
<kbd>_</kbd>: prev screen mode
<kbd>:</kbd>: execute custom command
+ <kbd>|</kbd>: view scoping options
+ <kbd>ctrl+e</kbd>: open diff menu
</pre>
## Gałęzie Panel
@@ -40,6 +42,7 @@
<kbd>f</kbd>: fast-forward this branch from its upstream
<kbd>g</kbd>: view reset options
<kbd>R</kbd>: rename branch
+ <kbd>ctrl+o</kbd>: copy branch name to clipboard
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
@@ -53,6 +56,7 @@
<kbd>esc</kbd>: return to remotes list
<kbd>g</kbd>: view reset options
<kbd>space</kbd>: przełącz
+ <kbd>n</kbd>: nowa gałąź
<kbd>M</kbd>: scal do obecnej gałęzi
<kbd>d</kbd>: usuń gałąź
<kbd>r</kbd>: rebase branch
@@ -134,11 +138,11 @@
<kbd>p</kbd>: pick commit (when mid-rebase)
<kbd>t</kbd>: revert commit
<kbd>c</kbd>: copy commit (cherry-pick)
+ <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>v</kbd>: paste commits (cherry-pick)
<kbd>enter</kbd>: view commit's files
<kbd>space</kbd>: checkout commit
- <kbd>i</kbd>: select commit to diff with another commit
<kbd>T</kbd>: tag commit
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection
<kbd>,</kbd>: previous page
@@ -246,7 +250,6 @@
<pre>
<kbd>esc</kbd>: close menu
- <kbd>q</kbd>: close menu
<kbd>,</kbd>: previous page
<kbd>.</kbd>: next page
<kbd><</kbd>: scroll to top
diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go
index 0d1bad23d..a16fec67d 100644
--- a/pkg/config/app_config.go
+++ b/pkg/config/app_config.go
@@ -278,6 +278,7 @@ update:
reporting: 'undetermined' # one of: 'on' | 'off' | 'undetermined'
splashUpdatesIndex: 0
confirmOnQuit: false
+quitOnTopLevelReturn: true
keybinding:
universal:
quit: 'q'
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 8248e5e99..283daa779 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -217,7 +217,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
ViewName: "",
Key: gui.getKey("universal.return"),
Modifier: gocui.ModNone,
- Handler: gui.handleQuit,
+ Handler: gui.handleTopLevelReturn,
},
{
ViewName: "",
@@ -849,12 +849,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Description: gui.Tr.SLocalize("closeMenu"),
},
{
- ViewName: "menu",
- Key: gui.getKey("universal.quit"),
- Handler: gui.handleMenuClose,
- Description: gui.Tr.SLocalize("closeMenu"),
- },
- {
ViewName: "information",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go
index ac0844216..9b2eefac5 100644
--- a/pkg/gui/menu_panel.go
+++ b/pkg/gui/menu_panel.go
@@ -25,7 +25,7 @@ func (gui *Gui) handleMenuSelect(g *gocui.Gui, v *gocui.View) error {
func (gui *Gui) renderMenuOptions() error {
optionsMap := map[string]string{
- fmt.Sprintf("%s/%s", gui.getKeyDisplay("universal.return"), gui.getKeyDisplay("universal.quit")): gui.Tr.SLocalize("close"),
+ gui.getKeyDisplay("universal.return"): gui.Tr.SLocalize("close"),
fmt.Sprintf("%s %s", gui.getKeyDisplay("universal.prevItem"), gui.getKeyDisplay("universal.nextItem")): gui.Tr.SLocalize("navigate"),
gui.getKeyDisplay("universal.select"): gui.Tr.SLocalize("execute"),
}
diff --git a/pkg/gui/quitting.go b/pkg/gui/quitting.go
index f9ad00177..4a7bba23a 100644
--- a/pkg/gui/quitting.go
+++ b/pkg/gui/quitting.go
@@ -34,6 +34,14 @@ func (gui *Gui) handleQuit(g *gocui.Gui, v *gocui.View) error {
return gui.quit(v)
}
+func (gui *Gui) handleTopLevelReturn(g *gocui.Gui, v *gocui.View) error {
+ if gui.Config.GetUserConfig().GetBool("quitOnTopLevelReturn") {
+ return gui.handleQuit(g, v)
+ }
+
+ return nil
+}
+
func (gui *Gui) quit(v *gocui.View) error {
if gui.State.Updating {
return gui.createUpdateQuitConfirmation(gui.g, v)
diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go
index 429ab46b5..032d05002 100644
--- a/pkg/gui/view_helpers.go
+++ b/pkg/gui/view_helpers.go
@@ -513,7 +513,8 @@ func (gui *Gui) renderGlobalOptions() error {
return gui.renderOptionsMap(map[string]string{
fmt.Sprintf("%s/%s", gui.getKeyDisplay("universal.scrollUpMain"), gui.getKeyDisplay("universal.scrollDownMain")): gui.Tr.SLocalize("scroll"),
fmt.Sprintf("%s %s %s %s", gui.getKeyDisplay("universal.prevBlock"), gui.getKeyDisplay("universal.nextBlock"), gui.getKeyDisplay("universal.prevItem"), gui.getKeyDisplay("universal.nextItem")): gui.Tr.SLocalize("navigate"),
- fmt.Sprintf("%s/%s", gui.getKeyDisplay("universal.return"), gui.getKeyDisplay("universal.quit")): gui.Tr.SLocalize("close"),
+ gui.getKeyDisplay("universal.return"): gui.Tr.SLocalize("cancel"),
+ gui.getKeyDisplay("universal.quit"): gui.Tr.SLocalize("quit"),
gui.getKeyDisplay("universal.optionMenu"): gui.Tr.SLocalize("menu"),
"1-5": gui.Tr.SLocalize("jump"),
})
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 27b3fa46f..d26790033 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -250,6 +250,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
ID: "close",
Other: "close",
}, &i18n.Message{
+ ID: "quit",
+ Other: "quit",
+ }, &i18n.Message{
ID: "SureResetThisCommit",
Other: "Are you sure you want to reset to this commit?",
}, &i18n.Message{
diff --git a/scripts/generate_cheatsheet.go b/scripts/generate_cheatsheet.go
index 1cfa3aab6..e61a72dd2 100644
--- a/scripts/generate_cheatsheet.go
+++ b/scripts/generate_cheatsheet.go
@@ -31,7 +31,7 @@ func main() {
for _, lang := range langs {
os.Setenv("LC_ALL", lang)
- mApp, _ := app.NewApp(mConfig)
+ mApp, _ := app.NewApp(mConfig, "")
file, err := os.Create(getProjectRoot() + "/docs/keybindings/Keybindings_" + lang + ".md")
if err != nil {
panic(err)