From e1b674a1383adfb093d02c19554a3c7b7a35c9fe Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 16 Mar 1999 14:14:55 +0000 Subject: [PATCH] (dos-codepage-setup): Compute the unibyte syntax table and bind unibyte-display-via-language-environment here, rather than at top level, so that resetting to unibyte in .emacs works as expected. --- lisp/term/internal.el | 103 +++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/lisp/term/internal.el b/lisp/term/internal.el index c1be9aed3c4..30b0d3d0b7f 100644 --- a/lisp/term/internal.el +++ b/lisp/term/internal.el @@ -274,6 +274,58 @@ list. You can (and should) also run it whenever the value of "-unix")))) (IT-display-table-setup cp) (prefer-coding-system (intern (concat cp "-dos"))) + (if default-enable-multibyte-characters + ;; We want this in multibyte version only, since unibyte version + ;; should not convert non-ASCII characters at all. + (setq unibyte-display-via-language-environment t) + ;; Let the unibyte version behave as Emacs 19 did. In particular, + ;; let it use and display native codepage-specific glyphs for + ;; non-ASCII characters. For this to work correctly, we need to + ;; establish the correspondence between lower-case letters and their + ;; upper-case brethren, as appropriate for the codepage in use. The + ;; code below makes this happen. + ;; (In the multibyte mode, the appropriate tables are prepared + ;; elsewhere, since multibyte Emacs uses normal MULE character sets, + ;; which are supported on all platforms.) + (let* ((i 128) + (modify (function + (lambda (ch sy) + (modify-syntax-entry ch sy text-mode-syntax-table) + (if (boundp 'tex-mode-syntax-table) + (modify-syntax-entry ch sy tex-mode-syntax-table)) + (modify-syntax-entry ch sy (standard-syntax-table)) + ))) + (table (standard-case-table)) + ;; The following are strings of letters, first lower then + ;; upper case. This will look funny on terminals which + ;; display other code pages. In particular, what is + ;; displayed as blanks or triangles are not what they + ;; look lile at all! (Use `C-x =' to see what they + ;; really are.) + (chars + (cond + ((= dos-codepage 850) + "‡€š‚ƒ¶„Ž…·†ÆÇ µˆÒ‰ÓŠÔ‹ØŒ×Þ¡Ö‘’“â”™•ã¢à›–ê£é—ë˜Yìí¡I£é¤¥ÐÑçè") + ((= dos-codepage 865) + "‡€š‚ƒA„Ž…A†ˆE‰EŠE‹IŒII‘’“O”™•O–U£U˜Y› A¡I¢O£U¤¥") + ;; default is 437 + (t "‡€š‚ƒA„Ž…A†ˆE‰EŠE‹IŒII‘’“O”™•O–U£U˜Y A¡I¢O£U¤¥")))) + + (while (< i 256) + (funcall modify i "_") + (setq i (1+ i))) + + (setq i 0) + (while (< i (length chars)) + (let ((ch1 (aref chars i)) + (ch2 (aref chars (1+ i)))) + (if (> ch2 127) + (set-case-syntax-pair ch2 ch1 table)) + (setq i (+ i 2)))) + (save-excursion + (mapcar (lambda (b) (set-buffer b) (set-case-table table)) + (buffer-list))) + (set-standard-case-table table))) ;; Some codepages have sporadic support for Latin-1, Greek, and ;; symbol glyphs, which don't belong to their native character ;; set. It's a nuisance to have all those glyphs here, for all @@ -295,56 +347,5 @@ list. You can (and should) also run it whenever the value of ;; characters to arrive at our display code verbatim. (standard-display-8bit 127 255) -(if default-enable-multibyte-characters - ;; We want this in multibyte version only, since unibyte version - ;; should not convert non-ASCII characters at all. - (setq unibyte-display-via-language-environment t) - ;; Let the unibyte version behave as Emacs 19 did. In particular, - ;; let it use and display native codepage-specific glyphs for - ;; non-ASCII characters. For this to work correctly, we need to - ;; establish the correspondence between lower-case letters and their - ;; upper-case brethren, as appropriate for the codepage in use. The - ;; code below makes this happen. - ;; (In the multibyte mode, the appropriate tables are prepared - ;; elsewhere, since multibyte Emacs uses normal MULE character sets, - ;; which are supported on all platforms.) - (let* ((i 128) - (modify (function - (lambda (ch sy) - (modify-syntax-entry ch sy text-mode-syntax-table) - (if (boundp 'tex-mode-syntax-table) - (modify-syntax-entry ch sy tex-mode-syntax-table)) - (modify-syntax-entry ch sy (standard-syntax-table)) - ))) - (table (standard-case-table)) - ;; The following are strings of letters, first lower then upper case. - ;; This will look funny on terminals which display other code pages. - ;; In particular, what is displayed as blanks are not blanks - ;; at all! (Use `C-x =' to see what they really are.) - (chars - (cond - ((= dos-codepage 850) - "‡€š‚ƒ¶„Ž…·†ÆÇ µˆÒ‰ÓŠÔ‹ØŒ×Þ¡Ö‘’“â”™•ã¢à›–ê£é—ë˜Yìí¡I£é¤¥ÐÑçè") - ((= dos-codepage 865) - "‡€š‚ƒA„Ž…A†ˆE‰EŠE‹IŒII‘’“O”™•O–U£U˜Y› A¡I¢O£U¤¥") - ;; default is 437 - (t "‡€š‚ƒA„Ž…A†ˆE‰EŠE‹IŒII‘’“O”™•O–U£U˜Y A¡I¢O£U¤¥")))) - - (while (< i 256) - (funcall modify i "_") - (setq i (1+ i))) - - (setq i 0) - (while (< i (length chars)) - (let ((ch1 (aref chars i)) - (ch2 (aref chars (1+ i)))) - (if (> ch2 127) - (set-case-syntax-pair ch2 ch1 table)) - (setq i (+ i 2)))) - (save-excursion - (mapcar (lambda (b) (set-buffer b) (set-case-table table)) - (buffer-list))) - (set-standard-case-table table))) - ;;; internal.el ends here -- 2.39.2