Skip to content

Commit

Permalink
Trigger focus actions synchronously
Browse files Browse the repository at this point in the history
  • Loading branch information
junegunn committed Dec 31, 2023
1 parent 5da606a commit 863a125
Showing 1 changed file with 23 additions and 8 deletions.
31 changes: 23 additions & 8 deletions src/terminal.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ type Terminal struct {
executing *util.AtomicBool
termSize tui.TermSize
lastAction actionType
lastFocus int32
}

type selectedItem struct {
Expand Down Expand Up @@ -751,7 +752,8 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
tui: renderer,
initFunc: func() { renderer.Init() },
executing: util.NewAtomicBool(false),
lastAction: actStart}
lastAction: actStart,
lastFocus: minItem.Index()}
t.prompt, t.promptLen = t.parsePrompt(opts.Prompt)
t.pointer, t.pointerLen = t.processTabs([]rune(opts.Pointer), 0)
t.marker, t.markerLen = t.processTabs([]rune(opts.Marker), 0)
Expand Down Expand Up @@ -2762,6 +2764,13 @@ func (t *Terminal) pwindowSize() tui.TermSize {
return size
}

func (t *Terminal) currentIndex() int32 {
if currentItem := t.currentItem(); currentItem != nil {
return currentItem.Index()
}
return minItem.Index()
}

// Loop is called to start Terminal I/O
func (t *Terminal) Loop() {
// prof := profile.Start(profile.ProfilePath("/tmp/"))
Expand Down Expand Up @@ -3046,17 +3055,14 @@ func (t *Terminal) Loop() {
t.printInfo()
case reqList:
t.printList()
var currentIndex int32 = minItem.Index()
currentItem := t.currentItem()
if currentItem != nil {
currentIndex = currentItem.Index()
}
currentIndex := t.currentIndex()
focusChanged := focusedIndex != currentIndex
if focusChanged && t.track == trackCurrent {
t.track = trackDisabled
t.printInfo()
}
if onFocus, prs := t.keymap[tui.Focus.AsEvent()]; prs && focusChanged {
if onFocus, prs := t.keymap[tui.Focus.AsEvent()]; prs && focusChanged && currentIndex != t.lastFocus {
t.lastFocus = focusedIndex
t.serverInputChan <- onFocus
}
if focusChanged || version != t.version {
Expand Down Expand Up @@ -3246,12 +3252,21 @@ func (t *Terminal) Loop() {
}

var doAction func(*action) bool
doActions := func(actions []*action) bool {
var doActions func(actions []*action) bool
doActions = func(actions []*action) bool {
currentIndex := t.currentIndex()
for _, action := range actions {
if !doAction(action) {
return false
}
}

if onFocus, prs := t.keymap[tui.Focus.AsEvent()]; prs {
if newIndex := t.currentIndex(); newIndex != currentIndex {
t.lastFocus = newIndex
return doActions(onFocus)
}
}
return true
}
doAction = func(a *action) bool {
Expand Down

0 comments on commit 863a125

Please sign in to comment.