При помощи библиотеки
https://github.com/gizak/termui пытаюсь реализовать системную меню с переключателями, функция что отрисовывает при переключение работает, но для того чтобы переключиться необходимо нажать клавишу два раза, вопрос в том, как передать управление из одной функции в другую посредством канала, так как я понимаю при первом нажатие я выхожу из функции и только при втором нажатие обработка происходит переключение.
func (self *consoleUserInterface)ListenAndServer() {
ticker := time.NewTicker(time.Second)
DrawInfo(self)
termui.Render(self.TabPane, self.info)
events := termui.PollEvents()
for {
select {
case e := <-events:
switch e.ID {
case "q", "<C-c>":
termui.Close()
return
case "d":
ticker.Stop()
self.TabPane.FocusRight()
termui.Clear()
termui.Render(self.TabPane)
self.RenderTab()
case "a":
ticker.Stop()
self.TabPane.FocusLeft()
termui.Clear()
termui.Render(self.TabPane)
self.RenderTab()
}
case <-ticker.C:
DrawInfo(self)
}
}
}
func (self *consoleUserInterface)RenderTab(){
ticker := time.NewTicker(time.Second)
var done = make(chan bool,1)
loop:switch self.TabPane.ActiveTabIndex {
case 0:
go func() {os.Stdin.Read(make([]byte, 1)); done <- true}()
for range ticker.C{
if len(done) > 0{
<-done
break loop
}
DrawInfo(self)
}
case 1:
termui.Render()
}
return
}