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
Senior Principal Scientist

My research interests include causal inference, Bayesian networks, causal discovery, machine learning.