clipboard.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package ansi
  2. import "encoding/base64"
  3. // Clipboard names.
  4. const (
  5. SystemClipboard = 'c'
  6. PrimaryClipboard = 'p'
  7. )
  8. // SetClipboard returns a sequence for manipulating the clipboard.
  9. //
  10. // OSC 52 ; Pc ; Pd ST
  11. // OSC 52 ; Pc ; Pd BEL
  12. //
  13. // Where Pc is the clipboard name and Pd is the base64 encoded data.
  14. // Empty data or invalid base64 data will reset the clipboard.
  15. //
  16. // See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
  17. func SetClipboard(c byte, d string) string {
  18. if d != "" {
  19. d = base64.StdEncoding.EncodeToString([]byte(d))
  20. }
  21. return "\x1b]52;" + string(c) + ";" + d + "\x07"
  22. }
  23. // SetSystemClipboard returns a sequence for setting the system clipboard.
  24. //
  25. // This is equivalent to SetClipboard(SystemClipboard, d).
  26. func SetSystemClipboard(d string) string {
  27. return SetClipboard(SystemClipboard, d)
  28. }
  29. // SetPrimaryClipboard returns a sequence for setting the primary clipboard.
  30. //
  31. // This is equivalent to SetClipboard(PrimaryClipboard, d).
  32. func SetPrimaryClipboard(d string) string {
  33. return SetClipboard(PrimaryClipboard, d)
  34. }
  35. // ResetClipboard returns a sequence for resetting the clipboard.
  36. //
  37. // This is equivalent to SetClipboard(c, "").
  38. //
  39. // See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
  40. func ResetClipboard(c byte) string {
  41. return SetClipboard(c, "")
  42. }
  43. // ResetSystemClipboard is a sequence for resetting the system clipboard.
  44. //
  45. // This is equivalent to ResetClipboard(SystemClipboard).
  46. const ResetSystemClipboard = "\x1b]52;c;\x07"
  47. // ResetPrimaryClipboard is a sequence for resetting the primary clipboard.
  48. //
  49. // This is equivalent to ResetClipboard(PrimaryClipboard).
  50. const ResetPrimaryClipboard = "\x1b]52;p;\x07"
  51. // RequestClipboard returns a sequence for requesting the clipboard.
  52. //
  53. // See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
  54. func RequestClipboard(c byte) string {
  55. return "\x1b]52;" + string(c) + ";?\x07"
  56. }
  57. // RequestSystemClipboard is a sequence for requesting the system clipboard.
  58. //
  59. // This is equivalent to RequestClipboard(SystemClipboard).
  60. const RequestSystemClipboard = "\x1b]52;c;?\x07"
  61. // RequestPrimaryClipboard is a sequence for requesting the primary clipboard.
  62. //
  63. // This is equivalent to RequestClipboard(PrimaryClipboard).
  64. const RequestPrimaryClipboard = "\x1b]52;p;?\x07"