forked from toolshed/abra
		
	go-osc52
A Go library to work with the ANSI OSC52 terminal sequence.
Usage
You can use this small library to construct an ANSI OSC52 sequence suitable for your terminal.
Example
import (
  "os"
  "fmt"
  "github.com/aymanbagabas/go-osc52/v2"
)
func main() {
  s := "Hello World!"
  // Copy `s` to system clipboard
  osc52.New(s).WriteTo(os.Stderr)
  // Copy `s` to primary clipboard (X11)
  osc52.New(s).Primary().WriteTo(os.Stderr)
  // Query the clipboard
  osc52.Query().WriteTo(os.Stderr)
  // Clear system clipboard
  osc52.Clear().WriteTo(os.Stderr)
  // Use the fmt.Stringer interface to copy `s` to system clipboard
  fmt.Fprint(os.Stderr, osc52.New(s))
  // Or to primary clipboard
  fmt.Fprint(os.Stderr, osc52.New(s).Primary())
}
SSH Example
You can use this over SSH using gliderlabs/ssh for instance:
var sshSession ssh.Session
seq := osc52.New("Hello awesome!")
// Check if term is screen or tmux
pty, _, _ := s.Pty()
if pty.Term == "screen" {
  seq = seq.Screen()
} else if isTmux {
  seq = seq.Tmux()
}
seq.WriteTo(sshSession.Stderr())
Tmux
Make sure you have set-clipboard on in your config, otherwise, tmux won't
allow your application to access the clipboard 1 .
Using the tmux option, osc52.TmuxMode or osc52.New(...).Tmux(), wraps the
OSC52 sequence in a special tmux DCS sequence and pass it to the outer
terminal. This requires allow-passthrough on in your config.
allow-passthrough is no longer enabled by default
since tmux 3.3a 2 .
Credits
- vim-oscyank this is heavily inspired by vim-oscyank.