WSL's Emacs and windows clipboard

Windows 11 now supports built-in linux GUI applications so I started using emacs thru WSL2 (see emacs installation). While it works quite well (there is even GPU support now) there are some issues with the windows clipboard. Specifically, while I can copy things from the windows clipboard to emacs (most of the time, more about this at the end) I could not copy things from emacs to window.

Most of the solutions online I have seen involve creating a new function for sending marked text to the windows clipboard using the “clip.exe” program (see, for example, wsl copy and paste). However, I wanted to automatically updated the windows clipboard whenever the kill-ring is updated. So I came up with the following solution

(defun wsl-copy-clip(&rest _args)
  (setq mytemp (make-temp-file "winclip"))
  (write-region
   (current-kill 0 t)
   nil
   mytemp
   )
  (shell-command (concat "clip.exe<" mytemp ))
  (delete-file mytemp)
   )
(advice-add 'kill-new :after #'wsl-copy-clip)

The wsl-copy-clip function copies the latest entry on the kill ring to the windows clipboard. I add this function as an advice (see advice) to the kill-new function which appears to be called by most kill-ring related functions (M-w,C-w, C-d, M-d, etc). Now anytime the kill-ring gets updated in emacs the windows clipboards get updated as well.

There are a couple of things that I would like to mention:

  • I’m creating a tmp file with the top of the kill-ring so I can pass it to clip.exe and then removing.
  • There could be functions that update the kill-ring without the kill-new function. If that is the case the windows clipboard will not get updated. If anyone knows of any other way to run a function whenever the kill-ring gets updated I would love to know.
  • Finally, while most of the time I can copy text from windows to emacs, I noticed that sometimes it stops working. Not sure exactly when this happens so it is difficult to replicate and fix.
Fred Gruber
Fred Gruber
Principal Scientist

My research interests include T-cell binding prediction, Neural Networks, causal inference, Bayesian networks, causal discovery, machine learning.