wsl下如何从Emacs内调用Windows的程序

在wsl里面弄好了Emacs,但是不想再装一遍各种外部程序(pdf阅读器之类的),还好微软早有准备,能在wsl下直接调用windows的.exe文件https://docs.microsoft.com/en-us/windows/wsl/interop。但在Emacs里面却栽了,我的AucTeX的配置里查看编译后的pdf是这样写的

(setq TeX-view-program-list
 '(("SumatraPDF" "/mnt/d/Program\ Files/SumatraPDF/SumatraPDF.exe %o")))
(setq TeX-view-program-selection '((output-pdf "SumatraPDF")))

C-c C-v后Emacs没有报错,但也没有启动pdf,可能Emacs给了SumatraPDF一个在wsl里面的文件夹地址参数,导致它读不出来?但实际上后台却连SumatraPDF的影子都没有。各位道友能否救救我。

大概是接收文件的路径不对。

%o传进去的是WSL下的路径,但是exe接受的应该是需要Windows下的路径,需要转换下。

下面这是我以前写的供Acrobat用的脚本:

/mnt/c/Program\ Files\ \(x86\)/Adobe/Acrobat\ DC/Acrobat/Acrobat.exe $(wslpath -w "$(realpath "$1")" | sed 's|\\|\\\\|g')
1 个赞

哈哈,这里有个现成的,用win的默认程序打开文件

1 个赞

cmd.exe /c start filename 是用windows默认软件打开

用这个就行了吧

1 个赞