比较土鳖的方法是启动一个timer监听某种变化,有变化时,隐藏posframe
不一定,具体情况具体看
不容易 debug 啊
有一个法子是: 你可以将posframe的窗口固定到当前窗口的右上角,然后操作posframe-buffer,posframe有一个自动刷新参数,它根据buffer的内容自动调整窗口大小
一直显示不删除?这不太符合词典应用的使用场景吧?
说不准哟,首先在右上角,posframe小的话,不影响看代码,其次,你清空posframe buffer后,posframe窗口会缩小成绿豆大,更不影响了
我从别人那偷来的,可以防止闪退。但是带来其它一些bug,比如影响 eldoc 显示,主要因为不理解这个代码的含义。
(unwind-protect
(push (read-event) unread-command-events)
(posframe-hide))
这是我从别人 postip 处理的方式那借鉴来的,但是 postip 不用放到 post-command-hook 中去
我以前准备让posframe显示一个webkit控件,调用百度翻译,后来懒得搞,很简单,估计效果也不错
因为这个闪退的原因,我还是换回 pos-tip 了,等到有解决办法了再换回来。
闪退是指啥呀? 我hook到post-command-hook好像没啥问题啊?
(defun webkit-katex-render-update ()
(let ((math-at-point (webkit-katex-render--math-at-point)))
(if math-at-point
(if (not (eq math-at-point webkit-katex-render--previous-math))
(progn
(webkit-katex-render-show math-at-point)
(setq webkit-katex-render--previous-math math-at-point)))
(webkit-katex-render-hide))))
;;;###autoload
(define-minor-mode webkit-katex-render-mode
"Toggle Katex preview"
nil nil nil
(if webkit-katex-render-mode
(progn
(unless (featurep 'xwidget-internal)
(user-error "Your Emacs was not compiled with xwidgets support"))
(unless (display-graphic-p)
(user-error "webkit-katex-render only works in graphical displays"))
(add-hook 'post-self-insert-hook #'webkit-katex-render--resize)
(add-hook 'post-command-hook #'webkit-katex-render-update))
(remove-hook 'post-command-hook #'webkit-katex-render-update)
(remove-hook 'post-self-insert-hook #'webkit-katex-render--resize)
(webkit-katex-render-cleanup)))
具体来说,就是选中区域的时候弹出posframe会闪退
比较难 debug 啊,spacemacs 的 post-command 里 hook 了一堆东西,词典插件是我自己又写的,倒是没什么特殊处理。
要不hook到h/j/k/l上?
不对那些没有hook。。除非advice。。。
要么你就把post command hook清空看看有没有问题? 二分查找一下。。
spacemacs 上 2017 年就有人提出来相关 issue 了,
是pos-tip的,但是pos-tip有 workaround,我现在用的就是。posframe 比较新,用的人少,还没有相应的 workaround。
看来也只能这样了
能看看你的 post-command-hook
吗? @fuxialexander
这是我的:
post-command-hook is a variable defined in ‘C source code’.
Its value is
(evil-normal-post-command company-post-command eldoc-schedule-timer hl-paren-initiate-highlight yas--post-command-handler t)
Local in buffer stardict.el; global value is
(global-font-lock-mode-check-buffers global-eldoc-mode-check-buffers global-spacemacs-leader-override-mode-check-buffers global-undo-tree-mode-check-buffers evil-mode-check-buffers ace-pinyin-global-mode-check-buffers global-edit-server-edit-mode-check-buffers global-anzu-mode-check-buffers evil-snipe-mode-check-buffers evil-snipe-override-mode-check-buffers global-page-break-lines-mode-check-buffers global-vi-tilde-fringe-mode-check-buffers global-spacemacs-whitespace-cleanup-mode-check-buffers ws-butler-global-mode-check-buffers yas-global-mode-check-buffers show-smartparens-global-mode-check-buffers global-flycheck-mode-check-buffers global-display-line-numbers-mode-check-buffers global-magit-file-mode-check-buffers flycheck-pos-tip-hide-messages sp--post-command-hook-handler winner-save-old-configurations clean-aindent--check-last-point evil-repeat-post-hook global-hl-line-maybe-unhighlight global-hl-line-highlight mode-local-post-major-mode-change)
posframe由于bug,不能点,所以我在posframe里面设置,一点就隐藏
(eldoc-schedule-timer
evil-normal-post-command
company-post-command
hl-line-maybe-unhighlight
hl-line-highlight
yas--post-command-handler
git-gutter:post-command-hook
t)
好像差别也不大?
这个就不知道了
嗯,甚至也不一定是 post-command-hook 的毛病,是有什么命令在选中区域的时候移动光标了?不知道这个命令就没法 debug。
我能想到一个 workaround 就是在选中区域的时候用 pos-tip 代替 posframe