forked from toolshed/abra
chore: make deps, go mod vendor
This commit is contained in:
317
vendor/github.com/charmbracelet/x/ansi/screen.go
generated
vendored
317
vendor/github.com/charmbracelet/x/ansi/screen.go
generated
vendored
@ -1,30 +1,44 @@
|
||||
package ansi
|
||||
|
||||
import "strconv"
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// EraseDisplay (ED) clears the screen or parts of the screen. Possible values:
|
||||
// EraseDisplay (ED) clears the display or parts of the display. A screen is
|
||||
// the shown part of the terminal display excluding the scrollback buffer.
|
||||
// Possible values:
|
||||
//
|
||||
// Default is 0.
|
||||
//
|
||||
// 0: Clear from cursor to end of screen.
|
||||
// 1: Clear from cursor to beginning of the screen.
|
||||
// 2: Clear entire screen (and moves cursor to upper left on DOS).
|
||||
// 3: Clear entire screen and delete all lines saved in the scrollback buffer.
|
||||
// 3: Clear entire display which delete all lines saved in the scrollback buffer (xterm).
|
||||
//
|
||||
// CSI <n> J
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/ED.html
|
||||
func EraseDisplay(n int) string {
|
||||
if n < 0 {
|
||||
n = 0
|
||||
var s string
|
||||
if n > 0 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + strconv.Itoa(n) + "J"
|
||||
return "\x1b[" + s + "J"
|
||||
}
|
||||
|
||||
// ED is an alias for [EraseDisplay].
|
||||
func ED(n int) string {
|
||||
return EraseDisplay(n)
|
||||
}
|
||||
|
||||
// EraseDisplay constants.
|
||||
// These are the possible values for the EraseDisplay function.
|
||||
const (
|
||||
EraseDisplayRight = "\x1b[0J"
|
||||
EraseDisplayLeft = "\x1b[1J"
|
||||
EraseEntireDisplay = "\x1b[2J"
|
||||
EraseScreenBelow = "\x1b[J"
|
||||
EraseScreenAbove = "\x1b[1J"
|
||||
EraseEntireScreen = "\x1b[2J"
|
||||
EraseEntireDisplay = "\x1b[3J"
|
||||
)
|
||||
|
||||
// EraseLine (EL) clears the current line or parts of the line. Possible values:
|
||||
@ -39,16 +53,22 @@ const (
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/EL.html
|
||||
func EraseLine(n int) string {
|
||||
if n < 0 {
|
||||
n = 0
|
||||
var s string
|
||||
if n > 0 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + strconv.Itoa(n) + "K"
|
||||
return "\x1b[" + s + "K"
|
||||
}
|
||||
|
||||
// EL is an alias for [EraseLine].
|
||||
func EL(n int) string {
|
||||
return EraseLine(n)
|
||||
}
|
||||
|
||||
// EraseLine constants.
|
||||
// These are the possible values for the EraseLine function.
|
||||
const (
|
||||
EraseLineRight = "\x1b[0K"
|
||||
EraseLineRight = "\x1b[K"
|
||||
EraseLineLeft = "\x1b[1K"
|
||||
EraseEntireLine = "\x1b[2K"
|
||||
)
|
||||
@ -56,7 +76,7 @@ const (
|
||||
// ScrollUp (SU) scrolls the screen up n lines. New lines are added at the
|
||||
// bottom of the screen.
|
||||
//
|
||||
// CSI <n> S
|
||||
// CSI Pn S
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/SU.html
|
||||
func ScrollUp(n int) string {
|
||||
@ -67,10 +87,20 @@ func ScrollUp(n int) string {
|
||||
return "\x1b[" + s + "S"
|
||||
}
|
||||
|
||||
// PanDown is an alias for [ScrollUp].
|
||||
func PanDown(n int) string {
|
||||
return ScrollUp(n)
|
||||
}
|
||||
|
||||
// SU is an alias for [ScrollUp].
|
||||
func SU(n int) string {
|
||||
return ScrollUp(n)
|
||||
}
|
||||
|
||||
// ScrollDown (SD) scrolls the screen down n lines. New lines are added at the
|
||||
// top of the screen.
|
||||
//
|
||||
// CSI <n> T
|
||||
// CSI Pn T
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/SD.html
|
||||
func ScrollDown(n int) string {
|
||||
@ -81,10 +111,20 @@ func ScrollDown(n int) string {
|
||||
return "\x1b[" + s + "T"
|
||||
}
|
||||
|
||||
// PanUp is an alias for [ScrollDown].
|
||||
func PanUp(n int) string {
|
||||
return ScrollDown(n)
|
||||
}
|
||||
|
||||
// SD is an alias for [ScrollDown].
|
||||
func SD(n int) string {
|
||||
return ScrollDown(n)
|
||||
}
|
||||
|
||||
// InsertLine (IL) inserts n blank lines at the current cursor position.
|
||||
// Existing lines are moved down.
|
||||
//
|
||||
// CSI <n> L
|
||||
// CSI Pn L
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/IL.html
|
||||
func InsertLine(n int) string {
|
||||
@ -95,10 +135,15 @@ func InsertLine(n int) string {
|
||||
return "\x1b[" + s + "L"
|
||||
}
|
||||
|
||||
// IL is an alias for [InsertLine].
|
||||
func IL(n int) string {
|
||||
return InsertLine(n)
|
||||
}
|
||||
|
||||
// DeleteLine (DL) deletes n lines at the current cursor position. Existing
|
||||
// lines are moved up.
|
||||
//
|
||||
// CSI <n> M
|
||||
// CSI Pn M
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DL.html
|
||||
func DeleteLine(n int) string {
|
||||
@ -109,12 +154,66 @@ func DeleteLine(n int) string {
|
||||
return "\x1b[" + s + "M"
|
||||
}
|
||||
|
||||
// DL is an alias for [DeleteLine].
|
||||
func DL(n int) string {
|
||||
return DeleteLine(n)
|
||||
}
|
||||
|
||||
// SetTopBottomMargins (DECSTBM) sets the top and bottom margins for the scrolling
|
||||
// region. The default is the entire screen.
|
||||
//
|
||||
// Default is 1 and the bottom of the screen.
|
||||
//
|
||||
// CSI Pt ; Pb r
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECSTBM.html
|
||||
func SetTopBottomMargins(top, bot int) string {
|
||||
var t, b string
|
||||
if top > 0 {
|
||||
t = strconv.Itoa(top)
|
||||
}
|
||||
if bot > 0 {
|
||||
b = strconv.Itoa(bot)
|
||||
}
|
||||
return "\x1b[" + t + ";" + b + "r"
|
||||
}
|
||||
|
||||
// DECSTBM is an alias for [SetTopBottomMargins].
|
||||
func DECSTBM(top, bot int) string {
|
||||
return SetTopBottomMargins(top, bot)
|
||||
}
|
||||
|
||||
// SetLeftRightMargins (DECSLRM) sets the left and right margins for the scrolling
|
||||
// region.
|
||||
//
|
||||
// Default is 1 and the right of the screen.
|
||||
//
|
||||
// CSI Pl ; Pr s
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECSLRM.html
|
||||
func SetLeftRightMargins(left, right int) string {
|
||||
var l, r string
|
||||
if left > 0 {
|
||||
l = strconv.Itoa(left)
|
||||
}
|
||||
if right > 0 {
|
||||
r = strconv.Itoa(right)
|
||||
}
|
||||
return "\x1b[" + l + ";" + r + "s"
|
||||
}
|
||||
|
||||
// DECSLRM is an alias for [SetLeftRightMargins].
|
||||
func DECSLRM(left, right int) string {
|
||||
return SetLeftRightMargins(left, right)
|
||||
}
|
||||
|
||||
// SetScrollingRegion (DECSTBM) sets the top and bottom margins for the scrolling
|
||||
// region. The default is the entire screen.
|
||||
//
|
||||
// CSI <top> ; <bottom> r
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECSTBM.html
|
||||
// Deprecated: use [SetTopBottomMargins] instead.
|
||||
func SetScrollingRegion(t, b int) string {
|
||||
if t < 0 {
|
||||
t = 0
|
||||
@ -124,3 +223,187 @@ func SetScrollingRegion(t, b int) string {
|
||||
}
|
||||
return "\x1b[" + strconv.Itoa(t) + ";" + strconv.Itoa(b) + "r"
|
||||
}
|
||||
|
||||
// InsertCharacter (ICH) inserts n blank characters at the current cursor
|
||||
// position. Existing characters move to the right. Characters moved past the
|
||||
// right margin are lost. ICH has no effect outside the scrolling margins.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// CSI Pn @
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/ICH.html
|
||||
func InsertCharacter(n int) string {
|
||||
var s string
|
||||
if n > 1 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + s + "@"
|
||||
}
|
||||
|
||||
// ICH is an alias for [InsertCharacter].
|
||||
func ICH(n int) string {
|
||||
return InsertCharacter(n)
|
||||
}
|
||||
|
||||
// DeleteCharacter (DCH) deletes n characters at the current cursor position.
|
||||
// As the characters are deleted, the remaining characters move to the left and
|
||||
// the cursor remains at the same position.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// CSI Pn P
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DCH.html
|
||||
func DeleteCharacter(n int) string {
|
||||
var s string
|
||||
if n > 1 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + s + "P"
|
||||
}
|
||||
|
||||
// DCH is an alias for [DeleteCharacter].
|
||||
func DCH(n int) string {
|
||||
return DeleteCharacter(n)
|
||||
}
|
||||
|
||||
// SetTabEvery8Columns (DECST8C) sets the tab stops at every 8 columns.
|
||||
//
|
||||
// CSI ? 5 W
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECST8C.html
|
||||
const (
|
||||
SetTabEvery8Columns = "\x1b[?5W"
|
||||
DECST8C = SetTabEvery8Columns
|
||||
)
|
||||
|
||||
// HorizontalTabSet (HTS) sets a horizontal tab stop at the current cursor
|
||||
// column.
|
||||
//
|
||||
// This is equivalent to [HTS].
|
||||
//
|
||||
// ESC H
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/HTS.html
|
||||
const HorizontalTabSet = "\x1bH"
|
||||
|
||||
// TabClear (TBC) clears tab stops.
|
||||
//
|
||||
// Default is 0.
|
||||
//
|
||||
// Possible values:
|
||||
// 0: Clear tab stop at the current column. (default)
|
||||
// 3: Clear all tab stops.
|
||||
//
|
||||
// CSI Pn g
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/TBC.html
|
||||
func TabClear(n int) string {
|
||||
var s string
|
||||
if n > 0 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + s + "g"
|
||||
}
|
||||
|
||||
// TBC is an alias for [TabClear].
|
||||
func TBC(n int) string {
|
||||
return TabClear(n)
|
||||
}
|
||||
|
||||
// RequestPresentationStateReport (DECRQPSR) requests the terminal to send a
|
||||
// report of the presentation state. This includes the cursor information [DECCIR],
|
||||
// and tab stop [DECTABSR] reports.
|
||||
//
|
||||
// Default is 0.
|
||||
//
|
||||
// Possible values:
|
||||
// 0: Error, request ignored.
|
||||
// 1: Cursor information report [DECCIR].
|
||||
// 2: Tab stop report [DECTABSR].
|
||||
//
|
||||
// CSI Ps $ w
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECRQPSR.html
|
||||
func RequestPresentationStateReport(n int) string {
|
||||
var s string
|
||||
if n > 0 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + s + "$w"
|
||||
}
|
||||
|
||||
// DECRQPSR is an alias for [RequestPresentationStateReport].
|
||||
func DECRQPSR(n int) string {
|
||||
return RequestPresentationStateReport(n)
|
||||
}
|
||||
|
||||
// TabStopReport (DECTABSR) is the response to a tab stop report request.
|
||||
// It reports the tab stops set in the terminal.
|
||||
//
|
||||
// The response is a list of tab stops separated by a slash (/) character.
|
||||
//
|
||||
// DCS 2 $ u D ... D ST
|
||||
//
|
||||
// Where D is a decimal number representing a tab stop.
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECTABSR.html
|
||||
func TabStopReport(stops ...int) string {
|
||||
var s []string
|
||||
for _, v := range stops {
|
||||
s = append(s, strconv.Itoa(v))
|
||||
}
|
||||
return "\x1bP2$u" + strings.Join(s, "/") + "\x1b\\"
|
||||
}
|
||||
|
||||
// DECTABSR is an alias for [TabStopReport].
|
||||
func DECTABSR(stops ...int) string {
|
||||
return TabStopReport(stops...)
|
||||
}
|
||||
|
||||
// CursorInformationReport (DECCIR) is the response to a cursor information
|
||||
// report request. It reports the cursor position, visual attributes, and
|
||||
// character protection attributes. It also reports the status of origin mode
|
||||
// [DECOM] and the current active character set.
|
||||
//
|
||||
// The response is a list of values separated by a semicolon (;) character.
|
||||
//
|
||||
// DCS 1 $ u D ... D ST
|
||||
//
|
||||
// Where D is a decimal number representing a value.
|
||||
//
|
||||
// See: https://vt100.net/docs/vt510-rm/DECCIR.html
|
||||
func CursorInformationReport(values ...int) string {
|
||||
var s []string
|
||||
for _, v := range values {
|
||||
s = append(s, strconv.Itoa(v))
|
||||
}
|
||||
return "\x1bP1$u" + strings.Join(s, ";") + "\x1b\\"
|
||||
}
|
||||
|
||||
// DECCIR is an alias for [CursorInformationReport].
|
||||
func DECCIR(values ...int) string {
|
||||
return CursorInformationReport(values...)
|
||||
}
|
||||
|
||||
// RepeatPreviousCharacter (REP) repeats the previous character n times.
|
||||
// This is identical to typing the same character n times.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// CSI Pn b
|
||||
//
|
||||
// See: ECMA-48 § 8.3.103
|
||||
func RepeatPreviousCharacter(n int) string {
|
||||
var s string
|
||||
if n > 1 {
|
||||
s = strconv.Itoa(n)
|
||||
}
|
||||
return "\x1b[" + s + "b"
|
||||
}
|
||||
|
||||
// REP is an alias for [RepeatPreviousCharacter].
|
||||
func REP(n int) string {
|
||||
return RepeatPreviousCharacter(n)
|
||||
}
|
||||
|
Reference in New Issue
Block a user