org-mode 下C-ret新建项目直接中文的问题,
我这几天来解决一下。
用了 evil-escape 设定 “kj” 来切换 insert 模式到 normal 模式。
想问下有什么办法可以在 insert 模式且是中文输入法的状态下,实现 “kj” 进入到 normal 模式么?
这个问题困扰了很久。之前用 vscode 的 vim 插件也是,输入法会捕获kj输入,从而没法进入到 normal 模式。(而且vscode映射kj到escape后还会有bug)
这个没办法,因为你输入k的时候,k会被输入法截走,emacs根本看不见。
直接输入 “jk” 然后上屏不就可以吗?如
原来,要按一下回车。比vscode的方案要好一些。 要是能省掉回车就更好了。
!!! 不兼容更新
所有符号中的`-follow`都需要删掉。
比如 `global-folllow-context-mode` 改名为 `global-context-mode`
功能更新
支持org mode中C-RET新建item时,自动切换输入法。
底层代码写好了,但是默认的配置只支持doom。
此处需要原生emacs用户的帮助:
- 安装 https://melpa.org/#/command-log-mode
- 开启 command-log-mode,并 toggle command log mode buffer
- 在org mode buffer中,通过C-RET新建item,
- 在log mode buffer里面,看触发了什么命令。
- 将此命令报给我。
- macOS Catalina 10.15.7 | Doom Emacs | Emacs Mac Port 27.1
- org buffer 内容(中文输入是用
M-x sis-switch
切换的)
* impossible
* 不可能
* bukexr
* mpgm
- command-log-mode buffer 内容:
<C-return> +org/insert-item-below
i org-self-insert-command [10 times]
<C-return> +org/insert-item-below
M-x counsel-M-x [2 times]
b org-self-insert-command [8 times]
DEL evil-delete-backward-char-and-join [8 times]
不 org-self-insert-command [3 times]
<C-return> +org/insert-item-below
b org-self-insert-command [6 times]
<C-return> +org/insert-item-below
m org-self-insert-command [4 times]
谢谢,不过不需要你这个信息。
我也用的doom,所以内置了对doom下org的支持。
有别的原生emacs键位的用户,
我需要他们提供信息,以内置支持
否则,用户需要自己配置sis-context-triggers
变量。
现在你在org下用没问题吧。
在中文标题上 C-RET,会在新标题上切到中文输入法
在英文标题上 C-RET,会在新标题上切到英文输入法
我在Mac 10.15.7 上测试,没有楼上提到的问题,C-RET
一切正常。
Emacs 版本是自己编译的master 28.0.50。 Emacs 原生键位。
哦哦,evil下,因为在normal模式中,是英文输入法,C-RET会存在这个问题。
原生键位不存在这个问题。
那就不用管了。
有别的自动切换需求的,也可提出来。我把它放到默认配置中。
现在底层已经做好了,只是配置的事,比较方便。
spacemacs evil normal 下 C-RET
触发的是evil-org-org-insert-heading-respect-content-below
你在配置中,
对照 sis-context-triggers
现有的值,把 +org/insert-item-below
换掉,试试看呢?
请把测试结果反馈给我一下。
我的关于sis-context-triggers
的配置
(setq sis-context-triggers '(('org-insert-heading-respect-content 'sis--context-line nil)
('evil-org-org-insert-heading-respect-content-below 'sis--context-line nil)))
在evil insert
模式C-RET
会调用org-insert-heading-respect-content
, 可以正确切换
在evil normal
模式C-RET
会调用evil-org-org-insert-heading-respect-content-below
, 不能正确切换
insert模式下,因为输入法一直是中文,是不需要trigger的,这一行去掉。
我下次自用用spacemacs测一下。我现在没有这个环境。得专门装一个。
我有这样一个需求:使用某些命令打开 minibuffer 之后,不是切换为英文,而是切换为中文。
应用场景:
- 使用 org-roam 搜索笔记的时候,因为一般笔记都是中文名。
- 使用 counsel-rg 搜索文本的时候
- 其他一些搜索场景
在文档中没有找到可以改的变量什么的,我就在配置里把代码中的 sis--minibuffer-setup-handler
重定义了。原本是:
(defun sis--minibuffer-setup-handler ()
"Handler for `minibuffer-setup-hook'."
(when sis-log-mode
(message "enter minibuffer: [%s]@current [%s]@last [%s]@command"
(current-buffer)
sis--buffer-before-command
this-command))
(sis--set-english))
重定义为:
(defun sis--minibuffer-setup-handler ()
"Handler for `minibuffer-setup-hook'."
(when sis-log-mode
(message "enter minibuffer: [%s]@current [%s]@last [%s]@command"
(current-buffer)
sis--buffer-before-command
this-command))
(if (or (string-equal "org-roam-find-file" (symbol-name this-command))
(string-equal "org-roam-insert" (symbol-name this-command))
(string-equal "org-roam-capture" (symbol-name this-command))
(string-equal "counsel-rg" (symbol-name this-command)))
(sis--set-other)
(sis--set-english))
)
我现在使用这个代码解决了需求。不知道还有没有更好的方法?想和大家交流一下
很棒啊,这是最佳做法,
如果需要改这一块的用户很多,
我可以把这块提出来,弄成可配置的predicate,
加了一个变量:sis-respect-minibuffer-triggers
你直接升级到github版,或等melpa几个小时候自动更新版本。
然后,你这么配置就行了:
(add-to-list sis-respect-minibuffer-triggers
(cons 'org-roam-find-file (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
(cons 'org-roam-insert (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
(cons 'org-roam-capture (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
(cons 'counsel-rg (lambda () 'other))))
macos系统总是莫名其妙的更改emacs的输入法,经常出现在切换程序的时候,切换到emacs时会出现nomal模式改成中文模式的情况,用各种切换输入法的小软件都会出现例外。烦不胜烦。
再次恳请开放一个硬切换的功能,即:
if emacs获得焦点 and evil处在nomal模式
then 输入法切换为英文
请大佬们帮忙和指点,谢谢!