在 windows 下用 Everything 配合 counsel-locate 非常爽: Windows 下 emacs,everything 以及 ivy - #4,来自 et2010
但是问题也有,最主要的问题是无法搜索中文
在 cmd 中可以搜索:
但是在 emacs 中不可以:
怀疑又是编码问题造成的,emacs 中的编码都是 utf-8,然后Windows默认编码是 GBK,所以当然搜不出来结果。
我的默认编码又不想改成 gbk,有什么办法呢?
感觉 windows 下面 80% 的问题都是编码造成的,真是无比蛋疼
1 个赞
(setq process-coding-system-alist (cons '(“es” . (gbk .gbk)) process-coding-system-alist));;对es 的输入输入的编辑使用gbk
2 个赞
counsel--async-command
用到了 start-file-process-shell-command
,要用 shell-file-name
才能匹配到,但可能会影响到其它的命令。
设置 default-process-coding-system
有效果,但也可能会影响到其它命令。
也许有更好的方法,可以试试 advice :around
函数 counsel-locate-function
,外层套个 let
设置 default-process-coding-system
。
2 个赞
cireu
5
最近折腾counsel-locate
,解决了这个问题
Solution: 覆写counsel-locate-es-cmd
,在format最外面套上encode-coding-system
把搜索命令编码成gbk
是这样么?
(defun counsel-locate-cmd-es (input)
"Return a shell command based on INPUT."
(counsel-require-program "es.exe")
(encode-coding-string (format "es.exe -i -r -p %s"
(counsel-unquote-regex-parens
(ivy--regex input t)))
'gbk))
刚刚试了一下,可行。
2 个赞
cireu
9
不知emacs是否内置探测系统编码的函数,如果有就能智能控制了
cireu
11
这个应该是终极解决方案
之前一直不知道有w32-ansi-code-page
这个变量,今天看magit代码的时候看到了,(极不情愿地)开了windows试一下,发现居然可以使用
1 个赞