WSL上でEmacs使ってるんで、pure Waylandのほうが性能よいのかなあ?と思ってnixでemacs30-pgtkを入れて動かしてみている。まあ、そこそこX用と遜色ないくらいに動く。たまに落ちるけど。
問題点としてすぐに気付くのはWindows側との相互のコピペができないこと。 で、これはEmacsWikiのCopyAndPasteに対応策が書いてある。
;; credit: yorickvP on Github
(setq wl-copy-process nil)
(defun wl-copy (text)
(setq wl-copy-process (make-process :name "wl-copy"
:buffer nil
:command '("wl-copy" "-f" "-n")
:connection-type 'pipe
:noquery t))
(process-send-string wl-copy-process text)
(process-send-eof wl-copy-process))
(defun wl-paste ()
(if (and wl-copy-process (process-live-p wl-copy-process))
nil ; should return nil if we're the current paste owner
(shell-command-to-string "wl-paste -n | tr -d \r")))
(setq interprogram-cut-function 'wl-copy)
(setq interprogram-paste-function 'wl-paste)
これでコピペができるようになって助かった……という話だけならわざわざこんなarticleは書かない。
これだとTRAMPでssh先のファイルを編集している時はうまく動かないのである。
shell-commandはfile-name-handler-alistをチェックして現在対象のバッファのそこにヒットするなら、そこにあるhandler経由でshell-commandを実行する。grepとかはfindとかはリモートで実行しないとダメだから。
それはわかる、わかるが、でもwl-pasteがremoteが実行されても何も得られないのである。
問題に気付いてしまえば対策は簡単で↓とでもすればよい。
(let ((default-directory (getenv "TEMP")))
(shell-command-to-string "wl-paste -n | tr -d \r"))