From 62745280cf6311884616cd69fdcce30808077f7f Mon Sep 17 00:00:00 2001 From: Ravi R Kiran Date: Tue, 2 Nov 2021 22:37:47 -0500 Subject: Use OSC 52 to send text to clipboard diff --git a/init.el b/init.el index a07cbe8..3ca8d59 100644 --- a/init.el +++ b/init.el @@ -95,6 +95,7 @@ (define-key local-function-key-map (kbd "") #'delete-forward-char)) (add-hook 'terminal-init-xterm-kitty-hook #'ravi/get-rid-of-xterm-key-translations) (add-hook 'terminal-init-xterm-kitty-hook #'xterm-kitty-add-select-frame-set-input-focus-advice) + (add-hook 'terminal-init-xterm-kitty-hook #'kitty-rc-set-interprogram-cut-function) ;; Don't defer since we will use xterm-kitty-make-binding-sequence elsewhere :ensure nil) diff --git a/lisp/kitty-remote-control.el b/lisp/kitty-remote-control.el index a5c988a..6fe7d31 100644 --- a/lisp/kitty-remote-control.el +++ b/lisp/kitty-remote-control.el @@ -84,5 +84,32 @@ `(("type" . "background") ("args" . ,cmd)))) +;; Clipboard handling: could be generalized +(defvar kitty-rc-clipboard-max-length 10000 + "Maximum length of characters copied to clipboard") +(defun kitty-rc-copy-to-clipboard (string &optional append use-primary) + "Copy STRING to clipboard" + (if-let* ((out-len (+ (* (length string) 3) 2)) + (allowed (< out-len kitty-rc-clipboard-max-length)) + (out-str (base64-encode-string (encode-coding-string string 'binary))) + (pfx (concat "\e]52;" (if use-primary "p" "c") ";")) + (sfx "\e\\")) + (progn + (unless append + (send-string-to-terminal (concat pfx "!" sfx))) + (send-string-to-terminal (concat pfx out-str sfx)) + (sit-for 0.1)) + (message "Selection too long to send to terminal"))) + +(defun kitty-rc-interprogram-cut-function (text) + (when select-enable-primary + (kitty-rc-copy-to-clipboard text nil t)) + (when select-enable-clipboard + (kitty-rc-copy-to-clipboard text nil nil))) + +(defun kitty-rc-set-interprogram-cut-function () + (interactive) + (setq interprogram-cut-function #'kitty-rc-interprogram-cut-function)) + (provide 'kitty-remote-control) ;;; kitty-remote-control.el ends here -- cgit v0.10.1