// TODO: fix \x00 issues func tabUpdateInput(input *gocui.View) (string, bool) { // logger.Logger.Println(spew.Sdump(input.Buffer())) search := strings.TrimSpace(input.ViewBuffer()) searchSplit := strings.Split(search, " ") search = searchSplit[len(searchSplit)-1] if inCacheTab { cacheTabIndex++ if cacheTabIndex > len(cacheTabResults)-1 { cacheTabIndex = 0 } searchSplit[len(searchSplit)-1] = cacheTabResults[cacheTabIndex] newInputData := strings.Join(searchSplit, " ") input.Clear() if !strings.HasPrefix(newInputData, "/") && !strings.HasPrefix(newInputData, "#") { newInputData = newInputData + ":" } fmt.Fprint(input, newInputData+" ") input.SetCursor(len(input.Buffer())-1, 0) // logger.Logger.Println(spew.Sdump(newInputData + "")) // logger.Logger.Printf("WORD %s -- %s -- %s\n", search, cacheTabSearch, cacheTabResults[cacheTabIndex]) return "", true } return search, false }
func Handle( stdHandler *std.StdHandler, travianHandler *travian.TravianHandler, trav *travian.Game, ui *console.GUI, v *gocui.View) error { command := strings.Trim(v.Buffer(), "\n\r ") parsedCmd, _ := shellwords.Parse(command) if len(command) == 0 { return nil } if exists := stdHandler.Handle(parsedCmd, ui); exists { } else if exists := travianHandler.Handle(parsedCmd, trav, ui); exists { } else { ui.Println("Command not found") } v.Clear() // clears input view's input buffer return nil }
func (runner *appRunner) confirmStringDetail(gui *gocui.Gui, view *gocui.View) error { text := strings.TrimSpace(view.Buffer()) runner.activeStringDetailController.Confirm(text) runner.restoreMainView() runner.gui.DeleteView(view.Name()) return nil }
func FocusInputView(g *gocui.Gui, v *gocui.View) error { v.SetCursor(len(v.Buffer()+"")-1, 0) if _, err := g.SetCurrentView("input"); err != nil { return err } return nil }
func saveProj(g *gocui.Gui, v *gocui.View) error { if l := strings.TrimSpace(v.Buffer()); l != "" { init_t, _ := time.ParseDuration("0s") init_d, _ := time.ParseDuration("0s") projects[l] = Project{time.Now(), &init_d, &init_t} } g.ShowCursor = false delView(g, "save_proj") delView(g, "list") g.Flush() setView(g, "list") updateProjInfo(g, v) return nil }
// TODO(strip newlines only at cursor position) func inputEnter(g *gocui.Gui, v *gocui.View, getChannelIdChan chan<- ChannelIdRequest, sendMsgChan chan<- PutRtmMsg) error { text := strings.Replace(strings.TrimRight(v.Buffer(), " \n\t"), "\n", "", -1) log.Println("Entered Text: X" + text + "X") channelName, err := getSelectedChannelName(g) if err != nil { return err } channelId := GetChannelId(channelName, getChannelIdChan) sendMsgChan <- PutRtmMsg{channelId, text} v.Clear() v.SetCursor(0, 0) v.SetOrigin(0, 0) return nil }
func (gc *GuiClient) readLine(_ *gocui.Gui, v *gocui.View) error { // HACK: pressing enter on startup causes panic if len(v.Buffer()) == 0 { return nil } _, cy := v.Cursor() line, err := v.Line(cy - 1) if err != nil { return err } if line == "" { return nil } v.Clear() return gc.handleLine(line) }
func quit(g *gocui.Gui, v *gocui.View) error { vbuf = v.ViewBuffer() buf = v.Buffer() return gocui.ErrQuit }
func GetLine(g *gocui.Gui, v *gocui.View) error { // _, cy := v.Cursor() // if line, err = v.Line(0); err != nil { // line = "" // } line := v.Buffer() // logger.Logger.Printf("LINE %s\n", line) if len(line) <= 0 { // return errors.New("input line empty") v.Clear() v.SetCursor(0, 0) return nil } line = strings.Replace(line, "\x00", "", -1) line = strings.Replace(line, "\n", "", -1) InputHistory.Add(line) if strings.HasPrefix(line, "//") || !strings.HasPrefix(line, "/") { if len(Server.CurrentChannel) > 0 { Server.Exec(Server.CurrentChannel, func(g *gocui.Gui, v *gocui.View, s *client.Server) error { if Server.Client.Connected() { // logger.Logger.Println("SEND:::", spew.Sdump(line)) go Server.Client.Privmsg(Server.CurrentChannel, line) } return nil }) if mainView, err := g.View(Server.CurrentChannel); err != nil { return err } else { if mainView.Name() != client.StatusChannel { c := Server.FindChannel(Server.CurrentChannel) timestamp := time.Now().Format("03:04") fmt.Fprintf(mainView, "[%s] -> %s: %s\n", ui.ColorString(ui.TimestampColor, timestamp), myNickColor(c.FindUser(Server.Client.Me().Nick).String(false)), myTextColor(line)) } } } // send text } else { split := strings.Split(strings.Replace(line[1:], "\x00", "", -1), " ") // logger.Logger.Println("IN COMMAND!!!", line, spew.Sdump(split)) // mainView, _ := g.View(client.StatusChannel) // fmt.Fprintln(mainView, "$ COMMAND = ", split[0], len(split)) // TODO: what was this? if len(split) <= 1 { if split[0] == "p" || split[0] == "part" { command.Run(split[0], []string{"", Server.CurrentChannel}) v.Clear() v.SetCursor(0, 0) return nil } } if err := command.Run(split[0], split); err != nil { client.StatusMessage(v, err.Error()) } } // idleInputText := fmt.Sprintf("[%s] ", client.StatusChannel) // if len(command.CurrentChannel) > 0 { // idleInputText = fmt.Sprintf("[%s] ", command.CurrentChannel) // } // fmt.Fprint(v, idleInputText) // v.SetCursor(len(idleInputText), 0) v.Clear() v.SetCursor(0, 0) inCacheTab = false cacheTabSearch = "" cacheTabResults = []string{} FocusAndResetAll(g, v) return nil }
func simpleEditor(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) { var tab = false var inHistroy = false switch { case key == gocui.KeyTab: tab = true case ch != 0 && mod == 0: v.EditWrite(ch) case key == gocui.KeySpace: v.EditWrite(' ') case key == gocui.KeyBackspace || key == gocui.KeyBackspace2: v.EditDelete(true) case key == gocui.KeyDelete: v.EditDelete(false) case key == gocui.KeyInsert: v.Overwrite = !v.Overwrite case key == gocui.KeyEnter: if line := v.ViewBuffer(); len(line) > 0 { GetLine(Server.Gui, v) } // v.EditNewLine() // v.Rewind() case key == gocui.KeyArrowDown: inHistroy = true if line := InputHistory.Next(); len(line) > 0 { v.Clear() fmt.Fprint(v, line) v.SetCursor(len(v.Buffer()), 0) } case key == gocui.KeyArrowUp: inHistroy = true if line := InputHistory.Prev(); len(line) > 0 { v.Clear() fmt.Fprint(v, line) v.SetCursor(len(v.Buffer()), 0) } case key == gocui.KeyArrowLeft: v.MoveCursor(-1, 0, false) case key == gocui.KeyArrowRight: cx, _ := v.Cursor() line := v.ViewBuffer() logger.Logger.Println(len(line), cx) logger.Logger.Println(spew.Sdump(line)) // if cx == 0 { // v.MoveCursor(-1, 0, false) if cx < len(line)-1 { v.MoveCursor(1, 0, false) } case key == gocui.KeyCtrlA: v.SetCursor(0, 0) case key == gocui.KeyCtrlK: v.Clear() v.SetCursor(0, 0) case key == gocui.KeyCtrlE: v.SetCursor(len(v.Buffer())-1, 0) case key == gocui.KeyCtrlLsqBracket: // logger.Logger.Println("word...") } if !inHistroy { // InputHistory.Current() } if !tab { // logger.Logger.Print("CALL\n") inCacheTab = false cacheTabSearch = "" cacheTabResults = []string{} } }