如何通过.bat脚本启动wsl里面的emacs

最近在wsl里面安装了emacs,并且装上了Xming启动gui。现在想在windows里面做到类似于安装的软件一样双击某个图标启动,于是想试试先写个bat脚本,但是不是太行:

powershell wsl emacs

这样会直接在命令行内启动emacs,而且无法sudo

powershell wsl ./scrip.sh

echo “passwd” | sudo -S emacs

这样会报错

emacs : standard input is not a tty

要如何才能达到双击启动wsl内的emacs,体验windows原生的感觉?

我的 vbs 脚本

Set ws = CreateObject("Wscript.Shell")
ws.run "wsl DISPLAY=192.168.0.1:0.0 emacs",vbhide
1赞

感谢,指定DISPLAY参数后可以使用wsl执行sh脚本以传入sudo

不过奇怪的是无论在sh脚本内或直接在wsl的参数内,执行

echo “passwd” | sudo -S emacs

都会出现emacs : standard input is not a tty

不过至少能在windows双击运行wsl下程序了,开心

创建一个快捷方式

C:\Windows\System32\wsl.exe DISPLAY=192.168.8.116:0.0 ALTERNATE_EDITOR="" emacsclient -cn

IP 地址根据你自己的来填

好处是可以自动启动emacs daemon

icon可以在这里下载 https://icon-icons.com/download/130620/ICO/128/

2赞

现在在 wsl2 下用 emacs 有什么痛点吗?

不知道为啥xwidget用不了

EAF也用不了

摊手

不过也可能是Arch WSL的问题

还有不能使用系统剪贴板

我用的是Xming,在像Cadence这种显式地具有输入框的情况下是可以用的,但是Emacs中不行 用VcXsrv后可以了。

目前最大的提升可以说是各种响应的速度了,包括find-file,dired等操作,我现在觉得Windows下Emacs的速度简直慢的匪夷所思

我这儿可以用啊

你说的这些在我这都不算痛点啊,有没有什么真正影响的,比如 magit 慢什么的

magit不慢

agenda有点慢 10个文件首次打开7-8s,后续要3s 不过可能file少点的话会快一些

1赞

WSL 2还没用上,WSL上面magit一点也不慢

1赞

嗯嗯,那太好了,准备入坑试试

之前我也对WSL 2充满期待,今早听 @fuxialexander提到EAF不能用,心里一下哇凉哇凉的。

没有用EAF,对我影响不大。你们用 EAF 主要解决哪些痛点?

我是因为linux里xwidget不大好用(老是闪)才想着要不要入坑eaf的

目前还没解决痛点

1赞

我用 VcXsrv, 有个痛点是电脑休眠了或者长久不动,开的 GUI 程序会消失 不知道其他人有这个问题没有

不用开浏览器了啊,平时工作就是在Emacs和浏览器之间切换,有了EAF就没切换的问题了。另外有了浏览器,很多功能都有了。

1赞

这个快捷方式打开会有一个 wsl 的终端窗口在,有办法隐藏掉吗?

Run选minimized

分享一下WSL emacs里默认用Windows里的浏览器打开网页的设置

;; * set browser in wsl
(setq-default sysTypeSpecific system-type) ;; get the system-type value

(cond
 ;; If type is "gnu/linux", override to "wsl/linux" if it's WSL.
 ((eq sysTypeSpecific 'gnu/linux)
  (when (string-match "Linux.*microsoft.*Linux"
                      (shell-command-to-string "uname -a"))

    (setq-default sysTypeSpecific "wsl/linux") ;; for later use.
    (setq
     cmdExeBin "/mnt/c/Windows/System32/cmd.exe"
     cmdExeArgs '("/c" "start" ""))
    (setq
     browse-url-generic-program  cmdExeBin
     browse-url-generic-args     cmdExeArgs
     browse-url-browser-function 'browse-url-generic)

    (defun org-file-apps-wsl (path)
      (shell-command (concat
                      "/mnt/c/Windows/System32/cmd.exe /c start \""
                      (file-relative-name path) "\"")))

    (after! org
      (setq org-file-apps
            `(("pdf" . emacs)
              ("\\.x?html?\\'" . (lambda (file link)
                                   (org-file-apps-wsl file)))
              (auto-mode . emacs)
              (directory . emacs)
              (t . (lambda (file link)
                     (org-file-apps-wsl file)))))))))
4赞