Add distinct keybindings for each compose view
This commit is contained in:
parent
928ac1bcd9
commit
f77d7c2c3d
6 changed files with 51 additions and 14 deletions
|
@ -17,7 +17,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
register("send-message", SendMessage)
|
register("send", SendMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SendMessage(aerc *widgets.Aerc, args []string) error {
|
func SendMessage(aerc *widgets.Aerc, args []string) error {
|
|
@ -283,7 +283,7 @@ func init() {
|
||||||
keyNames["ACK"] = KeyStroke{tcell.KeyACK, 0}
|
keyNames["ACK"] = KeyStroke{tcell.KeyACK, 0}
|
||||||
keyNames["BEL"] = KeyStroke{tcell.KeyBEL, 0}
|
keyNames["BEL"] = KeyStroke{tcell.KeyBEL, 0}
|
||||||
keyNames["BS"] = KeyStroke{tcell.KeyBS, 0}
|
keyNames["BS"] = KeyStroke{tcell.KeyBS, 0}
|
||||||
keyNames["TAB"] = KeyStroke{tcell.KeyTAB, 0}
|
keyNames["tab"] = KeyStroke{tcell.KeyTAB, 0}
|
||||||
keyNames["LF"] = KeyStroke{tcell.KeyLF, 0}
|
keyNames["LF"] = KeyStroke{tcell.KeyLF, 0}
|
||||||
keyNames["VT"] = KeyStroke{tcell.KeyVT, 0}
|
keyNames["VT"] = KeyStroke{tcell.KeyVT, 0}
|
||||||
keyNames["FF"] = KeyStroke{tcell.KeyFF, 0}
|
keyNames["FF"] = KeyStroke{tcell.KeyFF, 0}
|
||||||
|
|
|
@ -40,6 +40,14 @@ a = :reply -a<Enter>
|
||||||
f = :forward<Enter>
|
f = :forward<Enter>
|
||||||
|
|
||||||
[compose]
|
[compose]
|
||||||
|
# Keybindings used when the embedded terminal is not selected in the compose
|
||||||
|
# view
|
||||||
|
<C-k> = :prev-field<Enter>
|
||||||
|
<C-j> = :next-field<Enter>
|
||||||
|
<tab> = :next-field<Enter>
|
||||||
|
|
||||||
|
[compose::editor]
|
||||||
|
# Keybindings used when the embedded terminal is selected in the compose view
|
||||||
$noinherit = true
|
$noinherit = true
|
||||||
$ex = <semicolon>
|
$ex = <semicolon>
|
||||||
<C-k> = :prev-field<Enter>
|
<C-k> = :prev-field<Enter>
|
||||||
|
@ -47,6 +55,11 @@ $ex = <semicolon>
|
||||||
<C-p> = :prev-tab<Enter>
|
<C-p> = :prev-tab<Enter>
|
||||||
<C-n> = :next-tab<Enter>
|
<C-n> = :next-tab<Enter>
|
||||||
|
|
||||||
|
[compose::review]
|
||||||
|
# Keybindings used when reviewing a message to be sent
|
||||||
|
y = :send<Enter>
|
||||||
|
n = :abort<Enter>
|
||||||
|
|
||||||
[terminal]
|
[terminal]
|
||||||
$noinherit = true
|
$noinherit = true
|
||||||
$ex = <semicolon>
|
$ex = <semicolon>
|
||||||
|
|
|
@ -39,11 +39,13 @@ type AccountConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type BindingConfig struct {
|
type BindingConfig struct {
|
||||||
Global *KeyBindings
|
Global *KeyBindings
|
||||||
Compose *KeyBindings
|
Compose *KeyBindings
|
||||||
MessageList *KeyBindings
|
ComposeEditor *KeyBindings
|
||||||
MessageView *KeyBindings
|
ComposeReview *KeyBindings
|
||||||
Terminal *KeyBindings
|
MessageList *KeyBindings
|
||||||
|
MessageView *KeyBindings
|
||||||
|
Terminal *KeyBindings
|
||||||
}
|
}
|
||||||
|
|
||||||
type FilterConfig struct {
|
type FilterConfig struct {
|
||||||
|
@ -139,11 +141,13 @@ func LoadConfig(root *string) (*AercConfig, error) {
|
||||||
file.NameMapper = mapName
|
file.NameMapper = mapName
|
||||||
config := &AercConfig{
|
config := &AercConfig{
|
||||||
Bindings: BindingConfig{
|
Bindings: BindingConfig{
|
||||||
Global: NewKeyBindings(),
|
Global: NewKeyBindings(),
|
||||||
Compose: NewKeyBindings(),
|
Compose: NewKeyBindings(),
|
||||||
MessageList: NewKeyBindings(),
|
ComposeEditor: NewKeyBindings(),
|
||||||
MessageView: NewKeyBindings(),
|
ComposeReview: NewKeyBindings(),
|
||||||
Terminal: NewKeyBindings(),
|
MessageList: NewKeyBindings(),
|
||||||
|
MessageView: NewKeyBindings(),
|
||||||
|
Terminal: NewKeyBindings(),
|
||||||
},
|
},
|
||||||
Ini: file,
|
Ini: file,
|
||||||
|
|
||||||
|
@ -223,6 +227,9 @@ func LoadConfig(root *string) (*AercConfig, error) {
|
||||||
"messages": &config.Bindings.MessageList,
|
"messages": &config.Bindings.MessageList,
|
||||||
"terminal": &config.Bindings.Terminal,
|
"terminal": &config.Bindings.Terminal,
|
||||||
"view": &config.Bindings.MessageView,
|
"view": &config.Bindings.MessageView,
|
||||||
|
|
||||||
|
"compose::editor": &config.Bindings.ComposeEditor,
|
||||||
|
"compose::review": &config.Bindings.ComposeReview,
|
||||||
}
|
}
|
||||||
for _, name := range binds.SectionStrings() {
|
for _, name := range binds.SectionStrings() {
|
||||||
sec, err := binds.GetSection(name)
|
sec, err := binds.GetSection(name)
|
||||||
|
|
|
@ -88,11 +88,18 @@ func (aerc *Aerc) Draw(ctx *libui.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (aerc *Aerc) getBindings() *config.KeyBindings {
|
func (aerc *Aerc) getBindings() *config.KeyBindings {
|
||||||
switch aerc.SelectedTab().(type) {
|
switch view := aerc.SelectedTab().(type) {
|
||||||
case *AccountView:
|
case *AccountView:
|
||||||
return aerc.conf.Bindings.MessageList
|
return aerc.conf.Bindings.MessageList
|
||||||
case *Composer:
|
case *Composer:
|
||||||
return aerc.conf.Bindings.Compose
|
switch view.Bindings() {
|
||||||
|
case "compose::editor":
|
||||||
|
return aerc.conf.Bindings.ComposeEditor
|
||||||
|
case "compose::review":
|
||||||
|
return aerc.conf.Bindings.ComposeReview
|
||||||
|
default:
|
||||||
|
return aerc.conf.Bindings.Compose
|
||||||
|
}
|
||||||
case *MessageViewer:
|
case *MessageViewer:
|
||||||
return aerc.conf.Bindings.MessageView
|
return aerc.conf.Bindings.MessageView
|
||||||
case *Terminal:
|
case *Terminal:
|
||||||
|
|
|
@ -120,6 +120,16 @@ func (c *Composer) Close() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Composer) Bindings() string {
|
||||||
|
if c.editor == nil {
|
||||||
|
return "compose::review"
|
||||||
|
} else if c.editor == c.focusable[c.focused] {
|
||||||
|
return "compose::editor"
|
||||||
|
} else {
|
||||||
|
return "compose"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Composer) Event(event tcell.Event) bool {
|
func (c *Composer) Event(event tcell.Event) bool {
|
||||||
return c.focusable[c.focused].Event(event)
|
return c.focusable[c.focused].Event(event)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue