diff --git a/kitty/clipboard.py b/kitty/clipboard.py index ab778b973..a8ed93470 100644 --- a/kitty/clipboard.py +++ b/kitty/clipboard.py @@ -275,17 +275,10 @@ class WriteRequest: if not self.currently_writing_mime: self.mime_map[mime] = MimePos(self.tempfile.tell(), -1) self.currently_writing_mime = mime - if len(self.current_leftover_bytes) > 0: - extra = 4 - len(self.current_leftover_bytes) - if len(data) >= extra: - self.write_base64_data(memoryview(bytes(self.current_leftover_bytes) + data[:extra])) - self.current_leftover_bytes = memoryview(b'') - data = memoryview(data)[extra:] - if len(data) > 0: - self.write_base64_data(data) - else: - self.current_leftover_bytes = memoryview(bytes(self.current_leftover_bytes) + data) - else: + + def write_saving_leftover_bytes(data: bytes) -> None: + if len(data) == 0: + return extra = len(data) % 4 if extra > 0: mv = memoryview(data) @@ -296,6 +289,18 @@ class WriteRequest: else: self.write_base64_data(data) + if len(self.current_leftover_bytes) > 0: + extra = 4 - len(self.current_leftover_bytes) + if len(data) >= extra: + self.write_base64_data(memoryview(bytes(self.current_leftover_bytes) + data[:extra])) + self.current_leftover_bytes = memoryview(b'') + data = memoryview(data)[extra:] + write_saving_leftover_bytes(data) + else: + self.current_leftover_bytes = memoryview(bytes(self.current_leftover_bytes) + data) + else: + write_saving_leftover_bytes(data) + def flush_base64_data(self) -> None: if self.currently_writing_mime: b = self.current_leftover_bytes