Find the buffer with Chinese name
the buffer with Chinese name :en:emacs:chinese:
We can find the buffer with Chinese name efficiently by using the first character of pinyin.
Here is the code (ivy and pinyinlib is required):
(defun ivy-switch-buffer-matcher-pinyin (regexp candidates)
(unless (featurep 'pinyinlib) (require 'pinyinlib))
(let* ((pys (split-string regexp "[ \t]+"))
(regexp (format ".*%s.*"
(mapconcat 'pinyinlib-build-regexp-string pys ".*"))))
(ivy--switch-buffer-matcher regexp candidates)))
(defun ivy-switch-buffer-by-pinyin ()
"Switch to another buffer."
(interactive)
(unless (featurep 'ivy) (require 'ivy))
(let ((this-command 'ivy-switch-buffer))
(ivy-read "Switch to buffer: " 'internal-complete-buffer
:matcher #'ivy-switch-buffer-matcher-pinyin
:preselect (buffer-name (other-buffer (current-buffer)))
:action #'ivy--switch-buffer-action
:keymap ivy-switch-buffer-map
:caller 'ivy-switch-buffer)))
You can M-x ivy-switch-buffer-by-pinyin
to switch buffer.
The algorithm of pinyinlib is simple. We build a big lookup table to convert the a plain English string into a regular expression containing Chinese characters.
You can apply the same algorithm to other non-English languages.