由于平时在macos上习惯使用alfred,尝试了ivy helm selectrum snails
等框架后,最后还是更倾向于使用snails
。
另外,emacs上的frame弹出方式,我想要统一为“从光标处弹出”,跟company-mode
行为保持一致,因此想要实现snails-frame display at point
。
观察到company-posframe ivy-posframe which-key-posframe
等插件包,以及selectrum display minibuffer in a child frame, 貌似借助posframe
是最便捷的办法。
1、调用posframe估算光标的位置;
2、把位置信息传给snails set-frame-postion。
瞎写了几句:
(require 'posframe)
(require 'snails)
(let* ((info (posframe-poshandler-argbuilder snails-frame))
(posn (posframe-poshandler-window-center info)))
(set-frame-position snails-frame (car posn) (cdr posn)))
没报错,也没效果……有哪位大佬可以指正一下吗?谢谢!
光标处弹出容易空间不够,比如光标在右下角。
snails没用posframe的原因是posframe的细节控制达不到snails要求。
原来还有这样的考量,谢谢猫大。顺便再请教一下猫大,我好像没看到mdfind命令加单引号的,例如 mdfind -name 'file's name'
就搜不出结果,我把 snails-backend-mdfind.el的(format “‘%s’” input)的单引号去掉之后才能搜到结果,麻烦看看要不要改一下?
应该PR了,门外汉还不会git,现学现用,麻烦猫大看看。
刚用最小配置(仅有use-package和straight)安装了ivy和ivy-posframe,出现了一个问题:第一次激活ivy-posframe会抢焦点,输入的内容会跑到ivy-poframe的展示区而不是输入框,如下图的“zheli”:
需要用鼠标点一下emacs才能恢复正常:
我昨晚刚好发现company-posframe也是类似的情况,company-box却没有这样的情况。环境是macos big sur emacs 27.2,不知道是macos的窗口管理的问题还是posframe的问题。麻烦半人马大佬帮我看看
我这里没有问题哦。之前确实某个Emacs版本有问题,还有问题可以让 @tumashu 大佬看看,posframe 是他的作品。
嗯嗯,谢谢大佬提醒。分别重装了emacs-mac和emacs-plus,发现emacs-mac版没有出现这样的情况,美中不足的是company-posframe在select condidates的时候会闪烁。
对了,用了emacs-mac版之后,macos下全屏后触发new frame而出现 新的黑色桌面或者ctl-tab出现两个emacs图标等问题都不见。记得之前大佬你在snails帖子里提到类似的情况。
emacs-mac版做了很多底层改动,对mac兼容更好,但是少很多新特性。最新的GNU emacs已经修复了黑屏的问题。
(defcustom posframe-mouse-banish (not (eq system-type 'darwin))
"Mouse banish.
when this variable is t, mouse will be moved to (0 , 0).
when this variable is a cons like (x . y), mouse will be moved
to (x , y).
This option is used to solve the problem of child frame getting
focus, with the help of `posframe--redirect-posframe-focus',
setting this option to `nil' will work well in *most* cases."
:group 'posframe
:type 'boolean)
试试设置这个变量
之前在posframe的issue里看到讨论了,可惜set nil还是不行。现在弃用emacs-plus,改用eamcs-nightly或emacs-mac,都没有grab focus的问题。emacs-mac下company-posframe在select condidates的时候会闪烁,官方版的emacs-nightly版则没什么问题,对 XXX-posframe 系列插件兼容都比较好。谢谢大佬!
macos big sur下编译了多个GUI emacs 27.2 版本,配置仅添加use-package straightt ivy ivy-posframe company copany-posframe
,偶尔换配置测试一下snails的make-frame。
测试并总结一下规律:
一、能发现的posframe的bug:
1、company-posframe在快速select condidates时出现闪烁,选一个闪一次。
2、company-posframe、ivy-frame在第一次激活时会grab focus,如下:
3、macos下非fullscreen,company-posframe show quickhelp doc时会把emacs遮住(部分或全部)的inactive窗口拉到最前面,但不会抢输入的焦点,如图:
4、macos下fullscreen,一旦激活posframe,则会产生一个以上的全黑“posframe桌面”,和snails的make-frame是类似的情况,如图:
二、emacs版本与bug的关系(经homebrew安装):
1、emacs-nightly:未出现上述posframe bug,只是company-posframe show quickhelp doc会出现resize小抖动。snail的make-frame会出现bug4。
2、emacs-plus:
2.1、会出现bug3和bug4。
2.2、(setq posframe-mouse-banish nil)或(setq posframe-mouse-banish t)都会出现bug3和bug4。
3、emacs-plus–with-no-titlebar:
3.1、会出现bug2和bug4,quickhelp doc没显示出来。
3.2、(setq posframe-mouse-banish nil)或(setq posframe-mouse-banish t)都会出现bug2和bug4,quickhelp doc没显示出来。
3、emcs-mac:
3.1、出现bug1,quickhelp doc不出现resize小抖动。
3.2、(setq posframe-mouse-banish nil)或(setq posframe-mouse-banish t)都会出现bug1。
比较直观的感受是,emacs-plus–with-no-titlebar运行最快,但可能因为no-titlebar,macos把posframe当成了一个系统上的窗口,会抢输入focus,会产生新桌面。
大致情况如此,麻烦 @tumashu 大佬看看,谢谢!
ps:测试用的配置就这么多:
emacs-plus–with-no-titlebar版本,用起来依旧不行,snails input弹出时会占用整个桌面,RET condidate后会变成黑色的桌面,如图。估计plus版本和no-titlebar的影响最大。
emacs-nightly版本用起来没问题,那就终于可以定下来用这个版本了,对所有的new frame都很友好。很早之前配置snails时看到你的fullscreen方法,现在没想起来……谢谢猫大!
虽然很喜欢emacs-plus–with-no-titlebar版本的性能,但frame会出现bug,那就只能用emacs-nightly了。玩开源,还得用linux啊…… 谢谢 @tumashu 大佬!