188 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // termbox is a library for creating cross-platform text-based interfaces
 | |
| package termbox
 | |
| 
 | |
| // public API, common OS agnostic part
 | |
| 
 | |
| type (
 | |
| 	InputMode  int
 | |
| 	OutputMode int
 | |
| 	EventType  uint8
 | |
| 	Modifier   uint8
 | |
| 	Key        uint16
 | |
| 	Attribute  uint16
 | |
| )
 | |
| 
 | |
| // This type represents a termbox event. The 'Mod', 'Key' and 'Ch' fields are
 | |
| // valid if 'Type' is EventKey. The 'Width' and 'Height' fields are valid if
 | |
| // 'Type' is EventResize. The 'Err' field is valid if 'Type' is EventError.
 | |
| type Event struct {
 | |
| 	Type   EventType // one of Event* constants
 | |
| 	Mod    Modifier  // one of Mod* constants or 0
 | |
| 	Key    Key       // one of Key* constants, invalid if 'Ch' is not 0
 | |
| 	Ch     rune      // a unicode character
 | |
| 	Width  int       // width of the screen
 | |
| 	Height int       // height of the screen
 | |
| 	Err    error     // error in case if input failed
 | |
| 	MouseX int       // x coord of mouse
 | |
| 	MouseY int       // y coord of mouse
 | |
| 	N      int       // number of bytes written when getting a raw event
 | |
| }
 | |
| 
 | |
| // A cell, single conceptual entity on the screen. The screen is basically a 2d
 | |
| // array of cells. 'Ch' is a unicode character, 'Fg' and 'Bg' are foreground
 | |
| // and background attributes respectively.
 | |
| type Cell struct {
 | |
| 	Ch rune
 | |
| 	Fg Attribute
 | |
| 	Bg Attribute
 | |
| }
 | |
| 
 | |
| // To know if termbox has been initialized or not
 | |
| var (
 | |
| 	IsInit bool = false
 | |
| )
 | |
| 
 | |
| // Key constants, see Event.Key field.
 | |
| const (
 | |
| 	KeyF1 Key = 0xFFFF - iota
 | |
| 	KeyF2
 | |
| 	KeyF3
 | |
| 	KeyF4
 | |
| 	KeyF5
 | |
| 	KeyF6
 | |
| 	KeyF7
 | |
| 	KeyF8
 | |
| 	KeyF9
 | |
| 	KeyF10
 | |
| 	KeyF11
 | |
| 	KeyF12
 | |
| 	KeyInsert
 | |
| 	KeyDelete
 | |
| 	KeyHome
 | |
| 	KeyEnd
 | |
| 	KeyPgup
 | |
| 	KeyPgdn
 | |
| 	KeyArrowUp
 | |
| 	KeyArrowDown
 | |
| 	KeyArrowLeft
 | |
| 	KeyArrowRight
 | |
| 	key_min // see terminfo
 | |
| 	MouseLeft
 | |
| 	MouseMiddle
 | |
| 	MouseRight
 | |
| 	MouseRelease
 | |
| 	MouseWheelUp
 | |
| 	MouseWheelDown
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	KeyCtrlTilde      Key = 0x00
 | |
| 	KeyCtrl2          Key = 0x00
 | |
| 	KeyCtrlSpace      Key = 0x00
 | |
| 	KeyCtrlA          Key = 0x01
 | |
| 	KeyCtrlB          Key = 0x02
 | |
| 	KeyCtrlC          Key = 0x03
 | |
| 	KeyCtrlD          Key = 0x04
 | |
| 	KeyCtrlE          Key = 0x05
 | |
| 	KeyCtrlF          Key = 0x06
 | |
| 	KeyCtrlG          Key = 0x07
 | |
| 	KeyBackspace      Key = 0x08
 | |
| 	KeyCtrlH          Key = 0x08
 | |
| 	KeyTab            Key = 0x09
 | |
| 	KeyCtrlI          Key = 0x09
 | |
| 	KeyCtrlJ          Key = 0x0A
 | |
| 	KeyCtrlK          Key = 0x0B
 | |
| 	KeyCtrlL          Key = 0x0C
 | |
| 	KeyEnter          Key = 0x0D
 | |
| 	KeyCtrlM          Key = 0x0D
 | |
| 	KeyCtrlN          Key = 0x0E
 | |
| 	KeyCtrlO          Key = 0x0F
 | |
| 	KeyCtrlP          Key = 0x10
 | |
| 	KeyCtrlQ          Key = 0x11
 | |
| 	KeyCtrlR          Key = 0x12
 | |
| 	KeyCtrlS          Key = 0x13
 | |
| 	KeyCtrlT          Key = 0x14
 | |
| 	KeyCtrlU          Key = 0x15
 | |
| 	KeyCtrlV          Key = 0x16
 | |
| 	KeyCtrlW          Key = 0x17
 | |
| 	KeyCtrlX          Key = 0x18
 | |
| 	KeyCtrlY          Key = 0x19
 | |
| 	KeyCtrlZ          Key = 0x1A
 | |
| 	KeyEsc            Key = 0x1B
 | |
| 	KeyCtrlLsqBracket Key = 0x1B
 | |
| 	KeyCtrl3          Key = 0x1B
 | |
| 	KeyCtrl4          Key = 0x1C
 | |
| 	KeyCtrlBackslash  Key = 0x1C
 | |
| 	KeyCtrl5          Key = 0x1D
 | |
| 	KeyCtrlRsqBracket Key = 0x1D
 | |
| 	KeyCtrl6          Key = 0x1E
 | |
| 	KeyCtrl7          Key = 0x1F
 | |
| 	KeyCtrlSlash      Key = 0x1F
 | |
| 	KeyCtrlUnderscore Key = 0x1F
 | |
| 	KeySpace          Key = 0x20
 | |
| 	KeyBackspace2     Key = 0x7F
 | |
| 	KeyCtrl8          Key = 0x7F
 | |
| )
 | |
| 
 | |
| // Alt modifier constant, see Event.Mod field and SetInputMode function.
 | |
| const (
 | |
| 	ModAlt Modifier = 1 << iota
 | |
| 	ModMotion
 | |
| )
 | |
| 
 | |
| // Cell colors, you can combine a color with multiple attributes using bitwise
 | |
| // OR ('|').
 | |
| const (
 | |
| 	ColorDefault Attribute = iota
 | |
| 	ColorBlack
 | |
| 	ColorRed
 | |
| 	ColorGreen
 | |
| 	ColorYellow
 | |
| 	ColorBlue
 | |
| 	ColorMagenta
 | |
| 	ColorCyan
 | |
| 	ColorWhite
 | |
| )
 | |
| 
 | |
| // Cell attributes, it is possible to use multiple attributes by combining them
 | |
| // using bitwise OR ('|'). Although, colors cannot be combined. But you can
 | |
| // combine attributes and a single color.
 | |
| //
 | |
| // It's worth mentioning that some platforms don't support certain attributes.
 | |
| // For example windows console doesn't support AttrUnderline. And on some
 | |
| // terminals applying AttrBold to background may result in blinking text. Use
 | |
| // them with caution and test your code on various terminals.
 | |
| const (
 | |
| 	AttrBold Attribute = 1 << (iota + 9)
 | |
| 	AttrUnderline
 | |
| 	AttrReverse
 | |
| )
 | |
| 
 | |
| // Input mode. See SetInputMode function.
 | |
| const (
 | |
| 	InputEsc InputMode = 1 << iota
 | |
| 	InputAlt
 | |
| 	InputMouse
 | |
| 	InputCurrent InputMode = 0
 | |
| )
 | |
| 
 | |
| // Output mode. See SetOutputMode function.
 | |
| const (
 | |
| 	OutputCurrent OutputMode = iota
 | |
| 	OutputNormal
 | |
| 	Output256
 | |
| 	Output216
 | |
| 	OutputGrayscale
 | |
| )
 | |
| 
 | |
| // Event type. See Event.Type field.
 | |
| const (
 | |
| 	EventKey EventType = iota
 | |
| 	EventResize
 | |
| 	EventMouse
 | |
| 	EventError
 | |
| 	EventInterrupt
 | |
| 	EventRaw
 | |
| 	EventNone
 | |
| )
 |