分享:如何更加便捷地打开emacs in WSL

最近看到一些关于在wsl中使用emacs的帖子,于是想分享一下我的做法。

准备工作

参考

其中输入法方面我用了pyimgreatdict

创建一个贴近原生的快捷方式

创建快捷方式

首先我用wsluscsudo apt install ubuntu-wsl)在桌面上创建了一个快捷方式。wslusc会在你的用户文件夹中创建一个名为wslu的文件夹,其中包含了两个文件,分别是脚本runHidden.vbs与图标wsl.ico

修改快捷方式目标路径

为了让使用体验更接近原生,我将快捷方式的目标改为C:\Windows\System32\wscript.exe C:\\Users\\{用户名}\wslu\runHidden.vbs D:\bin\wsl.bat。可以把{用户名}改成你的用户名,将D:\bin\wsl.bat换成存放脚本的路径。

其中wsl.bat的内容为

@echo off
if "%1"=="" (
    ubuntu.exe run "cd ~; . /usr/share/wslu/wsl-integration.sh;  emacs"
) else (
    ubuntu.exe run "cd ~; . /usr/share/wslu/wsl-integration.sh;  emacs $(wslpath '%~f1')"
)

这样设置以后,你就可以双击快捷方式打开emacs,或者也可以将文件拖动到图标上打开。

其他工作

为了美观,我将快捷方式的图标换成了 Spacemace 的icon,并将快捷方式添加到了开始菜单。 image

为了方便打开emacs,建议将 VcxSrv(我用的是x410,不过类似)添加到开机启动项中。

应该还可以做到将使用emacs打开文件在emacs中打开目录添加到右键菜单,不过上面的做法对我来说足够使用了。

7赞

“解压WSL-Lunch-Gui”, 怎么操作?

我没有用wsl-terminal…直接用windows terminal了…

补充一下如何启动emacs daemon,这个方法来自@fuxialexander,感谢

@echo off
if %1=="" (
    powershell wsl "DISPLAY=127.0.0.1:0.0 ALTERNATE_EDITOR=\"\" /opt/emacs/bin/emacsclient -cn"
) else (
    powershell "wsl DISPLAY=127.0.0.1:0.0 ALTERNATE_EDITOR=\"\" /opt/emacs/bin/emacsclient -cn ""`$(wslpath '%~f1')"""
)

这个bat脚本可以接收一个文件参数,然后外面再套个vbs脚本,最后写进注册表里面就能右键快速启动emacs编辑文件。

vbs脚本如下

set ws=WScript.CreateObject("WScript.Shell")
set args=WScript.Arguments
ws.Run "D:\emacs_wsl\emacs_wsl_reg.bat """ + args(0) + """",0

现在的一个痛点是能否在一个client打开的情况下,如果再右键用emacs编辑,则将新打开的文件在原来的那个client中显示,类似于浏览器通过链接打开多个网页会显示在一个框架下的不同标签页。

2赞

求问,用wslusc在桌面创建快捷方式需要哪些步骤? 另外 “C:\Users\{用户名}\wslu\runHidden.vbs” 这个windows下的路径是怎么来的呢?

这样创建出来的emacs快捷方式,只能是cmd版本的?可以有办法创建ui版本的emacs快捷方式么?

这个问题懂了,,,

我用wsl 里的emacs 只要调用了counsel-git ,emacs的gui就会莫名其妙的抖动一下,是什么问题呢? 更新:是mobaXTerm的问题,换 VcXsrv 就好了