Finish porting clipboard kitten to Go

This commit is contained in:
Kovid Goyal
2022-11-26 15:15:30 +05:30
parent 63a08dc6cc
commit a721ffeb7d
5 changed files with 245 additions and 5 deletions

View File

@@ -20,6 +20,16 @@ type ScreenSize struct {
type IdType uint64
type TimerCallback func(timer_id IdType) error
type EscapeCodeType int
const (
CSI EscapeCodeType = iota
DCS
OSC
APC
SOS
PM
)
type timer struct {
interval time.Duration
@@ -47,6 +57,8 @@ type Loop struct {
pending_writes []*write_msg
on_SIGTSTP func() error
// Send strings to this channel to queue writes in a thread safe way
// Callbacks
// Called when the terminal has been fully setup. Any string returned is sent to
@@ -76,6 +88,9 @@ type Loop struct {
// Called when any input from tty is received
OnReceivedData func(data []byte) error
// Called when an escape code is received that is not handled by any other handler
OnEscapeCode func(EscapeCodeType, []byte) error
// Called when resuming from a SIGTSTP or Ctrl-z
OnResumeFromStop func() error

View File

@@ -72,6 +72,9 @@ func (self *Loop) handle_csi(raw []byte) error {
if ke != nil {
return self.handle_key_event(ke)
}
if self.OnEscapeCode != nil {
return self.OnEscapeCode(CSI, raw)
}
return nil
}
@@ -100,6 +103,9 @@ func (self *Loop) handle_key_event(ev *KeyEvent) error {
}
func (self *Loop) handle_osc(raw []byte) error {
if self.OnEscapeCode != nil {
return self.OnEscapeCode(OSC, raw)
}
return nil
}
@@ -107,18 +113,30 @@ func (self *Loop) handle_dcs(raw []byte) error {
if self.OnRCResponse != nil && bytes.HasPrefix(raw, []byte("@kitty-cmd")) {
return self.OnRCResponse(raw[len("@kitty-cmd"):])
}
if self.OnEscapeCode != nil {
return self.OnEscapeCode(DCS, raw)
}
return nil
}
func (self *Loop) handle_apc(raw []byte) error {
if self.OnEscapeCode != nil {
return self.OnEscapeCode(APC, raw)
}
return nil
}
func (self *Loop) handle_sos(raw []byte) error {
if self.OnEscapeCode != nil {
return self.OnEscapeCode(SOS, raw)
}
return nil
}
func (self *Loop) handle_pm(raw []byte) error {
if self.OnEscapeCode != nil {
return self.OnEscapeCode(PM, raw)
}
return nil
}