From: Kenichi Handa <handa@m17n.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: cyd@stupidchicken.com, emacs-devel@gnu.org
Subject: Re: faster unicode character name completion
Date: Tue, 08 Dec 2009 10:45:56 +0900 [thread overview]
Message-ID: <tl7hbs2fdbf.fsf@m17n.org> (raw)
In-Reply-To: <jwvk4wyj22f.fsf-monnier+emacs@gnu.org> (message from Stefan Monnier on Mon, 07 Dec 2009 09:57:46 -0500)
In article <jwvk4wyj22f.fsf-monnier+emacs@gnu.org>, Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> I don't understand what ucs-name-filter is trying to do.
> > ?? It simply filters out elements that doesn't match with
> > STR from NAMES (alist).
> But then why is it needed?
> Doesn't `completion-table-dynamic' take care of that already?
I don't know. The info says this:
-- Function: completion-table-dynamic function
This function is a convenient way to write a function that can act
as programmed completion function. The argument FUNCTION should be
a function that takes one argument, a string, and returns an alist
of possible completions of it. You can think of
`completion-table-dynamic' as a transducer between that interface
and the interface for programmed completion functions.
I thought that FUNCTION should return an alist that contains
ONLY valid completions.
> But I have a better idea: most of the time is not spent building the
> completion table, but rather just weeding out all the "chars" that don't
> have names, or should I say, looking for the few rare chars that do
> have a name.
> So the patch below seems to eb a good compromise: it uses up just about
> 1000K cons cells (i.e. 16KB on 64bit systems) to keep the precomputed
> set of ~34K chars that do have a name, so that building the completion
> table takes only a couple seconds.
Ah, interesting approach. But, I've just found that
dotimes-with-progress-reporter of the original code didn't
exclude the big unused range U+30000..U+DFFFF (about 75% of
the range currently checked). Just excluding that part in
the original code achieves almost the same performance as
your patch. Attached is that simpler version.
---
Kenichi Handa
handa@m17n.org
(defun ucs-names ()
"Return alist of (CHAR-NAME . CHAR-CODE) pairs cached in `ucs-names'."
(or ucs-names
(let ((ranges
'((#x00000 . #x033FF)
;; (#x03400 . #x04DBF) CJK Ideograph Extension A
(#x04DC0 . #x04DFF)
;; (#x04E00 . #x0x09FFF) CJK Ideograph
(#x0A000 . #x0D7FF)
;; (#x0D800 . #x0FAFF) Surrogate/Private
(#x0FB00 . #x1FFFF)
;; (#x20000 . #xDFFFF) CJK Ideograph Extension A, B, etc, unsed
(#xE0000 . #xE01EF)))
c end name names)
(dolist (range ranges)
(setq c (car range)
end (cdr range))
(while (<= c end)
(if (setq name (get-char-code-property c 'name))
(push (cons name c) names))
(if (setq name (get-char-code-property c 'old-name))
(push (cons name c) names))
(setq c (1+ c))))
(setq ucs-names names))))
next prev parent reply other threads:[~2009-12-08 1:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-30 19:55 Emacs 23.2 pretest freeze? Karl Fogel
2009-11-30 22:48 ` Chong Yidong
2009-11-30 23:05 ` Karl Fogel
2009-12-02 13:34 ` Alan Mackenzie
2009-12-03 21:35 ` Emacs 23.2 Pretest next week Chong Yidong
2009-12-04 11:23 ` faster unicode character name completion Kenichi Handa
2009-12-04 12:08 ` Deniz Dogan
2009-12-04 13:04 ` Juanma Barranquero
2009-12-04 13:26 ` Florian Beck
2009-12-04 15:07 ` Stefan Monnier
2009-12-04 22:38 ` Miles Bader
2009-12-07 2:00 ` Kenichi Handa
2009-12-07 8:13 ` Kenichi Handa
2009-12-07 14:57 ` Stefan Monnier
2009-12-07 20:28 ` Juri Linkov
2009-12-07 21:42 ` Stefan Monnier
2009-12-08 1:59 ` Miles Bader
2009-12-08 1:45 ` Kenichi Handa [this message]
2009-12-08 2:29 ` Stefan Monnier
2009-12-09 0:12 ` Chong Yidong
2009-12-09 0:57 ` Kenichi Handa
2009-12-09 9:02 ` Deniz Dogan
2009-12-04 19:04 ` Emacs 23.2 Pretest next week Dan Nicolaescu
2009-12-04 21:15 ` Chong Yidong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tl7hbs2fdbf.fsf@m17n.org \
--to=handa@m17n.org \
--cc=cyd@stupidchicken.com \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.