【笔记】Emacs 26.2在Windows 10上卡顿及Markdown-mode无法正常工作的解决
个人笔记,如有转载,请注明出处。
——by realasking
昨天自己的Emacs
环境能正常工作了,今天干活的时候想做一些笔记,不想老是切换到Typora
,也不用同步到joplin
,就保存在本地,于是就安装了markdown-mode
。但是markdown-mode
安装后,按官方说明在init.el
中添加了相关的命令后,发现报找不到markdown
命令,错误代码1,于是先尝试安装了perl(strawberry)
,然后在msys2
里安装markdown
,并将该脚本拷贝到perl
的site/bin
下,将markdown
命令指向用perl
来解释的markdown
,这倒是能用,但是功能实在太弱了,遂放弃此方案。于是决定使用pandoc
。
pandoc
非常强大,安装.msi
后,自动添加了环境变量,找了两个复杂一点的md
文件,用它解析一切正常,但是设置markdown
命令时发现,pandoc
的路径不能有空格,不然找不到。
于是卸载重装到D:\Tools\Pandoc
下。但是重启Emacs
服务器和客户端后,预览时报错,错误代码92
,网上查询无果,灵机一动,删除掉其中的中文内容后再预览,结果一切正常,遂怀疑是编码问题。
找了一个utf-8编码
的中文.md
文件,用emacs
打开,自动进入md
模式,文件中的中文全部显示为了问号,预览仍然报错92
,而utf-8编码
的中文.txt文件
用emacs
打开一切正常,确认属于编码问题。
于是按网上所传,添加如下内容到init.el
中:
(set-language-environment 'UTF-8)
(set-locale-environment UTF-8)
(set-default-coding-systems 'utf-8)
重新打开emacs
,发生了严重的卡顿,又按https://www.cnblogs.com/eat-and-die/p/10309681.html 所述,安装相应字体并添加如下语句:
(defun set-font (english chinese english-size chinese-size)
(set-face-attribute 'default nil :font (format %s:pixelsize=%d english english-size))
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font) charset (font-spec :family chinese :size chinese-size))))
(set-font Dejavu Sans Mono WenQuanYi Zen Hei Mono 14 14)
重启emacs
,markdown-mode
确实正常了,但是原来设置的屏幕最大化失效,屏幕背景色设置失效,字体也没有显示为设置的,而是提示了tty字体缺失
。
经过搜索,根据aqing1987的解决方案,
将前述诸行全部去除,转而在以下几行
(require unicad)
(add-to-list default-frame-alist ;(fullscreen . maximized))
之后添加了如下内容:
(defun s-font()
(interactive)
;; font config for org table showing.
(set-default-font Consolas-16)
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset
(font-spec :family 微软雅黑 :size 16)))
(setq face-font-rescale-alist '((Consolas . 1.0) (微软雅黑 . 1.23)))
)
(add-to-list 'after-make-frame-functions
(lambda (new-frame)
(select-frame new-frame)
(if window-system
(s-font))))
(if window-system
(s-font))
这么修改后编码和emacsclientw
都还是不正常,然后还要在
(custom-set-variables
后另起一行添加:
(current-language-environment UTF-8)
并在
(custom-set-faces
后另起一行添加:
(default ((t (:family #(微软雅黑 0 4 (charset utf-8)) :foundry outline :slant normal :weight normal :height 143 :width normal))))
保存之后重启Emacs,Markdown预览无法使用和卡顿的问题就都解决了。
但是按照这种方法配置的Emacs
也有问题,在中文版的Windows 10
系统下,这么配置后,此软件将无法再打开含有中文的目录名下的文件,因而也不是理想的解决办法。经过一番折腾,目前得到的自觉最为合理的方法如下: ### 安装iconv 1. 安装msys2
我将其安装在D:\\msys64
下 2. 安装iconv
启动msys2
的控制台,然后执行:
好了,现在一切都完美了。bash pacman -S mingw-w64-x86_64-iconv
` 3. 创建
pandoc.bat文件 在
msys2的
/usr/bin目录下创建
pandoc.bat文件,其内容为:
`bash @echo off iconv.exe -t utf-8 %1 |pandoc.exe |iconv.exe -f utf-8
` 这行脚本修改自[pandoc手册](https://pandoc.org/MANUAL.html#character-encoding) ### 配置
Emacs 将init.el中刚才除在
(custom-set-faces之后的内容外,额外添加的语句全部删除掉,然后在如下内容:
`bash (require \'unicad) (add-to-list \'default-frame-alist \'(fullscreen . maximized))
` 之前添加:
`bash (setenv PATH (concat D:\\\\msys64\\\\mingw64\\\\bin; (getenv PATH)))
`
Markdown的命令设置为:
`bash (setq markdown-command D:/msys64/mingw64/bin/pandoc.bat)