Files
mail/keymap.go
titor c9b77feabe feat: 收件箱功能新增按回车查看详情面板
- 添加邮件详情面板显示(主题、发件人、收件人、抄送、账户、时间、正文)
- 优化邮件列表卡片样式,增加选中高亮效果
- 窗口宽度 >= 80 时启用双面板布局,左侧列表右侧详情
- 简化依赖包,从 charm.land 使用统一导入路径
- 删除未使用的 golangci/goreleaser 配置文件
2026-04-10 04:41:22 +08:00

91 lines
2.5 KiB
Go

package main
import "charm.land/bubbles/v2/key"
// KeyMap represents the key bindings for the application.
type KeyMap struct {
NextInput key.Binding
PrevInput key.Binding
Send key.Binding
Attach key.Binding
Unattach key.Binding
Back key.Binding
Quit key.Binding
}
// DefaultKeybinds returns the default key bindings for the application.
func DefaultKeybinds() KeyMap {
return KeyMap{
NextInput: key.NewBinding(
key.WithKeys("tab"),
key.WithHelp("tab", "next"),
),
PrevInput: key.NewBinding(
key.WithKeys("shift+tab"),
),
Send: key.NewBinding(
key.WithKeys("ctrl+d", "enter"),
key.WithHelp("enter", "send"),
key.WithDisabled(),
),
Attach: key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "attach file"),
key.WithDisabled(),
),
Unattach: key.NewBinding(
key.WithKeys("x"),
key.WithHelp("x", "remove"),
key.WithDisabled(),
),
Back: key.NewBinding(
key.WithKeys("esc"),
key.WithHelp("esc", "back"),
key.WithDisabled(),
),
Quit: key.NewBinding(
key.WithKeys("ctrl+c"),
key.WithHelp("ctrl+c", "quit"),
),
}
}
// ShortHelp returns the key bindings for the short help screen.
func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{
k.NextInput,
k.Quit,
k.Attach,
k.Unattach,
k.Send,
}
}
// FullHelp returns the key bindings for the full help screen.
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{
{k.NextInput, k.Send, k.Attach, k.Unattach, k.Quit},
}
}
func (m *Model) updateKeymap() {
m.keymap.Attach.SetEnabled(m.state == editingAttachments)
m.keymap.Send.SetEnabled(m.canSend() && m.state == hoveringSendButton)
m.keymap.Unattach.SetEnabled(m.state == editingAttachments && len(m.Attachments.Items()) > 0)
m.keymap.Back.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.Up.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.Down.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.Back.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.Select.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.Open.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.PageUp.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.PageDown.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.GoToTop.SetEnabled(m.state == pickingFile)
m.filepicker.KeyMap.GoToLast.SetEnabled(m.state == pickingFile)
}
func (m Model) canSend() bool {
return m.From.Value() != "" && m.To.Value() != "" && m.Subject.Value() != "" && m.Body.Value() != ""
}