diff options
| -rw-r--r-- | aerc.go | 3 | ||||
| -rw-r--r-- | commands/compose/compose.go | 16 | ||||
| -rw-r--r-- | commands/compose/next-field.go | 30 | ||||
| -rw-r--r-- | lib/ui/textinput.go | 6 | ||||
| -rw-r--r-- | widgets/compose.go | 17 | ||||
| -rw-r--r-- | widgets/terminal.go | 3 | 
6 files changed, 70 insertions, 5 deletions
@@ -12,6 +12,7 @@ import (  	"git.sr.ht/~sircmpwn/aerc2/config"  	"git.sr.ht/~sircmpwn/aerc2/commands"  	"git.sr.ht/~sircmpwn/aerc2/commands/account" +	"git.sr.ht/~sircmpwn/aerc2/commands/compose"  	"git.sr.ht/~sircmpwn/aerc2/commands/msgview"  	"git.sr.ht/~sircmpwn/aerc2/commands/terminal"  	libui "git.sr.ht/~sircmpwn/aerc2/lib/ui" @@ -27,7 +28,7 @@ func getCommands(selected libui.Drawable) []*commands.Commands {  		}  	case *widgets.Composer:  		return []*commands.Commands{ -			// TODO: compose-specific commands +			compose.ComposeCommands,  			commands.GlobalCommands,  		}  	case *widgets.MessageViewer: diff --git a/commands/compose/compose.go b/commands/compose/compose.go new file mode 100644 index 0000000..ea53316 --- /dev/null +++ b/commands/compose/compose.go @@ -0,0 +1,16 @@ +package compose + +import ( +	"git.sr.ht/~sircmpwn/aerc2/commands" +) + +var ( +	ComposeCommands *commands.Commands +) + +func register(name string, cmd commands.AercCommand) { +	if ComposeCommands == nil { +		ComposeCommands = commands.NewCommands() +	} +	ComposeCommands.Register(name, cmd) +} diff --git a/commands/compose/next-field.go b/commands/compose/next-field.go new file mode 100644 index 0000000..2c3b414 --- /dev/null +++ b/commands/compose/next-field.go @@ -0,0 +1,30 @@ +package compose + +import ( +	"errors" +	"fmt" + +	"git.sr.ht/~sircmpwn/aerc2/widgets" +) + +func init() { +	register("next-field", NextPrevField) +	register("prev-field", NextPrevField) +} + +func nextPrevFieldUsage(cmd string) error { +	return errors.New(fmt.Sprintf("Usage: %s", cmd)) +} + +func NextPrevField(aerc *widgets.Aerc, args []string) error { +	if len(args) > 2 { +		return nextPrevFieldUsage(args[0]) +	} +	composer, _ := aerc.SelectedTab().(*widgets.Composer) +	if args[0] == "prev-field" { +		composer.PrevField() +	} else { +		composer.NextField() +	} +	return nil +} diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go index 3e1f68a..688d91d 100644 --- a/lib/ui/textinput.go +++ b/lib/ui/textinput.go @@ -47,9 +47,9 @@ func (ti *TextInput) Draw(ctx *Context) {  	ti.ctx = ctx // gross  	ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault)  	ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(ti.text)) -	cells := runewidth.StringWidth(string(ti.text[:ti.index])) -	if cells != ti.cells { -		ctx.SetCursor(cells+1, 0) +	cells := runewidth.StringWidth(string(ti.text[:ti.index]) + ti.prompt) +	if cells != ti.cells && ti.focus { +		ctx.SetCursor(cells, 0)  	}  } diff --git a/widgets/compose.go b/widgets/compose.go index 10d14f7..f07e3ee 100644 --- a/widgets/compose.go +++ b/widgets/compose.go @@ -67,7 +67,7 @@ func NewComposer() *Composer {  		grid:   grid,  		editor: term,  		// You have to backtab to get to "From", since you usually don't edit it -		focused: 3, +		focused: 1,  		focusable: []ui.DrawableInteractive{  			from,  			to, @@ -99,6 +99,21 @@ func (c *Composer) Focus(focus bool) {  	c.focusable[c.focused].Focus(focus)  } +func (c *Composer) PrevField() { +	c.focusable[c.focused].Focus(false) +	c.focused-- +	if c.focused == -1 { +		c.focused = len(c.focusable) - 1 +	} +	c.focusable[c.focused].Focus(true) +} + +func (c *Composer) NextField() { +	c.focusable[c.focused].Focus(false) +	c.focused = (c.focused + 1) % len(c.focusable) +	c.focusable[c.focused].Focus(true) +} +  func newHeaderEditor(name string, value string) *headerEditor {  	return &headerEditor{  		input: ui.NewTextInput(value), diff --git a/widgets/terminal.go b/widgets/terminal.go index 92736d5..ee99b60 100644 --- a/widgets/terminal.go +++ b/widgets/terminal.go @@ -273,6 +273,8 @@ func (term *Terminal) Draw(ctx *ui.Context) {  		if ctx.Width() != cols || ctx.Height() != rows {  			pty.Setsize(term.pty, &winsize)  			term.vterm.SetSize(ctx.Height(), ctx.Width()) +			rect := vterm.NewRect(0, ctx.Width(), 0, ctx.Height()) +			term.damage = append(term.damage, *rect)  			return  		}  	} @@ -333,6 +335,7 @@ func (term *Terminal) Focus(focus bool) {  			state := term.vterm.ObtainState()  			row, col := state.GetCursorPos()  			term.ctx.SetCursor(col, row) +			term.Invalidate()  		}  	}  }  | 
