| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633 |
- package ansi
- import "strconv"
- // SaveCursor (DECSC) is an escape sequence that saves the current cursor
- // position.
- //
- // ESC 7
- //
- // See: https://vt100.net/docs/vt510-rm/DECSC.html
- const (
- SaveCursor = "\x1b7"
- DECSC = SaveCursor
- )
- // RestoreCursor (DECRC) is an escape sequence that restores the cursor
- // position.
- //
- // ESC 8
- //
- // See: https://vt100.net/docs/vt510-rm/DECRC.html
- const (
- RestoreCursor = "\x1b8"
- DECRC = RestoreCursor
- )
- // RequestCursorPosition is an escape sequence that requests the current cursor
- // position.
- //
- // CSI 6 n
- //
- // The terminal will report the cursor position as a CSI sequence in the
- // following format:
- //
- // CSI Pl ; Pc R
- //
- // Where Pl is the line number and Pc is the column number.
- // See: https://vt100.net/docs/vt510-rm/CPR.html
- //
- // Deprecated: use [RequestCursorPositionReport] instead.
- const RequestCursorPosition = "\x1b[6n"
- // RequestExtendedCursorPosition (DECXCPR) is a sequence for requesting the
- // cursor position report including the current page number.
- //
- // CSI ? 6 n
- //
- // The terminal will report the cursor position as a CSI sequence in the
- // following format:
- //
- // CSI ? Pl ; Pc ; Pp R
- //
- // Where Pl is the line number, Pc is the column number, and Pp is the page
- // number.
- // See: https://vt100.net/docs/vt510-rm/DECXCPR.html
- //
- // Deprecated: use [RequestExtendedCursorPositionReport] instead.
- const RequestExtendedCursorPosition = "\x1b[?6n"
- // CursorUp (CUU) returns a sequence for moving the cursor up n cells.
- //
- // CSI n A
- //
- // See: https://vt100.net/docs/vt510-rm/CUU.html
- func CursorUp(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "A"
- }
- // CUU is an alias for [CursorUp].
- func CUU(n int) string {
- return CursorUp(n)
- }
- // CUU1 is a sequence for moving the cursor up one cell.
- const CUU1 = "\x1b[A"
- // CursorUp1 is a sequence for moving the cursor up one cell.
- //
- // This is equivalent to CursorUp(1).
- //
- // Deprecated: use [CUU1] instead.
- const CursorUp1 = "\x1b[A"
- // CursorDown (CUD) returns a sequence for moving the cursor down n cells.
- //
- // CSI n B
- //
- // See: https://vt100.net/docs/vt510-rm/CUD.html
- func CursorDown(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "B"
- }
- // CUD is an alias for [CursorDown].
- func CUD(n int) string {
- return CursorDown(n)
- }
- // CUD1 is a sequence for moving the cursor down one cell.
- const CUD1 = "\x1b[B"
- // CursorDown1 is a sequence for moving the cursor down one cell.
- //
- // This is equivalent to CursorDown(1).
- //
- // Deprecated: use [CUD1] instead.
- const CursorDown1 = "\x1b[B"
- // CursorForward (CUF) returns a sequence for moving the cursor right n cells.
- //
- // # CSI n C
- //
- // See: https://vt100.net/docs/vt510-rm/CUF.html
- func CursorForward(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "C"
- }
- // CUF is an alias for [CursorForward].
- func CUF(n int) string {
- return CursorForward(n)
- }
- // CUF1 is a sequence for moving the cursor right one cell.
- const CUF1 = "\x1b[C"
- // CursorRight (CUF) returns a sequence for moving the cursor right n cells.
- //
- // CSI n C
- //
- // See: https://vt100.net/docs/vt510-rm/CUF.html
- //
- // Deprecated: use [CursorForward] instead.
- func CursorRight(n int) string {
- return CursorForward(n)
- }
- // CursorRight1 is a sequence for moving the cursor right one cell.
- //
- // This is equivalent to CursorRight(1).
- //
- // Deprecated: use [CUF1] instead.
- const CursorRight1 = CUF1
- // CursorBackward (CUB) returns a sequence for moving the cursor left n cells.
- //
- // # CSI n D
- //
- // See: https://vt100.net/docs/vt510-rm/CUB.html
- func CursorBackward(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "D"
- }
- // CUB is an alias for [CursorBackward].
- func CUB(n int) string {
- return CursorBackward(n)
- }
- // CUB1 is a sequence for moving the cursor left one cell.
- const CUB1 = "\x1b[D"
- // CursorLeft (CUB) returns a sequence for moving the cursor left n cells.
- //
- // CSI n D
- //
- // See: https://vt100.net/docs/vt510-rm/CUB.html
- //
- // Deprecated: use [CursorBackward] instead.
- func CursorLeft(n int) string {
- return CursorBackward(n)
- }
- // CursorLeft1 is a sequence for moving the cursor left one cell.
- //
- // This is equivalent to CursorLeft(1).
- //
- // Deprecated: use [CUB1] instead.
- const CursorLeft1 = CUB1
- // CursorNextLine (CNL) returns a sequence for moving the cursor to the
- // beginning of the next line n times.
- //
- // CSI n E
- //
- // See: https://vt100.net/docs/vt510-rm/CNL.html
- func CursorNextLine(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "E"
- }
- // CNL is an alias for [CursorNextLine].
- func CNL(n int) string {
- return CursorNextLine(n)
- }
- // CursorPreviousLine (CPL) returns a sequence for moving the cursor to the
- // beginning of the previous line n times.
- //
- // CSI n F
- //
- // See: https://vt100.net/docs/vt510-rm/CPL.html
- func CursorPreviousLine(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "F"
- }
- // CPL is an alias for [CursorPreviousLine].
- func CPL(n int) string {
- return CursorPreviousLine(n)
- }
- // CursorHorizontalAbsolute (CHA) returns a sequence for moving the cursor to
- // the given column.
- //
- // Default is 1.
- //
- // CSI n G
- //
- // See: https://vt100.net/docs/vt510-rm/CHA.html
- func CursorHorizontalAbsolute(col int) string {
- var s string
- if col > 0 {
- s = strconv.Itoa(col)
- }
- return "\x1b[" + s + "G"
- }
- // CHA is an alias for [CursorHorizontalAbsolute].
- func CHA(col int) string {
- return CursorHorizontalAbsolute(col)
- }
- // CursorPosition (CUP) returns a sequence for setting the cursor to the
- // given row and column.
- //
- // Default is 1,1.
- //
- // CSI n ; m H
- //
- // See: https://vt100.net/docs/vt510-rm/CUP.html
- func CursorPosition(col, row int) string {
- if row <= 0 && col <= 0 {
- return HomeCursorPosition
- }
- var r, c string
- if row > 0 {
- r = strconv.Itoa(row)
- }
- if col > 0 {
- c = strconv.Itoa(col)
- }
- return "\x1b[" + r + ";" + c + "H"
- }
- // CUP is an alias for [CursorPosition].
- func CUP(col, row int) string {
- return CursorPosition(col, row)
- }
- // CursorHomePosition is a sequence for moving the cursor to the upper left
- // corner of the scrolling region. This is equivalent to `CursorPosition(1, 1)`.
- const CursorHomePosition = "\x1b[H"
- // SetCursorPosition (CUP) returns a sequence for setting the cursor to the
- // given row and column.
- //
- // CSI n ; m H
- //
- // See: https://vt100.net/docs/vt510-rm/CUP.html
- //
- // Deprecated: use [CursorPosition] instead.
- func SetCursorPosition(col, row int) string {
- if row <= 0 && col <= 0 {
- return HomeCursorPosition
- }
- var r, c string
- if row > 0 {
- r = strconv.Itoa(row)
- }
- if col > 0 {
- c = strconv.Itoa(col)
- }
- return "\x1b[" + r + ";" + c + "H"
- }
- // HomeCursorPosition is a sequence for moving the cursor to the upper left
- // corner of the scrolling region. This is equivalent to `SetCursorPosition(1, 1)`.
- //
- // Deprecated: use [CursorHomePosition] instead.
- const HomeCursorPosition = CursorHomePosition
- // MoveCursor (CUP) returns a sequence for setting the cursor to the
- // given row and column.
- //
- // CSI n ; m H
- //
- // See: https://vt100.net/docs/vt510-rm/CUP.html
- //
- // Deprecated: use [CursorPosition] instead.
- func MoveCursor(col, row int) string {
- return SetCursorPosition(col, row)
- }
- // CursorOrigin is a sequence for moving the cursor to the upper left corner of
- // the display. This is equivalent to `SetCursorPosition(1, 1)`.
- //
- // Deprecated: use [CursorHomePosition] instead.
- const CursorOrigin = "\x1b[1;1H"
- // MoveCursorOrigin is a sequence for moving the cursor to the upper left
- // corner of the display. This is equivalent to `SetCursorPosition(1, 1)`.
- //
- // Deprecated: use [CursorHomePosition] instead.
- const MoveCursorOrigin = CursorOrigin
- // CursorHorizontalForwardTab (CHT) returns a sequence for moving the cursor to
- // the next tab stop n times.
- //
- // Default is 1.
- //
- // CSI n I
- //
- // See: https://vt100.net/docs/vt510-rm/CHT.html
- func CursorHorizontalForwardTab(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "I"
- }
- // CHT is an alias for [CursorHorizontalForwardTab].
- func CHT(n int) string {
- return CursorHorizontalForwardTab(n)
- }
- // EraseCharacter (ECH) returns a sequence for erasing n characters and moving
- // the cursor to the right. This doesn't affect other cell attributes.
- //
- // Default is 1.
- //
- // CSI n X
- //
- // See: https://vt100.net/docs/vt510-rm/ECH.html
- func EraseCharacter(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "X"
- }
- // ECH is an alias for [EraseCharacter].
- func ECH(n int) string {
- return EraseCharacter(n)
- }
- // CursorBackwardTab (CBT) returns a sequence for moving the cursor to the
- // previous tab stop n times.
- //
- // Default is 1.
- //
- // CSI n Z
- //
- // See: https://vt100.net/docs/vt510-rm/CBT.html
- func CursorBackwardTab(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "Z"
- }
- // CBT is an alias for [CursorBackwardTab].
- func CBT(n int) string {
- return CursorBackwardTab(n)
- }
- // VerticalPositionAbsolute (VPA) returns a sequence for moving the cursor to
- // the given row.
- //
- // Default is 1.
- //
- // CSI n d
- //
- // See: https://vt100.net/docs/vt510-rm/VPA.html
- func VerticalPositionAbsolute(row int) string {
- var s string
- if row > 0 {
- s = strconv.Itoa(row)
- }
- return "\x1b[" + s + "d"
- }
- // VPA is an alias for [VerticalPositionAbsolute].
- func VPA(row int) string {
- return VerticalPositionAbsolute(row)
- }
- // VerticalPositionRelative (VPR) returns a sequence for moving the cursor down
- // n rows relative to the current position.
- //
- // Default is 1.
- //
- // CSI n e
- //
- // See: https://vt100.net/docs/vt510-rm/VPR.html
- func VerticalPositionRelative(n int) string {
- var s string
- if n > 1 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "e"
- }
- // VPR is an alias for [VerticalPositionRelative].
- func VPR(n int) string {
- return VerticalPositionRelative(n)
- }
- // HorizontalVerticalPosition (HVP) returns a sequence for moving the cursor to
- // the given row and column.
- //
- // Default is 1,1.
- //
- // CSI n ; m f
- //
- // This has the same effect as [CursorPosition].
- //
- // See: https://vt100.net/docs/vt510-rm/HVP.html
- func HorizontalVerticalPosition(col, row int) string {
- var r, c string
- if row > 0 {
- r = strconv.Itoa(row)
- }
- if col > 0 {
- c = strconv.Itoa(col)
- }
- return "\x1b[" + r + ";" + c + "f"
- }
- // HVP is an alias for [HorizontalVerticalPosition].
- func HVP(col, row int) string {
- return HorizontalVerticalPosition(col, row)
- }
- // HorizontalVerticalHomePosition is a sequence for moving the cursor to the
- // upper left corner of the scrolling region. This is equivalent to
- // `HorizontalVerticalPosition(1, 1)`.
- const HorizontalVerticalHomePosition = "\x1b[f"
- // SaveCurrentCursorPosition (SCOSC) is a sequence for saving the current cursor
- // position for SCO console mode.
- //
- // CSI s
- //
- // This acts like [DECSC], except the page number where the cursor is located
- // is not saved.
- //
- // See: https://vt100.net/docs/vt510-rm/SCOSC.html
- const (
- SaveCurrentCursorPosition = "\x1b[s"
- SCOSC = SaveCurrentCursorPosition
- )
- // SaveCursorPosition (SCP or SCOSC) is a sequence for saving the cursor
- // position.
- //
- // CSI s
- //
- // This acts like Save, except the page number where the cursor is located is
- // not saved.
- //
- // See: https://vt100.net/docs/vt510-rm/SCOSC.html
- //
- // Deprecated: use [SaveCurrentCursorPosition] instead.
- const SaveCursorPosition = "\x1b[s"
- // RestoreCurrentCursorPosition (SCORC) is a sequence for restoring the current
- // cursor position for SCO console mode.
- //
- // CSI u
- //
- // This acts like [DECRC], except the page number where the cursor was saved is
- // not restored.
- //
- // See: https://vt100.net/docs/vt510-rm/SCORC.html
- const (
- RestoreCurrentCursorPosition = "\x1b[u"
- SCORC = RestoreCurrentCursorPosition
- )
- // RestoreCursorPosition (RCP or SCORC) is a sequence for restoring the cursor
- // position.
- //
- // CSI u
- //
- // This acts like Restore, except the cursor stays on the same page where the
- // cursor was saved.
- //
- // See: https://vt100.net/docs/vt510-rm/SCORC.html
- //
- // Deprecated: use [RestoreCurrentCursorPosition] instead.
- const RestoreCursorPosition = "\x1b[u"
- // SetCursorStyle (DECSCUSR) returns a sequence for changing the cursor style.
- //
- // Default is 1.
- //
- // CSI Ps SP q
- //
- // Where Ps is the cursor style:
- //
- // 0: Blinking block
- // 1: Blinking block (default)
- // 2: Steady block
- // 3: Blinking underline
- // 4: Steady underline
- // 5: Blinking bar (xterm)
- // 6: Steady bar (xterm)
- //
- // See: https://vt100.net/docs/vt510-rm/DECSCUSR.html
- // See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-SP-q.1D81
- func SetCursorStyle(style int) string {
- if style < 0 {
- style = 0
- }
- return "\x1b[" + strconv.Itoa(style) + " q"
- }
- // DECSCUSR is an alias for [SetCursorStyle].
- func DECSCUSR(style int) string {
- return SetCursorStyle(style)
- }
- // SetPointerShape returns a sequence for changing the mouse pointer cursor
- // shape. Use "default" for the default pointer shape.
- //
- // OSC 22 ; Pt ST
- // OSC 22 ; Pt BEL
- //
- // Where Pt is the pointer shape name. The name can be anything that the
- // operating system can understand. Some common names are:
- //
- // - copy
- // - crosshair
- // - default
- // - ew-resize
- // - n-resize
- // - text
- // - wait
- //
- // See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Commands
- func SetPointerShape(shape string) string {
- return "\x1b]22;" + shape + "\x07"
- }
- // ReverseIndex (RI) is an escape sequence for moving the cursor up one line in
- // the same column. If the cursor is at the top margin, the screen scrolls
- // down.
- //
- // This has the same effect as [RI].
- const ReverseIndex = "\x1bM"
- // HorizontalPositionAbsolute (HPA) returns a sequence for moving the cursor to
- // the given column. This has the same effect as [CUP].
- //
- // Default is 1.
- //
- // CSI n `
- //
- // See: https://vt100.net/docs/vt510-rm/HPA.html
- func HorizontalPositionAbsolute(col int) string {
- var s string
- if col > 0 {
- s = strconv.Itoa(col)
- }
- return "\x1b[" + s + "`"
- }
- // HPA is an alias for [HorizontalPositionAbsolute].
- func HPA(col int) string {
- return HorizontalPositionAbsolute(col)
- }
- // HorizontalPositionRelative (HPR) returns a sequence for moving the cursor
- // right n columns relative to the current position. This has the same effect
- // as [CUP].
- //
- // Default is 1.
- //
- // CSI n a
- //
- // See: https://vt100.net/docs/vt510-rm/HPR.html
- func HorizontalPositionRelative(n int) string {
- var s string
- if n > 0 {
- s = strconv.Itoa(n)
- }
- return "\x1b[" + s + "a"
- }
- // HPR is an alias for [HorizontalPositionRelative].
- func HPR(n int) string {
- return HorizontalPositionRelative(n)
- }
- // Index (IND) is an escape sequence for moving the cursor down one line in the
- // same column. If the cursor is at the bottom margin, the screen scrolls up.
- // This has the same effect as [IND].
- const Index = "\x1bD"
|