diff --git a/docs/protocol-extensions.rst b/docs/protocol-extensions.rst index 5ea5c611b..2e95ebc65 100644 --- a/docs/protocol-extensions.rst +++ b/docs/protocol-extensions.rst @@ -219,3 +219,7 @@ first, for example:: ]52;c;!\ Here ``!`` is not valid base64 encoded text, so it clears the clipboard. + +In case you're using software that can't be easily adapted to this +protocol extension, it can be disabled by specifying ``no-append`` to the +:opt:`clipboard_control` setting. diff --git a/kitty/config_data.py b/kitty/config_data.py index 833bc4c02..f5d69a381 100644 --- a/kitty/config_data.py +++ b/kitty/config_data.py @@ -798,8 +798,10 @@ def startup_session(x): o('clipboard_control', 'write-clipboard write-primary', option_type=lambda x: frozenset(x.lower().split()), long_text=_(''' Allow programs running in kitty to read and write from the clipboard. You can control exactly which actions are allowed. The set of possible actions is: -write-clipboard read-clipboard write-primary read-primary -The default is to allow writing to the clipboard and primary selection. Note +write-clipboard read-clipboard write-primary read-primary. You can +additionally specify no-append to disable kitty's protocol extension +for clipboard concatenation. The default is to allow writing to the +clipboard and primary selection with concatenation enabled. Note that enabling the read functionality is a security risk as it means that any program, even one running on a remote server via SSH can read your clipboard. ''')) diff --git a/kitty/window.py b/kitty/window.py index e6b0134ce..3b3b64cd6 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -429,7 +429,8 @@ def clipboard_control(self, data): def write(key, func): if text: - if len(self.clipboard_control_buffers[key]) > 1024*1024: + if ('no-append' in self.opts.clipboard_control or + len(self.clipboard_control_buffers[key]) > 1024*1024): self.clipboard_control_buffers[key] = '' self.clipboard_control_buffers[key] += text else: