rasterm

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2024 License: MIT Imports: 15 Imported by: 3

README

rasterm

Encodes images to iTerm / Kitty / SIXEL (terminal) inline graphics protocols.

GoDoc

rasterm sample output

Supported Image Encodings

  • Kitty
  • iTerm2 / WezTerm
  • Sixel

TODO

TESTING

Notes

terminal features matrix
terminal sixel iTerm2 format kitty format
iterm2 Y Y
kitty Y
mintty Y Y
mlterm Y Y
putty
rlogin Y Y
wezterm Y Y
xterm Y
known responses
CSI 0 c
terminal response
apple terminal \x1b[?1;2c
guake \x1b[?65;1;9c
iterm2 \x1b[?62;4c
kitty \x1b[?62;c
mintty \x1b[?64;1;2;4;6;9;15;21;22;28;29c
mlterm \x1b[?63;1;2;3;4;7;29c
putty \x1b[?6c
rlogin \x1b[?65;1;2;3;4;6;7;8;9;15;18;21;22;29;39;42;44c
st \x1b[?6c
terminology \x1b[?64;1;9;15;18;21;22c
vimterm \x1b[?1;2c
wez \x1b[?65;4;6;18;22c
xfce \x1b[?65;1;9c
xterm \x1b[?63;1;2;4;6;9;15;22c
CSI > 0 c
terminal response
apple terminal \x1b[>1;95;0c
guake \x1b[>65;5402;1c
iterm2 \x1b[>0;95;0c
kitty \x1b[>1;4000;19c
mintty \x1b[>77;30104;0c
mlterm \x1b[>24;279;0c
putty \x1b[>0;136;0c
rlogin \x1b[>65;331;0c
st NO RESPONSE
vimterm \x1b[>0;100;0c
wez \x1b[>0;0;0c
xfce \x1b[>65;5402;1c
xterm \x1b[>19;344;0c
identifications
terminal values
apple terminal TERM_PROGRAM="Apple_Terminal"
apple terminal __CFBundleIdentifier="com.apple.Terminal"
guake
iterm2 LC_TERMINAL="iTerm2"
kitty TERM="xterm-kitty"
mintty TERM="mintty"
mlterm
putty
rlogin
st
terminology TERM_PROGRAM=terminology
vimterm VIM_TERMINAL is set
wez TERM_PROGRAM="wezterm"
xfce
xterm
opinions
  • Sixel is a primitive and wasteful format. Most sixel terminals also support the iTerm2 format--fewer bytes, full color instead of paletted, and no pixel re-processing required. Much better!
go stuff
go tool pprof -http=:8080 ./name.prof
godoc -http=:8099 -goroot="$HOME/go"
go test -v
go mod tidy
https://blog.golang.org/pprof
more reading

Documentation

Index

Constants

View Source
const (
	ITERM_IMG_HDR = "\x1b]1337;File=inline=1"
	ITERM_IMG_FTR = "\a"
)
View Source
const (
	KITTY_IMG_HDR = "\x1b_G"
	KITTY_IMG_FTR = "\x1b\\"
)
View Source
const (
	SIXEL_MIN byte = 0x3f
	SIXEL_MAX byte = 0x7e
)

NOTE: valid sixel encodeds are in range 0x3F (?) TO 0x7E (~)

View Source
const (
	ESC_ERASE_DISPLAY = "\x1b[2J\x1b[0;0H"
)

Variables

View Source
var (
	E_NON_TTY   = errors.New("NON TTY")
	E_TIMED_OUT = errors.New("TERM RESPONSE TIMED OUT")
)

Functions

func GetEnvIdentifiers added in v1.1.0

func GetEnvIdentifiers() map[string]string

func IsItermCapable added in v1.1.0

func IsItermCapable() bool

NOTE: uses $TERM_PROGRAM, which isn't passed through tmux or ssh checks if iterm inline image protocol is supported

func IsKittyCapable added in v1.1.0

func IsKittyCapable() bool

checks if terminal supports kitty image protocols

func IsSixelCapable

func IsSixelCapable() (bool, error)

func IsTmuxScreen

func IsTmuxScreen() bool

func ItermCopyFileInline added in v1.1.0

func ItermCopyFileInline(out io.Writer, in io.Reader, nLen int64) (E error)

func ItermWriteImage added in v1.1.0

func ItermWriteImage(out io.Writer, iImg image.Image) error

Encode image using the iTerm2/WezTerm terminal image protocol:

https://iterm2.com/documentation-images.html

func KittyCopyPNGInline added in v1.1.0

func KittyCopyPNGInline(out io.Writer, in io.Reader, opts KittyImgOpts) error

Serialize PNG image from io.Reader into Kitty terminal in-band format.

func KittyWriteImage added in v1.1.0

func KittyWriteImage(out io.Writer, iImg image.Image, opts KittyImgOpts) error

Serialize image.Image into Kitty terminal in-band format.

func KittyWritePNGLocal added in v1.1.0

func KittyWritePNGLocal(out io.Writer, pngFileName string, opts KittyImgOpts) error

Display local PNG file - pngFileName must be directly accesssible from Kitty instance - pngFileName must be an absolute path

func RequestTermAttributes

func RequestTermAttributes() (sAttrs []int, E error)

func SixelWriteImage added in v1.1.0

func SixelWriteImage(out io.Writer, pI *image.Paletted) (E error)

Encodes a paletted image into DECSIXEL format. Forked & heavily modified from https://github.com/mattn/go-sixel/

Since SIXEL does not support alpha transparency, any alpha > 0 will be treated as fully opaque.

SIXEL is a paletted format. To keep dependencies to a minimum, this only supports paletted images. Palette entries beyond index 255 are ignored. To handle non-paletted images, please pre-dither from the caller.

For more information on DECSIXEL format:

https://www.vt100.net/docs/vt3xx-gp/chapter14.html
https://saitoha.github.io/libsixel/

func TermRequestResponse added in v1.0.3

func TermRequestResponse(fileIN, fileOUT *os.File, sRq string) (sRsp []byte, E error)

Handles request/response terminal control sequences like <ESC>[0c

STDIN & STDOUT are parameterized for special cases. os.Stdin & os.Stdout are usually sufficient.

`sRq` should be the request control sequence to the terminal.

NOTE: only captures up to 1KB of response

NOTE: when println debugging the response, probably want to go-escape it, like:

fmt.Printf("%#v\n", sRsp)

since most responses begin with <ESC>, which the terminal treats as another control sequence rather than text to output.

Types

type KittyImgOpts added in v1.1.0

type KittyImgOpts struct {
	SrcX        uint32 // x=
	SrcY        uint32 // y=
	SrcWidth    uint32 // w=
	SrcHeight   uint32 // h=
	CellOffsetX uint32 // X= (pixel x-offset inside terminal cell)
	CellOffsetY uint32 // Y= (pixel y-offset inside terminal cell)
	DstCols     uint32 // c= (display width in terminal columns)
	DstRows     uint32 // r= (display height in terminal rows)
	ZIndex      int32  // z=
	ImageId     uint32 // i=
	ImageNo     uint32 // I=
	PlacementId uint32 // p=
}

func (KittyImgOpts) ToHeader added in v1.1.0

func (o KittyImgOpts) ToHeader(opts ...string) string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL