Skip to content
This repository was archived by the owner on Feb 3, 2023. It is now read-only.

Commit 2f97223

Browse files
committed
add adaptive color
1 parent cb46376 commit 2f97223

File tree

8 files changed

+50
-31
lines changed

8 files changed

+50
-31
lines changed

tui/confirm_view.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package tui
22

33
import (
4+
"github.com/charmbracelet/bubbles/key"
45
tea "github.com/charmbracelet/bubbletea"
56
"gohost/tui/form"
7+
"gohost/tui/keys"
68
"gohost/tui/styles"
79
)
810

@@ -41,6 +43,8 @@ func NewConfirmView(model *Model) *ConfirmView {
4143
}
4244

4345
func (v *ConfirmView) Init() tea.Cmd {
46+
v.model.setShortHelp(StateConfirmView, []key.Binding{keys.Up, keys.Down, keys.Enter, keys.Esc})
47+
v.model.setFullHelp(StateConfirmView, [][]key.Binding{{keys.Up, keys.Down, keys.Enter, keys.Esc}})
4448
return nil
4549
}
4650

tui/editor_view.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type EditorView struct {
2323
width, height int
2424
}
2525

26-
func NewTextView(model *Model) *EditorView {
26+
func NewEditorView(model *Model) *EditorView {
2727
hostEditor := textarea.New()
2828
hostEditor.ShowLineNumbers = true
2929
hostEditor.CharLimit = 0
@@ -41,7 +41,6 @@ func NewTextView(model *Model) *EditorView {
4141
}
4242

4343
func (v *EditorView) Init() tea.Cmd {
44-
km := v.hostEditor.KeyMap
4544
v.model.setShortHelp(StateEditorView, []key.Binding{
4645
keys.Up,
4746
keys.Down,
@@ -51,14 +50,14 @@ func (v *EditorView) Init() tea.Cmd {
5150
keys.Esc,
5251
})
5352
v.model.setFullHelp(StateEditorView, [][]key.Binding{
54-
{keys.Up, keys.Down, keys.Left, keys.Right, keys.Save},
55-
{km.CharacterForward, km.CharacterBackward}, // TODO add all key map from textarea.KeyMap
53+
{keys.Up, keys.Down, keys.Left, keys.Right, keys.Save, keys.Esc},
5654
})
5755
v.SetHostNode(svc.SysHostNode)
5856
return nil
5957
}
6058

6159
func (v *EditorView) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
60+
host := v.Host()
6261
var cmd tea.Cmd
6362
var cmds []tea.Cmd
6463
switch m := msg.(type) {
@@ -74,18 +73,22 @@ func (v *EditorView) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
7473
case key.Matches(m, keys.Esc):
7574
return v, nil
7675
case key.Matches(m, keys.Save):
77-
host := v.Host()
7876
if host.IsEditable() {
7977
host.SetContent([]byte(v.hostEditor.Value()))
8078
svc.UpdateNode(v.hostNode)
8179
v.SetSaved()
82-
} else {
83-
v.statusMsg = "Can not edit this"
8480
}
81+
case key.Matches(m, keys.Up, keys.Down):
82+
v.hostEditor, cmd = v.hostEditor.Update(msg)
83+
msg = nil
8584
}
8685
}
86+
if host.IsEditable() {
87+
v.hostEditor, cmd = v.hostEditor.Update(msg)
88+
} else {
89+
v.statusMsg = "Can not edit this file"
90+
}
8791
v.RefreshStatusLine()
88-
v.hostEditor, cmd = v.hostEditor.Update(msg)
8992
cmds = append(cmds, cmd)
9093
return v, tea.Batch(cmds...)
9194
}
@@ -124,6 +127,7 @@ func (v *EditorView) SetHostNode(hostNode *gohost.TreeNode) {
124127
v.hostEditor.Reset()
125128
v.hostEditor.SetValue(string(hostNode.Node.(gohost.Host).GetContent()))
126129
v.prevLen = v.hostEditor.Length()
130+
v.statusMsg = ""
127131
}
128132

129133
func (v *EditorView) RefreshStatusLine() {
@@ -146,3 +150,12 @@ func (v *EditorView) SetSaved() {
146150
v.prevLen = v.hostEditor.Length()
147151
v.saved = true
148152
}
153+
154+
func (v *EditorView) FullHelp() [][]key.Binding {
155+
keyMap := v.hostEditor.KeyMap
156+
return [][]key.Binding{
157+
{keyMap.CharacterBackward, keyMap.CharacterForward},
158+
{keyMap.DeleteAfterCursor, keyMap.DeleteBeforeCursor},
159+
{keyMap.DeleteCharacterBackward, keyMap.DeleteCharacterForward},
160+
}
161+
}

tui/help_view.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
type HelpView struct {
1010
model *Model
11-
helpView help.Model
11+
helpModel help.Model
1212
shortHelp map[State][]key.Binding
1313
fullHelp map[State][][]key.Binding
1414
enableDebug bool
@@ -17,7 +17,7 @@ type HelpView struct {
1717
func NewHelpView(model *Model) *HelpView {
1818
return &HelpView{
1919
model: model,
20-
helpView: help.New(),
20+
helpModel: help.New(),
2121
shortHelp: make(map[State][]key.Binding, 8),
2222
fullHelp: make(map[State][][]key.Binding, 8),
2323
enableDebug: true,
@@ -31,13 +31,13 @@ func (h *HelpView) Init() tea.Cmd {
3131
func (h *HelpView) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
3232
switch msg := msg.(type) {
3333
case tea.WindowSizeMsg:
34-
h.helpView.Width = msg.Width
34+
h.helpModel.Width = msg.Width
3535
}
3636
return h, nil
3737
}
3838

3939
func (h *HelpView) View() string {
40-
return h.helpView.View(h)
40+
return h.helpModel.View(h)
4141
}
4242

4343
func (h *HelpView) ShortHelp() []key.Binding {
@@ -49,7 +49,7 @@ func (h *HelpView) FullHelp() [][]key.Binding {
4949
}
5050

5151
func (h *HelpView) Width() int {
52-
return h.helpView.Width
52+
return h.helpModel.Width
5353
}
5454

5555
func (h *HelpView) SetShortHelp(state State, kb []key.Binding) {

tui/keys/keymap.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ var (
2929
)
3030
Esc = key.NewBinding(
3131
key.WithKeys("esc"),
32-
key.WithHelp("esc", "switch group or exit"),
32+
key.WithHelp("esc", "left/exit"),
3333
)
3434
Enter = key.NewBinding(
3535
key.WithKeys("enter"),
36-
key.WithHelp("enter", "select or confirm"),
36+
key.WithHelp("enter", "select/confirm"),
3737
)
3838
Switch = key.NewBinding(
3939
key.WithKeys("tab"),
40-
key.WithHelp("tab", "switch helpView"),
40+
key.WithHelp("tab", "switch next view"),
4141
)
4242
Save = key.NewBinding(
4343
key.WithKeys("ctrl+s"),
@@ -56,7 +56,3 @@ var (
5656
key.WithHelp("a", "apply"),
5757
)
5858
)
59-
60-
func Arrows() []key.Binding {
61-
return []key.Binding{Up, Down, Left, Right}
62-
}

tui/main_view.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func NewModel() (*Model, error) {
5858
model.helpView = NewHelpView(model)
5959
model.confirmView = NewConfirmView(model)
6060
model.treeView = NewTreeView(model)
61-
model.editorView = NewTextView(model)
61+
model.editorView = NewEditorView(model)
6262
model.nodeView = NewNodeView(model)
6363
return model, nil
6464
}
@@ -86,6 +86,7 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
8686
switch {
8787
case key.Matches(msg, keys.Switch):
8888
m.switchNextState()
89+
m.helpView.helpModel.ShowAll = false
8990
case key.Matches(msg, keys.ForceQuit):
9091
cmds = append(cmds, tea.Quit)
9192
case key.Matches(msg, keys.Esc):
@@ -97,10 +98,10 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
9798
case key.Matches(msg, keys.Help):
9899
if m.state != StateHelpView {
99100
m.switchState(StateHelpView)
100-
m.helpView.helpView.ShowAll = true
101+
m.helpView.helpModel.ShowAll = true
101102
} else {
102103
m.switchState(m.preState)
103-
m.helpView.helpView.ShowAll = false
104+
m.helpView.helpModel.ShowAll = false
104105
}
105106
default:
106107
switch m.state {

tui/node_view.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tui
22

33
import (
44
"fmt"
5+
"github.com/charmbracelet/bubbles/key"
56
"github.com/charmbracelet/bubbles/list"
67
tea "github.com/charmbracelet/bubbletea"
78
"gohost/gohost"
@@ -125,7 +126,8 @@ func NewNodeView(model *Model) *NodeView {
125126
}
126127

127128
func (v *NodeView) Init() tea.Cmd {
128-
v.model.setShortHelp(StateNodeView, keys.Arrows())
129+
v.model.setShortHelp(StateNodeView, []key.Binding{keys.Up, keys.Down, keys.Enter})
130+
v.model.setFullHelp(StateNodeView, [][]key.Binding{{keys.Up, keys.Down, keys.Enter}})
129131
return nil
130132
}
131133

tui/styles/default.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ var (
1010
PaddingLeft(padding).
1111
PaddingRight(padding).
1212
BorderStyle(lipgloss.NormalBorder()).
13-
BorderForeground(lipgloss.Color("243"))
13+
BorderForeground(lipgloss.AdaptiveColor{Light: "244", Dark: "244"})
1414
FocusedView = lipgloss.NewStyle().
1515
PaddingLeft(padding).
1616
PaddingRight(padding).
1717
BorderStyle(lipgloss.NormalBorder()).
18-
BorderForeground(lipgloss.Color("73"))
18+
BorderForeground(lipgloss.AdaptiveColor{Light: "28", Dark: "34"})
1919
UnfocusedFormItem = lipgloss.NewStyle()
20-
FocusedFormItem = lipgloss.NewStyle().Foreground(lipgloss.Color("73"))
20+
FocusedFormItem = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "28", Dark: "34"})
2121

2222
StatusLine = lipgloss.NewStyle()
2323
)

tui/tree_view.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (d *nodeItemDelegate) SetWidth(width int) {
103103
d.width = width
104104
}
105105

106-
// TreeView is tui helpView for nodes tree
106+
// TreeView is tui helpModel for nodes tree
107107
type TreeView struct {
108108
model *Model
109109
nodeList list.Model
@@ -112,7 +112,7 @@ type TreeView struct {
112112
}
113113

114114
func NewTreeView(model *Model) *TreeView {
115-
// Create nodes list helpView
115+
// Create nodes list helpModel
116116
nodes := svc.TreeNodesAsItem()
117117
delegate := newNodeItemDelegate()
118118
nodeList := list.New(nodes, delegate, 0, 0)
@@ -133,8 +133,11 @@ func NewTreeView(model *Model) *TreeView {
133133
}
134134

135135
func (v *TreeView) Init() tea.Cmd {
136-
v.model.setShortHelp(StateTreeView, []key.Binding{keys.Create, keys.Delete, keys.Apply, keys.Save, keys.ForceQuit})
137-
v.model.setFullHelp(StateTreeView, append(v.nodeList.FullHelp(), []key.Binding{keys.Create}))
136+
v.model.setShortHelp(StateTreeView, []key.Binding{keys.Create, keys.Delete, keys.Apply, keys.Save, keys.ForceQuit, keys.Help})
137+
v.model.setFullHelp(StateTreeView,
138+
append(v.nodeList.FullHelp(),
139+
[]key.Binding{keys.Create, keys.Delete, keys.Apply, keys.Save, keys.ForceQuit, keys.Help}),
140+
)
138141
return nil
139142
}
140143

0 commit comments

Comments
 (0)