我觉得以这个方式就行?实时取 margin 会有问题吗?
获取window-margins
这个函数是Emacs自带的C编写的,设置中只有在windows的参数变更时才会重新获取margin, 我这边测试对性能没影响。
我配置中这个乘以13的值 没找到应该从哪里直接获取。我在两天windows上设置为13 是正常的。但是换到mac上需要改为10.
我是说感觉每次用的时候都获取就可以?加 hook 其实是不太好。
@DogLooksGood window-configuration-change-hook
确实不好。 经测试,每次弹出posframe 都会触发。我原先以为只有更改窗口大小的时候才会触发。
我有个想法:只在指定的mode加载的时候设置(mode-hook),以及更改frame大小以及缩放字体时设置(这2个目前还没找到是哪个hook)。
为什么我的位置感觉是对的呢,我也有 margin 的啊。
(let ((margin 24))
(add-to-list 'default-frame-alist (cons 'internal-border-width margin))
(set-frame-parameter nil 'internal-border-width margin))
你这个参数是改变的frame的margin,我这里测试也是正常的。
posframe 里面的 :x-pixel-offset
参考的是frame的边界。不知道posframe 有没有参考window-margin的参数?
@DogLooksGood 试试看 set-window-parameter
?
这个设置方式有什么特别的好处吗?
我对这块研究不深。同类的 olivetti ,还有一个是writeroom-mode,都是通过window实现的。
我的理解是:可能是因为我们平时使用的更多是一个Frame 上有多个window(每个windows上是一个buffer)。只有像posframe这种情况才开新的frame,而且开多个frame 在mac 上还有bug。
只有在 hook 里面,(window-margins)
才能取得到值?如果这样话是有点麻烦啊。
不会啊,直接执行的话返回的是一个cons。要有window才行,估计是你测试的buffer只是一个frame。 我直接在没开启elivetti的buffer上执行也是返回nil,但在org-mode的buffer下就返回(37 . 37), 然后在同样的位置,关闭elivetti-mode ,再执行,就是nil。
@DogLooksGood 报告一个问题,目前emacs-rime 中的 (setq rime-posframe-fixed-position t)
的实现方式还会影响其他的posframe。比如在开启固定的时候,打开snails进行搜索时,会有下面的效果,输入的内容还是在原来的buffer。
如果关闭固定模式的话,不影响snails的posframe:
感觉期待进一步的信息,我这里没有除了 emacs-rime 的 posframe 应用。实际上我发现 posframe 会有一个全局的 hook 而且还有一定的成本,所以我已经全面去掉了 posframe, 连 emacs-rime 都改用了 minibuffer…
是以前就不能用,还是新出现的问题?
snails没有用posframe
看来我也要去posframe了。
我尝试了使用minibuffer,确实很流畅。不过会和awesome-tray 冲突,估计是显示高度不够。这个模式下,屏幕不会闪了 。
我在慢慢缩小自己的配置,本着先可靠,再可用的原则。
rime-pasframe-fixed-position
也许以后可以找到更好的办法。目前我想到的就是在 preedit 的 overlay 里面,用 display 替代 after-string。今天搞的 meow 的 meow-search 的功能就尝试了一下,效果好像还可以。after-string 的话光标的位置比较怪,所以才要算。
赞同,我最近也在缩减配置 。
打算暂时不用awesome-tray,换回modeline,然后通过minibuffer显示输入预选。
(setq rime-show-candidate nil)
(setq rime-show-preedit t)
上面的配置下,是完全不显示预选,只在当前光标显示中文,我个人觉得这样输入很舒服。 因为真正输入的时候我大部分时间是不看预选的,不知道有没有可能在上面的基础上设置,需要的时候我手动启用预选?因为有时遇到生僻字,或者需要切换输入方案的话,还是得看预选窗口。
ps: 现在已经喜欢上这种没有候选框的模式,输入中文的体验跟输入英文一样,直接看着当前输入内容打字就行。给Emacs-rime 点一个大大的赞