※2021-11-28追記あり。末尾参照
Windows 10上のWSL(1)のUbuntu上でEmacsを使っているが、WindowsでCtrl_Cでコピペしたテキストを、EmacsにC-yでペーストしようとしたら「Kill ring is empty」と怒られるようになった。
昨日まで(たぶん)快調に使えてたのに、ある日急に使えなくなった。
(もっと前から使えてはいなかったのかもしれないけど、分からなくなっている)
いぜんも同じ症状になって、そのときは~/.emacs.d/init.elに
(setq x-select-enable-primary t)
というのをどこかで調べて追加すると直ったのだが(原理も分からないし、どこで調べたのかも分からなくなっている。スミマセン)今日また同じ症状になった。
分からないなりに調べて、以下のブログに行き当たった。
以下のコードを~/.emacs.d/init.elに追加。
(defun wsl-paste ()
(interactive)
(insert (shell-command-to-string "powershell.exe -command 'Get-Clipboard'")))
(global-set-key (kbd "C-c C-v") 'wsl-paste)
これで、C-cC-vでWindows 10のクリップボードからペーストできるようになった。
こっちも原理は分からないが、動いているので助かる。
ひどい内容だが今シュラバなのでこれにて失礼。
環境:
Windowsのバージョン (winver):
Windows 10 Pro バージョン1903 (OSビルド 18362,1139)
Emacs (M-x emacs-version)
GNU Emacs 26.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.13) of 2019-12-25
Linuxのバージョン (uname -a)
Linux DESKTOP-TB4M341 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
※2021-11-28追記
その後、WSL2に変えたりしたら「どういうわけか・・・」WindowsクリップボードとEmacs Kill Ringの共有ができていた(EmacsからM-wでコピーができ、EmacsへC-yでペーストできる状態)のだが、先週あたりから「どういうわけか・・・」またできなくなったので、上記のelispにお世話になることになった。
それで、EmacsからWSLへのコピペが上記だけではできないのだが、こちらはこれで解決した。
(defun wsl-copy (start end)
(interactive "r")
(shell-command-on-region start end "clip.exe"))
(global-set-key (kbd "C-c c") 'wsl-copy)
なお、「powershell.exe -command 'Get-Clipboard'」がたまに(不規則に)エラーを返すことがあるが、その場合は
で紹介されているwin32yank.exeを使ってもいい。
その場合、「powershell.exe -command 'Get-Clipboard'」を呼んでいる行は以下のようになる。
(insert (shell-command-to-string "win32yank.exe -o")))
同じように、clip.exeの代わりに
(shell-command-on-region start end "win32yank.exe -i"))
でもいいっぽい。
(終わり)