emacs-rime
的配置如下:
其中配置了候选条的显示是使用的 posframe
这个包。
(setq rime-show-candidate 'posframe)
(defun hurricane-misc/init-rime ()
(use-package rime
:ensure t
:init
(when (functionp 'module-load)
(progn
(require 'posframe)
(setq rime-show-candidate 'posframe)
(setq rime-posframe-properties
(list :font "sarasa ui sc"
:internal-border-width 10))))
(setq default-input-method "rime")
(setq rime-user-data-dir rime-dir)
(setq rime-disable-predicates
'(rime-predicate-evil-mode-p
rime-predicate-prog-in-code-p))
(defun +rime-force-enable ()
"强制 `rime' 使用中文输入状态。
如果当前不是 `rime' 输入法,则先激活 `rime' 输入法。如果当前是
`evil' 的非编辑状态,则转为 `evil-insert-state'。"
(interactive)
(let ((input-method "rime"))
(unless (string= current-input-method input-method)
(activate-input-method input-method))
(when (rime-predicate-evil-mode-p)
(if (= (+ 1 (point)) (line-end-position))
(evil-append 1)
(evil-insert 1)))
(rime-force-enable)))
(defun +rime-convert-string-at-point (&optional return-cregexp)
"将光标前的字符串转换为中文。"
(interactive "P")
(+rime-force-enable)
(let ((string (if mark-active
(buffer-substring-no-properties
(region-beginning) (region-end))
(buffer-substring-no-properties
(line-beginning-position) (point))))
code
length)
(cond ((string-match "\\([a-z'-]+\\|[[:punct:]]\\) *$" string)
(setq code (replace-regexp-in-string
"^[-']" ""
(match-string 0 string)))
(setq length (length code))
(setq code (replace-regexp-in-string " +" "" code))
(if mark-active
(delete-region (region-beginning) (region-end))
(when (> length 0)
(delete-char (- 0 length))))
(when (> length 0)
(setq unread-command-events
(append (listify-key-sequence code)
unread-command-events))))
(t (message "`+rime-convert-string-at-point' did nothing.")))))
:custom
(rime-librime-root "~/.emacs.d/librime/dist")
(rime-posframe-properties
(list :background-color "#666666"
:foreground-color "#dcdccc"
:internal-border-width 10))
:bind
("C-\\" . #'+rime-force-enable)
("M-g" . #'+rime-convert-string-at-point)
(:map rime-mode-map
("M-p" . #'rime-inline-ascii)
("C-`" . rime-send-keybinding))))
我同时使用了 ivy-posframe
。
配置如下:
(defun hurricane-ui/init-ivy-posframe ()
(use-package ivy-posframe
:ensure t
:after (ivy)
:config
(setq ivy-posframe-display-functions-alist
'((swiper . ivy-posframe-display-at-frame-center)
(complete-symbol . ivy-posframe-display-at-point)
(counsel-M-x . ivy-posframe-display-at-frame-center)
(counsel-find-file . ivy-posframe-display-at-frame-center)
(ivy-switch-buffer . ivy-posframe-display-at-frame-center)
(t . ivy-posframe-display-at-frame-center)))
(ivy-posframe-enable)))
使用 counsel-find-file
函数时就能出现 posframe。
此时就与 emacs-rime
配置的候选条冲突了?
我不知道该如何正确配置 emacs-rime
了。