我刚开始是直接复制了你的配置。
后来发现,你的配置是windows的
就把那些删了,用了默认值。
完了就复现了。
能复现就好,肯定能搞定的。
看起来也不是特别难的问题。
我刚开始是直接复制了你的配置。
后来发现,你的配置是windows的
就把那些删了,用了默认值。
完了就复现了。
能复现就好,肯定能搞定的。
看起来也不是特别难的问题。
我也一直有这个问题,还以为是 magit 的行为。。。
找到原因了。。。
magit的keymap是基于text property的,
优先级比 smart-input-source (简称sis) 更高。
有两种解决:
咳咳。。。。 后者,2一直没敢做~~~
我还是想想1吧。。
magit的keymap是基于text property的, 优先级比 smart-input-source (简称sis) 更高。
如果magit的优先级高,没有道理 C-x 0
不能使用啊?是因为两者冲突吗?
如果可以进入 magit-revision: 这种 buffer后,只禁用C-x 那些前缀快捷键就好了,进入magit-revision: buffer时自动进入EN状态还是需要保留的,进入其他magit-的其他buffer(比如COMMIT_EDITMSG 这种需要输入信息的) 还是需要sis的
我这里还有一个问题, 比如我桌面上有一个文件夹 aaa/ , 里面有 aaa.txt,Emacs打开aaa.txt后,sis 可以正常使用,然后我用外部程序把aaa/ 目录重命名 bbb/ ,Emacs 会一直提示下面错误,直到kill aaa.txt buffer, 频率挺高,能否判断一下如果buffer没有关联目录文件,取消定时器?
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/aaa/")
如果强制 kill aaa.txt buffer, sis 貌似还失效了 需要重新加载一下配置???
不是的,比方说,他有类似这样的快捷键:C-x k
C-x的时候,因为他优先级更高,sis就捕捉不到。
完了呢,用户输入b
这时候他处理不了,往下传 C-x b
但是,下面实际上没有 C-x b
因为只有被sis截取的C-x
sis每次是截取到C-x,进行预处理之后,
才重新交还到原来的C-x, b
magit那个问题找到后,我就睡觉去了。
很好解决的~~
我看看。。。
magit 的问题,完成了。
可以通过定制 smart-input-source-prefix-override-buffer-disable-predicates
在更多的buffer中禁用prefix key overriding。
fix了。如果关联目录不存在,自动设成 ~ 。并提示。
我试了下 好像还是会一直弹出错信息,除非把对应buffer给kill掉,不过kill 掉后sis 还是失效
Error running timer ‘smart-input-source--auto-refresh-timer-function’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/aa/")
apply: Setting current directory: No error, c:/Users/John/Desktop/aa/
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/aa/") [3 times]
Error in pre-command-hook (smart-input-source--preserve-pre-command-handler): (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/aa/")
是不是自己配置了do-get
了嗯?
之前我复现了那个现象,其实不是sis的问题
是emacs调用外部程序的时候,会默认设置work directory
我这里做了错误处理,
完了之后,那个现象就没有了。
你如果用的im-select
,按理说,就用上了这个设置。
但是你如果定制了do-get,你也要按下列方式,做相应的改动。
(lambda ()
(condition-case err
(string-trim (shell-command-to-string -ism))
(file-missing
(when (equal (car (cdr err))
"Setting current directory")
(message
"Default directory for buffer <%s> is missing, now set to '~'"
(current-buffer))
(setq default-directory "~")))))
没有定制do-get
当我用外部程序删除或重命名aaa目录的时候 ,我这里也没有出现
Default directory for buffer <%s> is missing, now set to '~'
这种类似的信息 感觉改动没有启作用?
看下面的信息 是没有权限??
apply: Setting current directory: Permission denied, c:/Users/John/Desktop/aaa/
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "Permission denied" "c:/Users/John/Desktop/aaa/") [2 times]
Error in pre-command-hook (smart-input-source--preserve-pre-command-handler): (file-error "Setting current directory" "Permission denied" "c:/Users/John/Desktop/aaa/")
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "Permission denied" "c:/Users/John/Desktop/aaa/")
下面是我的配置
(use-package smart-input-source
:init
(setq smart-input-source-external-ism "im-select.exe") ; for windows 命令行切换输入法工具
(setq smart-input-source-english "1033")
(setq-default smart-input-source-other "2052")
(setq smart-input-source-default-cursor-color "green yellow")
(setq smart-input-source-other-cursor-color "magenta")
:config
;; (add-to-list 'smart-input-source-preserve-save-triggers 'smex)
;; (global-set-key (kbd "<f9>") 'smart-input-source-log-mode)
;; enable the /cursor color/ mode 中英文光标颜色模式
(smart-input-source-global-cursor-color-mode t)
;; enable the /respect/ mode buffer 输入法状态记录模式
(smart-input-source-global-respect-mode t)
;; enable the /follow context/ and /inline english/ mode for all buffers
(smart-input-source-global-follow-context-mode t)
(smart-input-source-global-inline-mode t)
;; (setq-default smart-input-source-inline-tighten-head-rule 1) ; 删除头部空格,默认1,删除一个空格,1/0/'all
(setq-default smart-input-source-inline-tighten-tail-rule 'all) ; 删除尾部空格,默认1,删除一个空格,1/0/'all
(setq-default smart-input-source-inline-with-english t) ; 默认是t, 中文context下输入<spc>进入内联英文
(setq-default smart-input-source-inline-with-other t) ; 默认是nil,而且prog-mode不建议开启, 英文context下输入<spc> <spc> 进行内联中文
)
错误处理主要是捕捉这个的。
我看是一样的啊。
Saving file c:/Users/John/Desktop/b/a.txt...
Wrote c:/Users/John/Desktop/b/a.txt
Error running timer ‘smart-input-source--auto-refresh-timer-function’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/")
apply: Setting current directory: No error, c:/Users/John/Desktop/b/
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/")
Error in pre-command-hook (smart-input-source--preserve-pre-command-handler): (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/")
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/")
Error in post-command-hook (smart-input-source--preserve-post-command-handler): (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/")
Error running timer ‘smart-input-source--auto-refresh-timer-restart’: (file-error "Setting current directory" "No error" "c:/Users/John/Desktop/b/") [2 times]
你确实最新版么?
你 (print smart-input-source-do-get)
看看。
是最新版
(closure (t) nil (condition-case err (string-trim (shell-command-to-string smart-input-source--ism)) (file-missing (if (equal (car (cdr err)) "Setting current directory") (progn ((message "Default directory for buffer <%s> is missing, now set to '~'" (current-buffer)) (setq default-directory "~")))))))
(closure (t) nil (condition-case err (string-trim (shell-command-to-string smart-input-source--ism)) (file-missing (if ... ...))))
不是Emacs 调用外部程序,是 我直接在桌面上对 文件夹重命名
我知道的,我也是复现的。
我指的是,emacs调用im-select,查询输入法状态。