Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.89 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "net"
  7.  
  8.     "../utils"
  9.     "github.com/gizak/termui"
  10. )
  11.  
  12. func main() {
  13.  
  14.     // connect to this socket
  15.     conn, _ := net.Dial("tcp", "localhost:8000")
  16.     messages := &utils.MsgList{nil, nil, 0}
  17.     text := ""
  18.     err := termui.Init()
  19.     if err != nil {
  20.         panic(err)
  21.     }
  22.     defer termui.Close()
  23.     par0 := termui.NewPar(">")
  24.     par0.Height = 1
  25.     par0.Border = false
  26.  
  27.     ls := termui.NewList()
  28.     ls.Items = messages.MessageArr()
  29.     ls.Overflow = "wrap"
  30.     ls.ItemFgColor = termui.ColorYellow
  31.     ls.Height = 22
  32.  
  33.     termui.Body.AddRows(
  34.         termui.NewRow(termui.NewCol(12, 0, ls)),
  35.         termui.NewRow(termui.NewCol(12, 0, par0)))
  36.     termui.Body.Align()
  37.     termui.Render(termui.Body)
  38.     termui.Handle("/sys/kbd", func(e termui.Event) {
  39.         text += e.Data.(termui.EvtKbd).KeyStr
  40.         par0.Text = ">" + text
  41.         termui.Render(termui.Body)
  42.     })
  43.  
  44.     termui.Handle("/sys/kbd/<enter>", func(e termui.Event) {
  45.         fmt.Fprintf(conn, text+"\n")
  46.         text = ""
  47.         par0.Text = ">" + text
  48.         termui.Render(termui.Body)
  49.     })
  50.  
  51.     termui.Handle("/sys/kbd/<backspace>", func(e termui.Event) {
  52.         sz := len(text)
  53.  
  54.         if sz > 0 {
  55.             text = text[:sz-1]
  56.             par0.Text = ">" + text
  57.             termui.Render(termui.Body)
  58.         }
  59.     })
  60.  
  61.     termui.Handle("/sys/kbd/<space>", func(e termui.Event) {
  62.         text += " "
  63.         par0.Text = ">" + text
  64.         termui.Render(termui.Body)
  65.     })
  66.  
  67.     termui.Handle("/sys/kbd/C-c", func(termui.Event) {
  68.         termui.StopLoop()
  69.     })
  70.  
  71.     termui.Handle("/sys/wnd/resize", func(e termui.Event) {
  72.         termui.Body.Width = termui.TermWidth()
  73.         termui.Body.Align()
  74.         termui.Clear()
  75.         termui.Render(termui.Body)
  76.     })
  77.  
  78.     go func() {
  79.         for {
  80.             // listen for reply
  81.             message, _ := bufio.NewReader(conn).ReadString('\n')
  82.             size := len(message)
  83.             messages.Append(message[:size-1])
  84.             if messages.Size > 20 {
  85.                 messages.DeleteHead()
  86.             }
  87.             ls.Items = messages.MessageArr()
  88.             termui.Render(termui.Body)
  89.         }
  90.     }()
  91.     termui.Loop()
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement