WSL2 & emacs 到底还有多少坑?

  • 判断是否是 WSL 环境

最近遇到一个问题是家里的笔记本字体比较小些,需要字体大小和在公司的不一样。这就需要判断是否在 WSL 环境下了。

下面是我使用的方法:

(defconst sys/linuxp
  (and (eq system-type 'gnu/linux)
       (not (string-match "-[Mm]icrosoft" operating-system-release)))
  "Are we running on a GNU/Linux system?")

(defconst sys/WSL
  (and (eq system-type 'gnu/linux)
       (string-match "-[Mm]icrosoft" operating-system-release))
  "Are we running on a GNU/Linux system?")

(defconst sys/win32p
  (eq system-type 'windows-nt)
  "Are we running on a WinTel system?")

;; 使用的时候
(cond
 (sys/linuxp (set-face-attribute 'default nil :height 160))
 (sys/win32p (set-face-attribute 'default nil :height 140))
 (sys/WSL (set-face-attribute 'default nil :height 140)))

借鉴了下 @seagle0128 大佬的配置 :rofl: :rofl:

3 个赞
(if (string= (system-name) "DESKTOP-DMGKG0I");;PC at work
    (progn (set-font "Sarasa Term SC" "Sarasa Term SC" 24 24)
  (setq desktop-dirname "~/.emacs.d/DMGKG0I")
  (setq desktop-path '("~/.emacs.d/DMGKG0I"))))

(if (string= (system-name) "DESKTOP-439OGGP");;Mini PC
    (progn (set-font "Sarasa Term SC" "Sarasa Term SC" 40 40)
  (setq desktop-dirname "~/.emacs.d/439OGGP")
  (setq desktop-path '("~/.emacs.d/439OGGP"))))

对于多设备,我是通过获取每个系统的system-name来判断的,进eshell输入(system-name)即可。

不过我发现在wsl2里面获取的system-name和宿主Windows上开GUI emacs获取到的system-name完全一致,幸好没人会同时使用wsl和windows的emacs吧。

我就是那个同时使用wsl和windows emacs的人。。。

1 个赞

有什么原因无法放弃Windows的emacs吗

工作上要用的Azure cosmosdb 模拟器只有Windows下面有,所以自然就用 wsl2 + emacs 了。一些痛点习惯就好了。Windows 下面最大的好处是可以玩PC游戏了 :joy:

xserver在windows上对于鼠标的拖拽文件之类的问题一直解决不了。我主要在windows上用emacs是作为笔记的记录,拖拽文件之类的是常用的功能 所以没办法一直还得用windows的。

我也是wsl emacs和windows emacs都在用,因为windows emacs的shell-mode有些命令运行不了,于是就用了wsl终端emacs的shell-mode。除这个功能以外就都是用的windows gui emacs了

wsl感觉完全没有msys2下面的emacs好用. 自从在msys2下配好了之后, 我就再也没有折腾过windows上的环境了…

  • 坑1: 中文输入法没法使用系统自带,要使用emacs-rime才行
  • 坑2: 有时调用windows的原生命令遇到问题,需要配置,具体怎么搞我还没弄清楚
  • 坑3:没法使用org-download包中的org-download-screenshot 截屏,org下快速塞图片不行
  • 坑4: evil-mode的用户,不小心按了shift键想切换中文后,再按 esc键 会捉急,:->
  • 坑5:使用org-pomodoro的小伙伴们,当计时结束后你没在emacs里,无法提醒
3 个赞

我之前试过在wsl2里面安装gentoo,发现无法在shell里调用clipboard.exe,最后才知道要手动添加Windows的路径到系统PATH里

谢谢提醒,我这里估计是使用了zsh的问题: $PATH 里明明有 :/mnt/d/Program Files/MiKTex/miktex/bin/x64/: 硬是调用不了xelatex.exe Program 和 Files中间多了个空格,需要加个转义\才行 /mnt/d/Program\ Files/MiKTex/miktex/bin/x64/xelatex.exe

大佬是怎么弄msys2上的环境的分享下,我也想搞一个

以下是我自己配置的步骤, 你可以参考以下, 还有些相关的资料:

windows上的前置配置

  1. 安装msys2: https://www.msys2.org/

  2. 修改软件源:

    # /etc/pacman.d/mirrorlist.mingw64
    Server = https://mirrors.ustc.edu.cn/msys2/mingw/x86_64
    
    # /etc/pacman.d/mirrorlist.mingw32
    Server = https://mirrors.ustc.edu.cn/msys2/mingw/i686
    
    # /etc/pacman.d/mirrorlist.msys
    Server = https://mirrors.ustc.edu.cn/msys2/msys/$arch
    

    参考: https://chriszheng.science/2017/07/16/Best-practice-of-Emacs-on-MS-Windows/
    https://emacs-china.org/t/topic/2600/16

  3. 修改git的源,安装windows版本的git:
    /etc/pacman.conf 中, 加入

    [git-for-windows]
    # SigLevel = Optional TrustedOnly
    SigLevel = Never
    Server = https://dl.bintray.com/git-for-windows/pacman/$arch
    

    原理不明,参考如上。

  4. 运行:

    pacman -Syu
    

    然后重开terminal,再次运行:

    pacman -Su
    
  5. 安装 make:

    pacman -S make
    
  6. 安装openssh(是为了使用ssh), 并配置目录让ssh能找到key, 即配置windows的环境变量 HOME 为 你的home(比如 c:/msys64/home/name).

  7. 做git相关的配置:

    git config --global user.email [email protected]
    git config --global user.name name
    
  8. 安装Source Code Pro:
    https://fonts.google.com/specimen/Source+Code+Pro?selection.family=Source+Code+Pro

  9. 将caps lock改为ctrl,使用 sharpkeys.
    sharpkeys 安装地址: https://github.com/randyrants/sharpkeys

  10. 安装emacs:

    pacman -S mingw-w64-x86_64-emacs
    
  11. 使用 ssh-keygen 产生key, 然后将 public key 上传到github中。
    接着clone emacs的配置:

    git clone [email protected]:lczch/rice-wine.git
    
  12. 创建 .emacs 文件并写入:

    (load-file "~/rice-wine/init.el")
    
  13. .bashrc 中设置常用的alias, PATH和一些emacs相关的环境变量:

    # my .bashrc
    if [ -f "$HOME/rice-wine/bash/.bashrc" ] ; then
        echo "Load $HOME/rice-wine/bash/.bahsrc."
        source "$HOME/rice-wine/bash/.bashrc"
    fi
    

补充资料:Windows 上面 Emacs 简易入门最佳实践

另外, 如果要给msys2配置一个比较好看和方便的界面和shell, 参考这个: GitHub - seagle0128/dotfiles: Centaur Dotfiles - Full and clean configurations for development environment on GNU Linux, macOS and Cygwin, 使用起来也是傻瓜操作. 虽然zsh有点慢, 但熟悉之后你就可以自己搞了.

使用msys2中的emacs的最大好处是emacs认识msys2提供的linux-like的目录结构, 而且同时也能识别window的目录, 所以就可以通过PATH把散落在各种地方的可执行文件整合到terminal中, 通过emacs来调用了.

2 个赞

好的 非常感谢回复

性能能干活嘛。。。?

我写程序写论文没觉得和Linux下有什么差别.

可以,用上 daemon 后,性能和 Linux 下差不多,除了 git 有点慢

不过我基本上记载命令行力用 git,所以对我影响不太大

谢谢分享,请问这样安装后 用doom的配置有什么问题吗?

我没用过doom, 所以不知道有什么具体问题.

但我好像看到过论坛里有人发帖, 在windows里用doom的, 应该没问题. 你可以参考这个: 零秒精通Emacs之Windows10上畅行无碍地使用emacs的11步骤

这里就是用的doom.

嗯,谢谢,去看看