Skip to content

Commit

Permalink
implement alternative window switching
Browse files Browse the repository at this point in the history
  • Loading branch information
itchyny committed May 27, 2018
1 parent 0f1db33 commit f4f4a52
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions editor/key.go
Expand Up @@ -88,6 +88,7 @@ func defaultKeyManagers() map[mode.Mode]*key.Manager {

km.Register(event.New, "c-w", "n")
km.Register(event.New, "c-w", "c-n")
km.Register(event.Alternative, "\x1e")
km.Register(event.FocusWindowDown, "c-w", "down")
km.Register(event.FocusWindowDown, "c-w", "c-j")
km.Register(event.FocusWindowDown, "c-w", "j")
Expand Down
1 change: 1 addition & 0 deletions event/event.go
Expand Up @@ -108,6 +108,7 @@ const (
Enew
New
Vnew
Alternative
Wincmd
FocusWindowUp
FocusWindowDown
Expand Down
14 changes: 14 additions & 0 deletions window/manager.go
Expand Up @@ -168,6 +168,9 @@ func (m *Manager) Emit(e event.Event) {
} else {
m.eventCh <- event.Event{Type: event.Redraw}
}
case event.Alternative:
m.alternative(e)
m.eventCh <- event.Event{Type: event.Redraw}
case event.Wincmd:
if len(e.Arg) == 0 {
m.eventCh <- event.Event{Type: event.Error, Error: fmt.Errorf("an argument is required for %s", e.CmdName)}
Expand Down Expand Up @@ -311,6 +314,17 @@ func (m *Manager) newWindow(e event.Event, vertical bool) error {
return nil
}

func (m *Manager) alternative(e event.Event) {
m.mu.Lock()
defer m.mu.Unlock()
if e.Count == 0 {
m.windowIndex, m.prevWindowIndex = m.prevWindowIndex, m.windowIndex
} else if 0 < e.Count && e.Count <= int64(len(m.windows)) {
m.windowIndex, m.prevWindowIndex = int(e.Count)-1, m.windowIndex
}
m.layout = m.layout.Replace(m.windowIndex)
}

func (m *Manager) wincmd(arg string) error {
switch arg {
case "n":
Expand Down

0 comments on commit f4f4a52

Please sign in to comment.