diff options
author | Eli Zaretskii <eliz@gnu.org> | 2019-07-13 11:32:18 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-07-13 11:32:18 +0300 |
commit | b2783ba6f4c663556709f524a2ff34f18072e9f3 (patch) | |
tree | d7bdc97efe5a1be3bb459c6fe630c69622f41c5b /lisp/international/mule.el | |
parent | bd962f7fd471a07bae1950976e066ad0c3009532 (diff) | |
download | emacs-b2783ba6f4c663556709f524a2ff34f18072e9f3.tar.gz |
Avoid loading mule-util at startup
* lisp/international/mule-util.el (char-displayable-p): Move
from here...
* lisp/international/mule.el (char-displayable-p): ...to
here. This avoids always loading mule-util at startup due
to a call to 'char-displayable-p' in
'startup--setup-quote-display'.
Diffstat (limited to 'lisp/international/mule.el')
-rw-r--r-- | lisp/international/mule.el | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 21f3118a98e..ec6f6476888 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -481,6 +481,61 @@ Return -1 if charset isn't an ISO 2022 one." (or charset (error "Invalid Emacs-mule charset ID: %d" charset-id)) (make-char charset code1 code2))) + +(defun char-displayable-p (char) + "Return non-nil if we should be able to display CHAR. +On a multi-font display, the test is only whether there is an +appropriate font from the selected frame's fontset to display +CHAR's charset in general. Since fonts may be specified on a +per-character basis, this may not be accurate." + (cond ((< char 128) + ;; ASCII characters are always displayable. + t) + ((not enable-multibyte-characters) + ;; Maybe there's a font for it, but we can't put it in the buffer. + nil) + (t + (let ((font-glyph (internal-char-font nil char))) + (if font-glyph + (if (consp font-glyph) + ;; On a window system, a character is displayable + ;; if a font for that character is in the default + ;; face of the currently selected frame. + (car font-glyph) + ;; On a text terminal supporting glyph codes, CHAR is + ;; displayable if its glyph code is nonnegative. + (<= 0 font-glyph)) + ;; On a text terminal without glyph codes, CHAR is displayable + ;; if the coding system for the terminal can encode it. + (let ((coding (terminal-coding-system))) + (when coding + (let ((cs-list (coding-system-get coding :charset-list))) + (cond + ((listp cs-list) + (catch 'tag + (mapc #'(lambda (charset) + (if (encode-char char charset) + (throw 'tag charset))) + cs-list) + nil)) + ((eq cs-list 'iso-2022) + (catch 'tag2 + (mapc #'(lambda (charset) + (if (and (plist-get (charset-plist charset) + :iso-final-char) + (encode-char char charset)) + (throw 'tag2 charset))) + charset-list) + nil)) + ((eq cs-list 'emacs-mule) + (catch 'tag3 + (mapc #'(lambda (charset) + (if (and (plist-get (charset-plist charset) + :emacs-mule-id) + (encode-char char charset)) + (throw 'tag3 charset))) + charset-list) + nil))))))))))) ;; Save the ASCII case table in case we need it later. Some locales ;; (such as Turkish) modify the case behavior of ASCII characters, |