pyim 添加了新的 page tooltip, 欢迎大家测试

Debugger entered--Lisp error: (void-variable my-frame)
  (set-frame-parameter my-frame 'parent-frame (window-frame))
  eval((set-frame-parameter my-frame 'parent-frame (window-frame)) nil)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

。。。 第一个 setq 要运行一下才能运行第二个。。。。

这个就没法了。。。。。。 可能是 emacs 的bug

EVAL下面这个函数,然后 再测试一下 pyim, 看看效果

(defun pyim-tooltip-show-with-child-frame (string position)
  "在 POSITION 处使用 child-frame 显示 STRING."
  (let* ((buffer (get-buffer-create " *pyim-child-frame-buffer*"))
         (string-width-height (pos-tip-string-width-height string))
         (string-width (car string-width-height))
         (string-height (cdr string-width-height))
         (x-and-y (pos-tip-compute-pixel-position position)))

    (unless (frame-live-p pyim-tooltip-child-frame)
      (setq pyim-tooltip-child-frame
            (let ((after-make-frame-functions nil))
              (make-frame
               `(,@pyim-tooltip-child-frame-parameters
                 (parent-frame . ,(window-frame))
                 (no-accept-focus . t)
                 (min-width  . t)
                 (min-height . t)
                 (border-width . 0)
                 (internal-border-width . 0)
                 (vertical-scroll-bars . nil)
                 (horizontal-scroll-bars . nil)
                 (left-fringe . 10)
                 (right-fringe . 0)
                 (menu-bar-lines . 0)
                 (tool-bar-lines . 0)
                 (line-spacing . 0)
                 (unsplittable . t)
                 (no-other-frame . t)
                 (undecorated . t)
                 (visibility . nil)
                 (cursor-type . nil)
                 (minibuffer . nil)
                 (width . 50)
                 (height . 2)
                 (no-special-glyphs . t)))))
      (let ((window (frame-root-window pyim-tooltip-child-frame)))
        (set-window-parameter window 'mode-line-format 'none)
        (set-window-parameter window 'header-line-format 'none)
        (set-window-buffer window buffer)))

    (dolist (alist `( ;;(parent-frame . ,(window-frame))
                     (visibility   . t)
                     (top    .  ,(+ (cdr x-and-y) 10))
                     (left   .  ,(+ (car x-and-y) 10))
                     (width  .  ,(+ string-width 1))
                     (height .  ,(+ string-height 1))))
      (let ((parameter (car alist))
            (value (cdr alist)))
        (set-frame-parameter
         pyim-tooltip-child-frame parameter value)))

    (with-current-buffer buffer
      (erase-buffer)
      (insert string)
      (redisplay))))

速度怎么样?

怎用使用或者说调出emacs的pyim输入法?

去看pyim的README吧,写的很详细

那个网址在哪呢?

百度也行。

我更新了一下pyim,你可以再测试一下 :rofl:

在 linux 和window 下, child-frame 效果良好,响应速度比popup快不少, 没有mac的电脑,无法调试,所以禁用了。

1

1 个赞

抱歉现在才看到这个,可能是被前面的几个回帖刷屏了。还有就是因为我一直是用终端的,对这个问题的关注没那么积极。而且由于长期的忽略,我的配置在 GUI 底下有些不太对。所以才特地写了上面的最小配置来测 child-frame。

刚才重新获取了 pyim,把 pyim-tooltip-show 里的 darwin 限制去掉,再测了一遍:

另外我有个体验(与child-frame无关)就是:手比眼快,有时候要往回翻页找字(但又不太确定),如果能展示多行,会比较了然:

.------------------.      .------------------.
| 1.  2.  3.  4.   |  vs  |  1.  2.  3.  4.  |
'------------------'      |  1.  2.  3.  4.  |
                          |> 1.  2.  3.  4.  |
                          |  1.  2.  3.  4.  |
                          |  1.  2.  3.  4.  |
                          '------------------'

这个功能好另类,在现有的框架下,是搞不了的。

这个我没法调试,因为没有 mac 机子,是 pyim-tooltip-compute-pixel-position 这个函数的 bug, 但具体什么原因,就不知道了,有兴趣你可以调试调试。。。

其实不算另类了,macOS & iOS 原生输入法都这样,翻页展示多行。

待我有空再调试吧。

话说回来 helm 应该以后也可以用这个。

这个很有可能

有点类似于sublime和vscode的那个多功能输入框了,我是希望helm可以改进一下,代替mac上的Alfred(这东西定制性不够,我要的功能没有)