diff options
Diffstat (limited to 'lisp/international/latin1-disp.el')
-rw-r--r-- | lisp/international/latin1-disp.el | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/lisp/international/latin1-disp.el b/lisp/international/latin1-disp.el index fae82cdb8bc..1ab79c4f1ac 100644 --- a/lisp/international/latin1-disp.el +++ b/lisp/international/latin1-disp.el @@ -106,7 +106,7 @@ a Unicode font with which to display them." (if sets (progn (mapc #'latin1-display-setup sets) - (unless (char-displayable-p + (unless (latin1-char-displayable-p (make-char 'mule-unicode-0100-24ff 32 33)) ;; It doesn't look as though we have a Unicode font. (map-char-table @@ -133,7 +133,6 @@ a Unicode font with which to display them." (?\$,1rt(B "--") ;; EM DASH (?\$,1ub(B "TM") ;; TRADE MARK SIGN (?\$,1s:(B ">") ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - (?$,1s"(B ",A7(B") ))) (setq latin1-display t)) (mapc #'latin1-display-reset latin1-display-sets) @@ -221,11 +220,47 @@ character set: `latin-2', `hebrew' etc." (setq language 'cyrillic-iso)) (let* ((info (get-language-info language 'charset)) (char (and info (make-char (car (remq 'ascii info)) ?\ )))) - (and char (char-displayable-p char)))) + (and char (latin1-char-displayable-p char)))) -;; Backwards compatibility. -(defalias 'latin1-char-displayable-p 'char-displayable-p) -(make-obsolete 'latin1-char-displayable-p 'char-displayable-p "21.5") +;; This should be moved into mule-utils or somewhere after 21.1. +(defun latin1-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 256) + ;; Single byte characters are always displayable. + t) + ((display-multi-font-p) + ;; On a window system, a character is displayable if we have + ;; a font for that character in the default face of the + ;; currently selected frame. + (let ((fontset (frame-parameter (selected-frame) 'font)) + font-pattern) + (if (query-fontset fontset) + (setq font-pattern (fontset-font fontset char))) + (or font-pattern + (setq font-pattern (fontset-font "fontset-default" char))) + (if font-pattern + (progn + ;; Now FONT-PATTERN is a string or a cons of family + ;; field pattern and registry field pattern. + (or (stringp font-pattern) + (setq font-pattern (concat "-" + (or (car font-pattern) "*") + "-*-" + (cdr font-pattern)))) + (x-list-fonts font-pattern 'default (selected-frame) 1))))) + (t + (let ((coding (terminal-coding-system))) + (if coding + (let ((safe-chars (coding-system-get coding 'safe-chars)) + (safe-charsets (coding-system-get coding 'safe-charsets))) + (or (and safe-chars + (aref safe-chars char)) + (and safe-charsets + (memq (char-charset char) safe-charsets))))))))) (defun latin1-display-setup (set &optional force) "Set up Latin-1 display for characters in the given SET. @@ -790,7 +825,7 @@ turn it off and display Unicode characters literally. The display is't changed if the display can render Unicode characters." (interactive "p") (if (> arg 0) - (unless (char-displayable-p + (unless (latin1-char-displayable-p (make-char 'mule-unicode-0100-24ff 32 33)) ;; It doesn't look as though we have a Unicode font. (let ((latin1-display-format "%s")) @@ -3209,8 +3244,8 @@ is't changed if the display can render Unicode characters." (?\$,3sc(B "\"") (?\$,3sd(B ",") ;; Not from Lynx - (?$,3r_(B "") - (?$,3u=(B "?"))))) + (?$,3r_(B . "") + (?$,3u=(B . "?"))))) (aset standard-display-table (make-char 'mule-unicode-0100-24ff) nil) (aset standard-display-table @@ -3222,5 +3257,4 @@ is't changed if the display can render Unicode characters." (provide 'latin1-disp) -;;; arch-tag: 68b2872e-d667-4f48-8e2f-ec2ba2d29406 ;;; latin1-disp.el ends here |