package prompt import "sync" var ( consoleWriterMu sync.Mutex consoleWriter ConsoleWriter ) func registerConsoleWriter(f ConsoleWriter) { consoleWriterMu.Lock() defer consoleWriterMu.Unlock() consoleWriter = f } // DisplayAttribute represents display attributes like Blinking, Bold, Italic and so on. type DisplayAttribute int const ( // DisplayReset reset all display attributes. DisplayReset DisplayAttribute = iota // DisplayBold set bold or increases intensity. DisplayBold // DisplayLowIntensity decreases intensity. Not widely supported. DisplayLowIntensity // DisplayItalic set italic. Not widely supported. DisplayItalic // DisplayUnderline set underline DisplayUnderline // DisplayBlink set blink (less than 150 per minute). DisplayBlink // DisplayRapidBlink set blink (more than 150 per minute). Not widely supported. DisplayRapidBlink // DisplayReverse swap foreground and background colors. DisplayReverse // DisplayInvisible set invisible. Not widely supported. DisplayInvisible // DisplayCrossedOut set characters legible, but marked for deletion. Not widely supported. DisplayCrossedOut // DisplayDefaultFont set primary(default) font DisplayDefaultFont ) // Color represents color on terminal. type Color int const ( // DefaultColor represents a default color. DefaultColor Color = iota // Low intensity // Black represents a black. Black // DarkRed represents a dark red. DarkRed // DarkGreen represents a dark green. DarkGreen // Brown represents a brown. Brown // DarkBlue represents a dark blue. DarkBlue // Purple represents a purple. Purple // Cyan represents a cyan. Cyan // LightGray represents a light gray. LightGray // High intensity // DarkGray represents a dark gray. DarkGray // Red represents a red. Red // Green represents a green. Green // Yellow represents a yellow. Yellow // Blue represents a blue. Blue // Fuchsia represents a fuchsia. Fuchsia // Turquoise represents a turquoise. Turquoise // White represents a white. White ) // ConsoleWriter is an interface to abstract output layer. type ConsoleWriter interface { /* Write */ // WriteRaw to write raw byte array. WriteRaw(data []byte) // Write to write safety byte array by removing control sequences. Write(data []byte) // WriteStr to write raw string. WriteRawStr(data string) // WriteStr to write safety string by removing control sequences. WriteStr(data string) // Flush to flush buffer. Flush() error /* Erasing */ // EraseScreen erases the screen with the background colour and moves the cursor to home. EraseScreen() // EraseUp erases the screen from the current line up to the top of the screen. EraseUp() // EraseDown erases the screen from the current line down to the bottom of the screen. EraseDown() // EraseStartOfLine erases from the current cursor position to the start of the current line. EraseStartOfLine() // EraseEndOfLine erases from the current cursor position to the end of the current line. EraseEndOfLine() // EraseLine erases the entire current line. EraseLine() /* Cursor */ // ShowCursor stops blinking cursor and show. ShowCursor() // HideCursor hides cursor. HideCursor() // CursorGoTo sets the cursor position where subsequent text will begin. CursorGoTo(row, col int) // CursorUp moves the cursor up by 'n' rows; the default count is 1. CursorUp(n int) // CursorDown moves the cursor down by 'n' rows; the default count is 1. CursorDown(n int) // CursorForward moves the cursor forward by 'n' columns; the default count is 1. CursorForward(n int) // CursorBackward moves the cursor backward by 'n' columns; the default count is 1. CursorBackward(n int) // AskForCPR asks for a cursor position report (CPR). AskForCPR() // SaveCursor saves current cursor position. SaveCursor() // UnSaveCursor restores cursor position after a Save Cursor. UnSaveCursor() /* Scrolling */ // ScrollDown scrolls display down one line. ScrollDown() // ScrollUp scroll display up one line. ScrollUp() /* Title */ // SetTitle sets a title of terminal window. SetTitle(title string) // ClearTitle clears a title of terminal window. ClearTitle() /* Font */ // SetColor sets text and background colors. and specify whether text is bold. SetColor(fg, bg Color, bold bool) }