还是要借助msys2编译,原repo是 https://github.com/msys2-unofficial/MSYS2-packages -其中一些
PKGBUILD里面的source过时了,我fork了一下然后修改到最新 https://github.com/pRot0ta1p/MSYS2-packages (已经merge了)
编译步骤可以参考 Installation (Mu4e 1.8.11 user manual) ,基本上都是makepkg -s然后pacman -U,编译时注意使用msys shell,不是用mingw32或者mingw64 shell
有一个坑点,编译mu的时候会安装msys emacs(就是msys2 里面那个非gui的emacs)作为依赖,然后mu4e的el文件会安装在/usr/share/emacs/site-lisp/mu4e下,mingw64的应用比如你用msys2编译的emacs是看不到这个文件夹的,需要手动复制到/mingw64/share/emacs/site-lisp/mu4e
第二个坑点是这样编译的mu4e不认window的路径,只认msys格式的路径 ,还好有个开箱即用的解决办法: EmacsWiki: cygwin-mount.el
暂时还没整明白怎能让mbsync定时运行,还有windows上怎么弹出新邮件提醒,目前似乎 GitHub - gkowzan/alert-toast: Windows 10 toast notifications for Emacs 配合mu4e-alert应该可行。。。有没有windows上用过mbsync或者offlineimap的大佬出出主意 ?
PS:
自己折腾了一个用powershell和windows task scheduler实现的方法 用一个vbs脚本调用powershell脚本去调用bash脚本(
三个脚本文件,syncmail.vbs, syncmail.ps1, syncmail.sh假设放在同一个文件夹里面 ~/exec
,msys2的bash路径假设为C:\scoop\apps\msys2\current\usr\bin\bash.exe
,powershell需要安装burnttoast
syncmail.ps1:
$unread = 0
$old_unread = 0
while ($True) {
$unread = C:\scoop\apps\msys2\current\usr\bin\bash.exe -c -l '~/exec/syncmail.sh'
if(($unread -ge 1) -AND ($unread -ne $old_unread)) {
New-BurntToastNotification -Text "You have $unread new mail(s)."
}
$old_unread = $unread
Start-Sleep -Seconds 300 #每300秒同步一次
}
syncmail.sh
#!/usr/bin/env bash
mbsync -a --quiet
if pgrep -f 'mu server' > /dev/null; then
emacsclient -ue '(mu4e-update-index)'
else
XAPIAN_CJK_NGRAM=yes mu index --quiet
fi
unread=$(mu find flag:unread AND '(maildir:/INBOX/ OR maildir:/inbox/ OR maildir:/Inbox/)' AND NOT flag:trashed 2>/dev/null | wc -l)
printf "%s" "$unread"
syncmail.vbs
CreateObject("WScript.Shell").Run "powershell -File syncmail.ps1",0
自动同步email的方法:把syncmail.vbs创建快捷方式到shell:startup
文件夹(windows的“启动”文件夹),这样开机启动就会自动同步了。之前用window task manager的触发机制很迷。。实际体验各种莫名其妙停止同步。。。
发邮件的坑
msmtp似乎用不了,因为msys2编译出的 mu4e不识别window的路径格式,发信时msmtp无法正确的找到email文件位置。用emacs内置的包smtpmail可以代替。
windows task scheduler 里面action选择Start a program
,然后program里面填powershell,Add a argument里面填 -File E:\home\exec\syncmail.ps1 -WindowStyle Hidden
。Trigger里面选默认的one time run,然后每5分钟重复就可以了。