pyim 代码重构了,用的同学注意一下

两种方式实现起来都很简单

(defun pyim-autoselector-xingma (&rest _args)
  "适用于型码输入法的自动上屏器.

比如:五笔等型码输入法,重码率很低,90%以上的情况都是选择第一个词
条,自动选择可以减少按空格强制选词的机会。"
  (let* ((scheme-name (pyim-scheme-name))
         (class (pyim-scheme-get-option scheme-name :class))
         (n (pyim-scheme-get-option scheme-name :code-split-length))
         (entered (pyim-entered-get 'point-before)))
    (when (eq class 'xingma)
      (cond
       ((and (= (length entered) n)
             (= (length pyim-candidates) 1)
             ;; 如果没有候选词,pyim 默认将用户输入当做候选词,这时不能自动上屏,
             ;; 因为这种情况往往是用户输入有误,自动上屏之后,调整输入就变得麻烦了。
             (not (equal entered (car pyim-candidates))))
        '(:select current))
       ((and (> (length entered) n)
             (equal (substring entered 0 n)
                    (car pyim-candidates-last)))
        ;; 自动清除错误输入模式,类似微软五笔:敲第五个字母的时候,前面四个字母自
        ;; 动清除。
        '(:select last :replace-with ""))
       ((> (length entered) n)
        '(:select last))
       (t nil)))))

请问五笔要配置些什么,我看拼音配置了好些行

看看pyim的readme吧

README看了,您的个人配置也看了下,不知道是不是只有 pyim-default-scheme 这个参数不同。

你还需要安装和启用pyim-wbdict包,然后运行pyim-restart

我在Win7 DOOM下用,这是目前配置,modeline提示有 PYIM了,但不能输入中文。

(use-package! pyim
  :after-call after-find-file pre-command-hook
  :init
  (setq default-input-method "pyim"
        pyim-dcache-directory (concat doom-cache-dir "pyim/"))
  :config
  (setq pyim-default-scheme 'wubi
        pyim-page-tooltip t)

  ;; pyim 探针设置
  (setq-default pyim-english-input-switch-functions
                '(pyim-probe-dynamic-english
                  pyim-probe-isearch-mode
                  pyim-probe-program-mode
                  pyim-probe-org-structure-template))

  (setq-default pyim-punctuation-half-width-functions
                '(pyim-probe-punctuation-line-beginning
                  pyim-probe-punctuation-after-punctuation))

  ;; 开启拼音搜索功能
  (pyim-isearch-mode 1)

  ;; 设置选词框的绘制方式
  (if (posframe-workable-p)
      (setq pyim-page-tooltip 'posframe)
    (setq pyim-page-tooltip 'popup))

  ;; 显示5个候选词。
  (setq pyim-page-length 5)

  ;; emacs 启动时加载 pyim 词库
  ;; (add-hook 'emacs-startup-hook
  ;;           #'(lambda ()
  ;;               (pyim-restart-1 t)))
  (require 'pyim-wbdict)
  (pyim-wbdict-v86-enable))

按 C-\ 打开输入法,按 k不会输入中文。


找到答案了,是 pyim-english-input-switch-functions强制某些地方输入英文,某些地方输入中文的原因。

现在想知道中英文混合输入有没有什么tips,是必须 C-\切换输入法吗?

谢谢,现在能用了。只是不知道中英文混合输入时候有没有什么快捷操作。用了一段时间 smart-input-source ,但win7下有点卡卡的,不过它的中英文混合输入好用。


这个帖子有个探针不错,但变量 pyim-entered-code 已经被重构了。

你看看pyim-probe.el文件,我记得这个探针合并到里面了,中英文自动切换原理都类似,你甚至可以在pyim里面使用emacs-rime的预测函数

yim-probe-auto-english

在minibuf里是不能输入中文吗?我用swiper,org-noter的org-noter-insert-note时,按C-\都不能输入中文。


不知道什么原因,C-\在minibuff不能打开输入法,暂时将ivy的M-i去掉,然后在minibuff中使用.pyim-convert-code-at-point,(M-i),这样可以开启输入法。

(map! (:map override "M-i" 'pyim-convert-string-at-point))

可能你不小心启用某个probe了

pyim-probe-isearch-mode

去掉这个试试

五笔,仓颉,并且自己维护个人词库的同学们要注意,注意,注意,最新的pyim由于code-prefix调整,需要更新词库文件。比如: 五笔需要require pyim-wbdict,并把.改成wubi/

使用pyim-wbdict和pyim-cangjie5dict的同学不受影响,因为我已经更新写两个包,

至于为什么更改code-prefix,原因是为了防止词库冲突,以前有问题的设计带来的技术债 。。。。哎

2 个赞

是最新的更新吗?我是前天从github clone的

今天更改提交的

pyim-convert-code-at-point这个函数好像不在了

pyim-convert-string-at-point ,这个命令早就废弃了

sorry,我是在pyim-probe-dynamic-english 函数中还出现,并且绑定了M-i,所以前天绑定成这个了。


五笔造词不知有没有好的方案,以前用外置输入法感觉造词很麻烦,现在可以很快了。目前我用这个函数手动造词,全绑定到一个按键:

(defun lld/pyim-convert-string-at-point (&optional arg)
  "造词或者将编码转换成汉字。

1. 选中区域,造词
2. arg+1 造2字词,3字词,等等,如为负数,删除最近造的词
3. 转换光标前 code 为汉字"
  (interactive "P")
  (if (region-active-p)
      (pyim-create-word-from-selection)
    (if (null arg)
        (pyim-convert-string-at-point)
      (let ((n (prefix-numeric-value arg)))
        ;; 负数
        (if (< n 0)
            (pyim-delete-last-word)
          (setq n (+ (ceiling (log n 4)) 1)))
        (pyim-create-word-at-point n)))))
1 个赞

emacs就是这样,不满意就造 :smile: