mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-19 06:54:58 +02:00
Work on refactoring send kitten to fix various issues
This commit is contained in:
@@ -83,7 +83,7 @@ type Loop struct {
|
||||
OnResize func(old_size ScreenSize, new_size ScreenSize) error
|
||||
|
||||
// Called when writing is done
|
||||
OnWriteComplete func(msg_id IdType) error
|
||||
OnWriteComplete func(msg_id IdType, has_pending_writes bool) error
|
||||
|
||||
// Called when a response to an rc command is received
|
||||
OnRCResponse func(data []byte) error
|
||||
|
||||
@@ -285,6 +285,7 @@ func (self *Loop) run() (err error) {
|
||||
// queueing and startup of writer thread and also as a performance
|
||||
// optimization to avoid copying unnecessarily to pending_writes
|
||||
self.tty_write_channel = make(chan write_msg, 512)
|
||||
self.write_msg_id_counter = 0
|
||||
write_done_channel := make(chan IdType)
|
||||
self.wakeup_channel = make(chan byte, 256)
|
||||
self.pending_writes = make([]write_msg, 0, 256)
|
||||
@@ -452,7 +453,7 @@ func (self *Loop) run() (err error) {
|
||||
case msg_id := <-write_done_channel:
|
||||
self.flush_pending_writes(self.tty_write_channel)
|
||||
if self.OnWriteComplete != nil {
|
||||
err = self.OnWriteComplete(msg_id)
|
||||
err = self.OnWriteComplete(msg_id, msg_id < self.write_msg_id_counter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -75,15 +75,15 @@ func (self *Loop) wait_for_write_to_complete(sentinel IdType, tty_write_channel
|
||||
case tty_write_channel <- self.pending_writes[0]:
|
||||
self.pending_writes = self.pending_writes[1:]
|
||||
case write_id, more := <-write_done_channel:
|
||||
if write_id == sentinel {
|
||||
return nil
|
||||
}
|
||||
if self.OnWriteComplete != nil {
|
||||
err := self.OnWriteComplete(write_id)
|
||||
err := self.OnWriteComplete(write_id, write_id < self.write_msg_id_counter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if write_id == sentinel {
|
||||
return nil
|
||||
}
|
||||
if !more {
|
||||
return fmt.Errorf("The write_done_channel was unexpectedly closed")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user