* lisp/international/mule-cmds.el: Use group-function in read-char-by-name.

(mule--ucs-names-group): Simplify for using by group-function.
(read-char-by-name-group): Remove defcustom
obsoleted by completions-group.
(read-char-by-name): Mention completions-group and
completions-group-sort in docstring.  Use group-function when
completions-group is non-nil.
https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00791.html
This commit is contained in:
Juri Linkov 2021-05-20 20:51:32 +03:00
parent cb8b994217
commit 1866e66a73
2 changed files with 22 additions and 49 deletions

View file

@ -1090,12 +1090,11 @@ so e.g. like 'C-x 8 [' inserts a left single quotation mark,
'C-x \ [' does the same.
---
*** New user options 'read-char-by-name-sort' and 'read-char-by-name-group'.
'read-char-by-name-sort' defines the sorting order of characters for
completion of 'C-x 8 RET TAB' and can be customized to sort them
by codepoints instead of character names by default. The 't' value of
'read-char-by-name-group' groups the characters for completion of
'C-x 8 RET TAB' by Unicode blocks.
*** New user option 'read-char-by-name-sort'.
It defines the sorting order of characters for completion of 'C-x 8 RET TAB'
and can be customized to sort them by codepoints instead of character names.
Additionally, you can group characters by Unicode blocks after customizing
'completions-group' and 'completions-group-sort'.
---
*** Improved language transliteration in Malayalam input methods.
@ -2767,6 +2766,10 @@ It accepts a list of completions and should return a list where
each element is a list with three elements: a completion,
a prefix string, and a suffix string.
+++
** New completion function 'group-function' for grouping candidates.
It takes two arguments: a completion candidate and a 'transform' flag.
+++
** 'read-char-from-minibuffer' and 'y-or-n-p' support 'help-form'.
If you bind 'help-form' to a non-nil value while calling these functions,

View file

@ -3104,35 +3104,11 @@ on encoding."
(list name (concat (if char (list char) " ") "\t") "")))
names))
(defun mule--ucs-names-group (names)
(let* ((codes-and-names
(mapcar (lambda (name) (cons (gethash name ucs-names) name)) names))
(grouped
(seq-group-by
(lambda (code-name)
(let ((script (aref char-script-table (car code-name))))
(if script (symbol-name script) "ungrouped")))
codes-and-names))
names-with-header header)
(dolist (group (sort grouped (lambda (a b) (string< (car a) (car b)))))
(setq header t)
(dolist (code-name (cdr group))
(push (list
(cdr code-name)
(concat
(if header
(progn
(setq header nil)
(concat "\n" (propertize
(format "* %s\n" (car group))
'face 'header-line)))
"")
;; prefix
(if (car code-name) (format "%c" (car code-name)) " ") "\t")
;; suffix
"")
names-with-header)))
(nreverse names-with-header)))
(defun mule--ucs-names-group (name transform)
(if transform
name
(let ((script (aref char-script-table (gethash name ucs-names))))
(if script (symbol-name script) "ungrouped"))))
(defun char-from-name (string &optional ignore-case)
"Return a character as a number from its Unicode name STRING.
@ -3164,14 +3140,6 @@ Defines the sorting order either by character names or their codepoints."
:group 'mule
:version "28.1")
(defcustom read-char-by-name-group nil
"How to group characters for `read-char-by-name' completion.
When t, split characters to sections of Unicode blocks
sorted alphabetically."
:type 'boolean
:group 'mule
:version "28.1")
(defun read-char-by-name (prompt)
"Read a character by its Unicode name or hex number string.
Display PROMPT and read a string that represents a character by its
@ -3185,8 +3153,9 @@ preceded by an asterisk `*' and use completion, it will show all
the characters whose names include that substring, not necessarily
at the beginning of the name.
The options `read-char-by-name-sort' and `read-char-by-name-group'
define the sorting order of completion characters and how to group them.
The options `read-char-by-name-sort', `completions-group', and
`completions-group-sort' define the sorting order of completion characters,
whether to group them, and how to sort groups.
Accept a name like \"CIRCULATION FUNCTION\", a hexadecimal
number like \"2A10\", or a number in hash notation (e.g.,
@ -3204,11 +3173,12 @@ as names, not numbers."
`(metadata
(display-sort-function
. ,(when (eq read-char-by-name-sort 'code)
#'mule--ucs-names-sort-by-code))
#'mule--ucs-names-sort-by-code))
(affixation-function
. ,(if read-char-by-name-group
#'mule--ucs-names-group
#'mule--ucs-names-affixation))
. ,#'mule--ucs-names-affixation)
(group-function
. ,(when completions-group
#'mule--ucs-names-group))
(category . unicode-name))
(complete-with-action action (ucs-names) string pred)))))
(char