comparison lisp/international/mule-cmds.el @ 22986:b5c383369b40

(language-info-alist): Doc-string modified. (reset-language-environment): New function for the job that setup-english-environment used to do. (set-language-environment): Do more setups according to the info in language-info-alist. (read-language-name): Handle the case that the arg KEY is nil. * (describe-language-environment): Handle input-method property.
author Kenichi Handa <handa@m17n.org>
date Mon, 10 Aug 1998 06:29:02 +0000
parents e259bed9247e
children 2a8dbf5b77a8
comparison
equal deleted inserted replaced
22985:596e4e490901 22986:b5c383369b40
505 in effect, as a kind of documentation. 505 in effect, as a kind of documentation.
506 coding-priority value is a list of coding systems for this language 506 coding-priority value is a list of coding systems for this language
507 environment, in order of decreasing priority. 507 environment, in order of decreasing priority.
508 This is used to set up the coding system priority 508 This is used to set up the coding system priority
509 list when you switch to this language environment. 509 list when you switch to this language environment.
510 510 nonascii-translation
511 nonascii-translation-table
512 value is a translation table to be set to the 511 value is a translation table to be set to the
513 variable `nonascii-translation-table' in this 512 variable `nonascii-translation-table' in this
514 language environment. 513 language environment.
515
516 charset-origin-alist 514 charset-origin-alist
517 value is an alist to be set to the variable 515 value is an alist to be set to the variable
518 `charset-origin-alist' in this language environment.") 516 `charset-origin-alist' in this language environment.
517 input-method value is a default input method for this language
518 environment.
519
520 The following keys take effect only when multibyte characters are
521 globally disabled, i.e. the value of `default-enable-multibyte-characters'
522 is nil.
523
524 unibyte-syntax value is a library name to load to set
525 unibyte 8-bit charcater syntaxes for this
526 language environment.
527
528 unibyte-display value is a coding system to encode characters
529 for the terminal. Characters in the range
530 of 160 to 255 display not as octal escapes,
531 but as non-ASCII characters in this language
532 environment.")
519 533
520 (defun get-language-info (lang-env key) 534 (defun get-language-info (lang-env key)
521 "Return information listed under KEY for language environment LANG-ENV. 535 "Return information listed under KEY for language environment LANG-ENV.
522 KEY is a symbol denoting the kind of information. 536 KEY is a symbol denoting the kind of information.
523 For a list of useful values for KEY and their meanings, 537 For a list of useful values for KEY and their meanings,
606 (set-language-info lang-env (car (car alist)) (cdr (car alist))) 620 (set-language-info lang-env (car (car alist)) (cdr (car alist)))
607 (setq alist (cdr alist))))) 621 (setq alist (cdr alist)))))
608 622
609 (defun read-language-name (key prompt &optional default) 623 (defun read-language-name (key prompt &optional default)
610 "Read a language environment name which has information for KEY. 624 "Read a language environment name which has information for KEY.
625 If KEY is nil, read any language environment.
611 Prompt with PROMPT. DEFAULT is the default choice of language environment. 626 Prompt with PROMPT. DEFAULT is the default choice of language environment.
612 This returns a language environment name as a string." 627 This returns a language environment name as a string."
613 (let* ((completion-ignore-case t) 628 (let* ((completion-ignore-case t)
614 (name (completing-read prompt 629 (name (completing-read prompt
615 language-info-alist 630 language-info-alist
616 (function (lambda (elm) (assq key elm))) 631 (and key
632 (function (lambda (elm) (assq key elm))))
617 t nil nil default))) 633 t nil nil default)))
618 (if (and (> (length name) 0) 634 (if (and (> (length name) 0)
619 (get-language-info name key)) 635 (or (not key)
636 (get-language-info name key)))
620 name))) 637 name)))
621 638
622 ;;; Multilingual input methods. 639 ;;; Multilingual input methods.
623 640
624 (defconst leim-list-file-name "leim-list.el" 641 (defconst leim-list-file-name "leim-list.el"
982 :set 'set-language-environment 999 :set 'set-language-environment
983 :initialize 'custom-initialize-default 1000 :initialize 'custom-initialize-default
984 :group 'mule 1001 :group 'mule
985 :type 'string) 1002 :type 'string)
986 1003
1004 (defun reset-language-environment ()
1005 "Reset multilingual environment of Emacs to the default status.
1006
1007 The default status is as follows:
1008
1009 The default value of buffer-file-coding-system is nil.
1010 The default coding system for process I/O is nil.
1011 The default value for the command `set-terminal-coding-system' is nil.
1012 The default value for the command `set-keyboard-coding-system' is nil.
1013
1014 The order of priorities of coding categories and the coding system
1015 bound to each category are as follows
1016 coding category coding system
1017 --------------------------------------------------
1018 coding-category-iso-8-2 iso-latin-1
1019 coding-category-iso-8-1 iso-latin-1
1020 coding-category-iso-7-tight iso-2022-jp
1021 coding-category-iso-7 iso-2022-7bit
1022 coding-category-iso-7-else iso-2022-7bit-lock
1023 coding-category-iso-8-else iso-2022-8bit-ss2
1024 coding-category-emacs-mule emacs-mule
1025 coding-category-raw-text raw-text
1026 coding-category-sjis japanese-shift-jis
1027 coding-category-big5 chinese-big5
1028 coding-category-ccl nil
1029 coding-category-binarry no-conversion
1030 "
1031 (interactive)
1032 ;; This function formerly set default-enable-multibyte-characters to t,
1033 ;; but that is incorrect. It should not alter the unibyte/multibyte choice.
1034
1035 (setq coding-category-iso-7-tight 'iso-2022-jp
1036 coding-category-iso-7 'iso-2022-7bit
1037 coding-category-iso-8-1 'iso-latin-1
1038 coding-category-iso-8-2 'iso-latin-1
1039 coding-category-iso-7-else 'iso-2022-7bit-lock
1040 coding-category-iso-8-else 'iso-2022-8bit-ss2
1041 coding-category-emacs-mule 'emacs-mule
1042 coding-category-raw-text 'raw-text
1043 coding-category-sjis 'japanese-shift-jis
1044 coding-category-big5 'chinese-big5
1045 coding-category-ccl nil
1046 coding-category-binary 'no-conversion)
1047
1048 (set-coding-priority
1049 '(coding-category-iso-8-1
1050 coding-category-iso-8-2
1051 coding-category-iso-7-tight
1052 coding-category-iso-7
1053 coding-category-iso-7-else
1054 coding-category-iso-8-else
1055 coding-category-emacs-mule
1056 coding-category-raw-text
1057 coding-category-sjis
1058 coding-category-big5
1059 coding-category-ccl
1060 coding-category-binary))
1061
1062 (set-default-coding-systems nil)
1063 ;; Don't alter the terminal and keyboard coding systems here.
1064 ;; The terminal still supports the same coding system
1065 ;; that it supported a minute ago.
1066 ;;; (set-terminal-coding-system-internal nil)
1067 ;;; (set-keyboard-coding-system-internal nil)
1068
1069 (setq nonascii-translation-table nil
1070 nonascii-insert-offset 0))
1071
987 (defun set-language-environment (language-name) 1072 (defun set-language-environment (language-name)
988 "Set up multi-lingual environment for using LANGUAGE-NAME. 1073 "Set up multi-lingual environment for using LANGUAGE-NAME.
989 This sets the coding system priority and the default input method 1074 This sets the coding system priority and the default input method
990 and sometimes other things. LANGUAGE-NAME should be a string 1075 and sometimes other things. LANGUAGE-NAME should be a string
991 which is the name of a language environment. For example, \"Latin-1\" 1076 which is the name of a language environment. For example, \"Latin-1\"
992 specifies the character set for the major languages of Western Europe." 1077 specifies the character set for the major languages of Western Europe."
993 (interactive (list (read-language-name 1078 (interactive (list (read-language-name
994 'setup-function 1079 nil
995 "Set language environment (default, English): "))) 1080 "Set language environment (default, English): ")))
996 (if language-name 1081 (if language-name
997 (if (symbolp language-name) 1082 (if (symbolp language-name)
998 (setq language-name (symbol-name language-name))) 1083 (setq language-name (symbol-name language-name)))
999 (setq language-name "English")) 1084 (setq language-name "English"))
1000 (if (null (get-language-info language-name 'setup-function)) 1085 (or (assoc-ignore-case language-name language-info-alist)
1001 (error "Language environment not defined: %S" language-name)) 1086 (error "Language environment not defined: %S" language-name))
1002 (if current-language-environment 1087 (if current-language-environment
1003 (let ((func (get-language-info current-language-environment 1088 (let ((func (get-language-info current-language-environment
1004 'exit-function))) 1089 'exit-function)))
1005 (run-hooks 'exit-language-environment-hook) 1090 (run-hooks 'exit-language-environment-hook)
1006 (if (fboundp func) (funcall func)))) 1091 (if (fboundp func) (funcall func))))
1007 (when (and (not default-enable-multibyte-characters) 1092 (reset-language-environment)
1008 (get-language-info language-name 'unibyte-syntax)) 1093
1009 (set-terminal-coding-system (intern (downcase language-name)))
1010 (standard-display-european-internal))
1011 (setq current-language-environment language-name) 1094 (setq current-language-environment language-name)
1012 (setq nonascii-translation-table 1095 (set-language-environment-coding-systems language-name)
1013 (get-language-info language-name 'nonascii-translation-table)) 1096 (let ((input-method (get-language-info language-name 'input-method)))
1097 (when input-method
1098 (setq default-input-method input-method)
1099 (if input-method-history
1100 (setq input-method-history
1101 (cons input-method
1102 (delete input-method input-method-history))))))
1103 (let ((nonascii (get-language-info language-name 'nonascii-translation)))
1104 (if (char-table-p nonascii)
1105 (setq nonascii-translation-table nonascii)
1106 (if (charsetp nonascii)
1107 (setq nonascii-insert-offset (- (make-char nonascii) 128)))))
1108
1014 (setq charset-origin-alist 1109 (setq charset-origin-alist
1015 (get-language-info language-name 'charset-origin-alist)) 1110 (get-language-info language-name 'charset-origin-alist))
1016 (funcall (get-language-info language-name 'setup-function)) 1111
1112 (unless default-enable-multibyte-characters
1113 ;; Unibyte setups.
1114 (let ((syntax (get-language-info language-name 'unibyte-syntax)))
1115 (if syntax
1116 (let ((set-case-syntax-set-multibyte nil))
1117 (load syntax nil t)
1118 (set-standard-case-table (standard-case-table))
1119 (let ((list (buffer-list)))
1120 (while list
1121 (with-current-buffer (car list)
1122 (set-case-table (standard-case-table)))
1123 (setq list (cdr list)))))))
1124 (let ((coding (get-language-info language-name 'unibyte-display)))
1125 (if coding
1126 (progn
1127 (standard-display-european-internal)
1128 (set-terminal-coding-system coding))
1129 (standard-display-default 160 255)
1130 (aset standard-display-table 146 nil)
1131 (set-terminal-coding-system nil))))
1132
1133 (let ((required-features (get-language-info language-name 'features)))
1134 (while required-features
1135 (require (car required-features))
1136 (setq required-features (cdr required-features))))
1137 (let ((func (get-language-info language-name 'setup-function)))
1138 (if (fboundp func)
1139 (funcall func)))
1017 (run-hooks 'set-language-environment-hook) 1140 (run-hooks 'set-language-environment-hook)
1018 (force-mode-line-update t)) 1141 (force-mode-line-update t))
1019 1142
1020 (defun standard-display-european-internal () 1143 (defun standard-display-european-internal ()
1021 ;; Actually set up direct output of non-ASCII characters. 1144 ;; Actually set up direct output of non-ASCII characters.
1084 (if (stringp str) 1207 (if (stringp str)
1085 (progn 1208 (progn
1086 (princ "Sample text:\n") 1209 (princ "Sample text:\n")
1087 (princ-list " " str) 1210 (princ-list " " str)
1088 (terpri)))) 1211 (terpri))))
1089 (princ "Input methods:\n") 1212 (let ((input-method (get-language-info language-name 'input-method))
1090 (let ((l input-method-alist)) 1213 (l input-method-alist))
1214 (princ "Input methods")
1215 (when input-method
1216 (princ (format " (default, %s)" input-method))
1217 (setq input-method (assoc input-method input-method-alist))
1218 (setq l (cons input-method (delete input-method l))))
1219 (princ ":\n")
1091 (while l 1220 (while l
1092 (if (string= language-name (nth 1 (car l))) 1221 (if (string= language-name (nth 1 (car l)))
1093 (princ-list " " (car (car l)) 1222 (princ-list " " (car (car l))
1094 (format " (`%s' in mode line)" (nth 3 (car l))))) 1223 (format " (`%s' in mode line)" (nth 3 (car l)))))
1095 (setq l (cdr l)))) 1224 (setq l (cdr l))))