(setq rime-show-preedit t)
的时候也是一样。只有org-mode有问题,其他mode正常。
奇怪,我这个也是 org-mode 啊,有啥特别的设定吗
我试过不加载org的配置也是一样。等下我再试下完全空白的配置。感觉是因为左边页边缩进造成的,候选框跑到默认的最左边了。
更新:
问题确认了,就是这个默认的居中缩进造成的。下面这个空白的配置下就正常了
这个是因为Emacs最大化显示后,显示部分的左边界不在Emacs最左边界造成的。
有点不能理解,是在哪个平台上?
Windows和Mac 都是这样。看样子是配置中某个包的设置有问题,冲突了。等我debug出这个具体的设置先。
实在找不到哪个包在设置这个。只看到一条信息text body width set to 120
,你试试将org-mode的buffer 设置这个宽度,然后最大化窗口,估计就可以重现问题。
我是用的字符的宽来偏移的,如果字符的宽被改了,那应该就算不对了。
试着在 elpa 目录搜下打印的 message?
大佬,我找到是什么原因造成Org-mode 不能使用(setq rime-posframe-fixed-position t)
这个新特性了。
是因为之前用了这个olivetti包,使得整体居中了。有办法兼容这个包?
(dolist (hook (list
'org-mode-hook
))
(add-hook hook
'(lambda ()
(require 'olivetti)
(olivetti-mode 1)
(olivetti-set-width 120)
)))
这个要研究下,我觉得你可以看一下那个新加入的计算偏移 pixel 的函数的实现。
这个想法可行,在启动olivetti的hook中多加一个偏置应该就可以了。
很棒,在wsl下换这个了,输入响应速度不错,也没遇上什么问题。
@DogLooksGood 大佬,我通过将偏置的参数扩展一个变量出来可以实现emacs-rime的inline
模式和 olivetti兼容了。
实现的比较难看,不知道大佬有什么建议吗?
rime 中的修改了 x-fixel-offset
这行:
(defvar my-posframe-offset 0)
(defun rime--posframe-display-content (content)
"Display CONTENT with posframe."
(if (and (featurep 'posframe) (display-graphic-p))
(if (string-blank-p content)
(posframe-hide rime-posframe-buffer)
(let*
((preedit (rime--current-preedit))
(x (cond
((not rime-posframe-fixed-position) 0)
((not preedit) 0)
((not (overlayp rime--preedit-overlay)) 0)
(t (rime--string-pixel-width preedit)))))
(apply #'posframe-show rime-posframe-buffer
:string content
:x-pixel-offset (- (- x my-posframe-offset))
:background-color (face-attribute 'rime-default-face :background nil t)
:foreground-color (face-attribute 'rime-default-face :foreground nil t)
rime-posframe-properties)))
;; Fallback to popup when not available.
(rime--popup-display-content content)))
olivity配置中添加一个了hook
,使得窗口变化的时候更新参数:
(olivetti-set-width 120)
(add-hook 'window-configuration-change-hook #'(lambda ()
(setq-local my-posframe-offset
(cond
((not olivetti-mode) 0)
((<= (frame-width) olivetti-body-width) 0)
((> (frame-width) olivetti-body-width)
(* (/ (- (frame-width) olivetti-body-width)
2)
13))))))
更新:本人elisp水平有限,目前只能先用这个方案了。使用上已经完全没问题。
如果谁有更好的方案,请指教下。
我个人觉得这样的设置不是很合理,应该看 olivetti 通过控制哪个变量达到的效果,然后可以把这个变量固定的加入计算,而不是针对性的 hack。
多谢建议,我再研究下olivetti的代码。 目前这种设置确实问题多,用了'window-configuration-change-hook
影响了其他mode,还要单独处理。
olivetti是改变了margin宽度实现的。按理说应该不用特别适配的啊?
因为新加入的特性(setq rime-posframe-fixed-position t)
,posframe的起算位置是以窗体的最左边0位起算,并没有识别left-margin。
而我在当前启用了olivetti的buffer下执行(left-margin)返回值也是0。
hi 请问你在WIN10下安装成功了吗 能教我一下吗
好的 谢谢 我看一下
看看这个函数olivetti-set-window
.