1;;; internal.el --- support for PC internal terminal -*- coding: raw-text; no-byte-compile: t -*- 2 3;; Copyright (C) 1993, 1994, 1998, 1999, 2001, 2002, 2003, 2004, 4;; 2005, 2006, 2007 Free Software Foundation, Inc. 5 6;; Author: Morten Welinder <terra@diku.dk> 7 8;; This file is part of GNU Emacs. 9 10;; GNU Emacs is free software; you can redistribute it and/or modify 11;; it under the terms of the GNU General Public License as published by 12;; the Free Software Foundation; either version 2, or (at your option) 13;; any later version. 14 15;; GNU Emacs is distributed in the hope that it will be useful, 16;; but WITHOUT ANY WARRANTY; without even the implied warranty of 17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18;; GNU General Public License for more details. 19 20;; You should have received a copy of the GNU General Public License 21;; along with GNU Emacs; see the file COPYING. If not, write to the 22;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 23;; Boston, MA 02110-1301, USA. 24 25;;; Commentary: 26 27;;; Code: 28 29;; --------------------------------------------------------------------------- 30;; keyboard setup -- that's simple! 31(set-input-mode nil nil 0) 32(define-key function-key-map [backspace] "\177") ; Normal behaviour for BS 33(define-key function-key-map [delete] "\C-d") ; ... and Delete 34(define-key function-key-map [tab] [?\t]) 35(define-key function-key-map [linefeed] [?\n]) 36(define-key function-key-map [clear] [11]) 37(define-key function-key-map [return] [13]) 38(define-key function-key-map [escape] [?\e]) 39(define-key function-key-map [M-backspace] [?\M-\d]) 40(define-key function-key-map [M-delete] [?\M-d]) 41(define-key function-key-map [M-tab] [?\M-\t]) 42(define-key function-key-map [M-linefeed] [?\M-\n]) 43(define-key function-key-map [M-clear] [?\M-\013]) 44(define-key function-key-map [M-return] [?\M-\015]) 45(define-key function-key-map [M-escape] [?\M-\e]) 46(put 'backspace 'ascii-character 127) 47(put 'delete 'ascii-character 127) 48(put 'tab 'ascii-character ?\t) 49(put 'linefeed 'ascii-character ?\n) 50(put 'clear 'ascii-character 12) 51(put 'return 'ascii-character 13) 52(put 'escape 'ascii-character ?\e) 53 54;; ---------------------------------------------------------------------- 55;; DOS display setup 56;; ================= 57;; 58;; DOS can only support a single font. On most systems (with the 59;; possible exception of Far Eastern DOS versions), this means that 60;; two character sets are available at any given time: the ASCII 61;; charset, and a single national charset, usually mapped to codes 62;; above 128 (i.e., with 8th bit set). Which national charset is 63;; supported depends on the codepage loaded by the system when it 64;; boots; usually, this codepage cannot be changed without 65;; rebooting. 66;; 67;; Since each codepage can usually display character of a single 68;; MULE charset, Emacs can display a single MULE charset with the 69;; glyphs of the current codepage. The mapping from DOS codepages 70;; to MULE charsets is established by the charset property of the 71;; cpNNN-decode-table variables in codepage.el, which also 72;; defines translation tables for each such pair, and a bunch of 73;; functions to generate coding systems that use those translation 74;; tables to convert codepage-encoded text to the appropriate MULE 75;; charset and back. When Emacs starts on DOS, it automatically 76;; sets its default coding systems for file I/O and terminal output 77;; according to the currend DOS codepage, given by the 78;; `dos-codepage' variable. 79;; 80;; This leaves us with the problem of displaying character sets 81;; other than the one which maps directly into the current codepage. 82;; The following functions and variables handle this nuisance by 83;; defining a display table where each character that doesn't have a 84;; glyph in some codepage is mapped to a string which represents it. 85;; For example, a small c with cedilla is mapped to the string 86;; "{,c}" (the braces serve as a sign that this is a single 87;; character). A nice feature of the display tables is that Emacs 88;; knows that the string represents a single character, and thus 89;; cursor motion works as you'd expect: a single `C-f' moves past 90;; the entire string which represents a single character. 91;; ---------------------------------------------------------------------- 92 93(defvar IT-character-translations 94 '( 95 (latin-iso8859-1 96 . [255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" 97 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" 98 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2" 99 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" 100 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N" 101 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" 102 "\"U" "Y'" "-P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" 103 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" 104 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" 105 "u'" "u^" "\"u" "y'" "-p" "\"y"] 106 ) 107 (latin-iso8859-2 108 . [255 "A;" "'(" "/L" "$$" "L<" "S'" "SE" "\"" "S<" 109 ",S" "T<" "Z'" "--" "Z<" "Z^." "^o" "a;" "';" "/l" 110 "'" "l<" "s'" "'<" "'," "s<" ",s" "t<" "z'" "'" 111 "z<" "z^." "R'" "A'" "A^" "A(" "\"A" "L'" "C'" ",C" 112 "C<" "E'" "E;" "E:" "E<" "I'" "I^" "D<" "/D" "N'" 113 "N<" "O'" "O^" "O''" "\"O" "*x" "R<" "U^0" "U'" "U''" 114 "\"U" "Y'" ",T" "ss" "r'" "a'" "a^" "a(" "\"a" "l'" 115 "c'" ",c" "c<" "e'" "e;" "\"e" "e<" "i'" "i^" "d<" 116 "/d" "n'" "n<" "o'" "o^" "o''" "\"o" "-:" "r<" "u^0" 117 "u'" "u''" "\"u" "y'" ",t" "'."] 118 ) 119 (latin-iso8859-3 120 . [255 "/H" "'(" "Pd" "$$" " " "H^" "SE" "\"" "I^." 121 ",S" "G(" "J^" "--" " " "Z^." "^o" "/h" "^2" "^3" 122 "'" "u" "h^" "." "'," "i^." ",s" "g(" "j^" "1/2" 123 " " "z^." "`A" "A'" "A^" " " "\"A" "C^." "C^" ",C" 124 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" " " "~N" 125 "`O" "O'" "O^" "G^." "\"O" "*x" "G^" "`U" "U'" "U^" 126 "\"U" "U(" "S^" "ss" "`a" "a'" "a^" " " "\"a" "c^." 127 "c^" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" 128 " " "~n" "`o" "o'" "o^" "g^." "\"o" "-:" "g^" "`u" 129 "u'" "u^" "\"u" "u(" "s^" "^."] 130 ) 131 (latin-iso8859-4 132 . [255 "A;" "kk" ",R" "$$" "?I" ",L" "SE" "\"" "S<" 133 "E-" ",G" "/T" "--" "Z<" "'-" "^o" "a;" "';" ",r" 134 "'" "~i" ",l" "'<" "'," "s<" "e-" ",g" "/t" "NG" 135 "z<" "ng" "A-" "A'" "A^" "~A" "\"A" "Ao" "AE" "I;" 136 "C<" "E'" "E;" "\"E" "E^." "I'" "I^" "I-" "/D" ",N" 137 "O-" ",K" "O^" "~O" "\"O" "*x" "/O" "U;" "U'" "U^" 138 "\"U" "~U" "U-" "ss" "a-" "a'" "a^" "~a" "\"a" "ao" 139 "ae" "i;" "c<" "e'" "e;" "\"e" "e^." "i'" "i^" "i-" 140 "/d" ",n" "o-" ",k" "o^" "~o" "\"o" "-:" "/o" "u;" 141 "u'" "u^" "\"u" "~u" "u-" "^."] 142 ) 143 (cyrillic-iso8859-5 144 . [255 "\"E" "Dj" "Gj" "IE" "Dz" "Ii" "Ji" "JE" "Lj" 145 "Nj" "Ts" "Kj" 240 "V%" "Dzh" 65 "B=" 66 226 146 68 69 "Z%" 51 85 "J=" 75 "L=" 77 72 147 79 "P=" 80 67 84 89 232 88 "C=" "C%" 148 "S%" "Sc" "=\"" "Y=" "%\"" "Ee" "Yu" "Ya" 97 98 149 "v=" "g=" 103 101 "z%" "z=" 117 "j=" 107 "l=" 150 "m=" "n=" 111 110 112 99 "t=" 121 "f=" 120 151 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "yu" "ya" 152 "N0" "\"e" "dj" "gj" "ie" "dz" "ii" "ji" "je" "lj" 153 "nj" "ts" "kj" 21 "v%" "dzh"] 154 ) 155 (arabic-iso8859-6 156 . [255 nil nil nil "$$" nil nil nil nil nil 157 nil nil ",+" "--" nil nil nil nil nil nil 158 nil nil nil nil nil nil nil ";+" nil nil 159 nil "?+" nil "H'" "aM" "aH" "wH" "ah" "yH" 160 "a+" "b+" "tm" "t+" "tk" "g+" "hk" "x+" "d+" "dk" 161 "r+" "z+" "s+" "sn" "c+" "dd" "tj" "zH" "e+" "i+" 162 nil nil nil nil nil "++" "f+" "q+" "k+" "l+" 163 "m+" "n+" "h+" "w+" "j+" "y+" ":+" "\"+" "=+" "/+" 164 "'+" "1+" "3+" "0+" nil nil nil nil nil nil 165 nil nil nil nil nil nil nil] 166 ) 167 (greek-iso8859-7 168 . [255 "9'" "'9" "Pd" nil nil "|" "SE" "\"" "(c)" 169 nil "<<" "~" "--" nil "-M" "^o" "+-" "^2" "^3" 170 "'" "'%" "'A" "^." "'E" "'H" "'I" ">>" "'O" "1/2" 171 "'Y" "W%" "i3" 65 66 "G*" "D*" 69 90 72 172 "TH" 73 74 "L*" 77 78 "C*" 79 "P*" 80 173 nil "S*" 84 89 "F*" 88 "Q*" "W*" "\"I" "\"Y" 174 "a%" "e%" "y%" "i%" "u3" "a*" "b*" "g*" "d*" "e*" 175 "z*" "y*" "h*" "i*" 107 "l*" "m*" "n*" "c*" 111 176 "p*" "r*" "*s" "s*" "t*" 117 "f*" "x*" "q*" "w*" 177 "\"i" "\"u" "'o" "'u" "'w" nil] 178 ) 179 ;; Note: some of the characters undefined according to ISO 8859-8 180 ;; in the ranges 190..220 and 250..255 are replaced with SI 1311-1 181 ;; points (Niqud) and bidi formatting characters 182 (hebrew-iso8859-8 183 . [255 nil "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" 184 "*x" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" 185 "'" "u" ".P" "^." "'," "^1" "-:" ">>" "1/4" "1/2" 186 "3/4" nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'" 187 "-," "`." nil "\\." "(.)" "|'" "`-" "`=" "||" nil 188 nil "::" nil nil nil nil nil nil nil "LRO" 189 "RLO" "PDF" nil "=2" "A+" "B+" "G+" "D+" "H+" "W+" 190 "Z+" "X+" "Tj" "J+" "K%" "K+" "L+" "M%" "M+" "N%" 191 "N+" "S+" "E+" "P%" "P+" "Zj" "ZJ" "Q+" "R+" "Sh" 192 "T+" "LRE" "RLE" "LRM" "RLM" nil] 193 ) 194 (latin-iso8859-9 195 . [255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" 196 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" 197 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2" 198 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" 199 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "G(" "~N" 200 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" 201 "\"U" "I^." ",S" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" 202 "ae" ",c" "`e" "e'" "e<" "\"e" "e^." "i'" "i^" "i-" 203 "g(" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" 204 "u'" "u^" "\"u" "i." ",s" "\"y"] 205 ) 206 (latin-iso8859-14 207 . [255 "B`" "b`" "Pd" "C`" "c`" "D`" "SE" "`W" "(c)" 208 "W'" "d`" "`Y" "--" "(R)" "\"Y" "F`" "f`" "G`" "g`" 209 "M`" "m`" ".P" "P`" "`w" "p`" "w'" "S`" "`y" "\"W" 210 "\"w" "s`" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" 211 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "W^" "~N" 212 "`O" "O'" "O^" "~O" "\"O" "T`" "/O" "`U" "U'" "U^" 213 "\"U" "Y'" "Y^" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" 214 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" 215 "w^" "~n" "`o" "o'" "o^" "~o" "\"o" "t`" "/o" "`u" 216 "u'" "u^" "\"u" "y'" "y^" "\"y"] 217 ) 218 (latin-iso8859-15 219 . [255 "!I" "|c" "Pd" "E=" "Ye" "S<" "SE" "s<" "(c)" 220 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" 221 "Z<" "u" ".P" "^." "z<" "^1" "_o" ">>" "OE" "oe" 222 "\"Y" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" 223 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N" 224 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" 225 "\"U" "Y'" "|P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" 226 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" 227 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" 228 "u'" "u^" "\"u" "y'" "|p" "\"y"] 229 ) 230 ) 231 "An alist of MULE ISO-8859 character sets and the strings that 232should be used to represent the characters from each set on a DOS 233terminal which does not have corresponding glyphs built into the 234installed codepage.") 235 236(defun IT-display-table-setup (codepage &optional table) 237 "Set up display table TABLE for a DOS terminal which supports 238glyphs built into the codepage CODEPAGE. 239 240If TABLE is nil or omitted, `standard-display-table' is used." 241 (let* ((surrogates IT-character-translations) 242 (disp-tab (or table standard-display-table)) 243 (built-in-set (cp-charset-for-codepage codepage)) 244 (offset (cp-offset-for-codepage codepage)) 245 (cp-decoder 246 (symbol-value (intern-soft (format "%s-decode-table" codepage)))) 247 (cp-decoder-len (length cp-decoder)) 248 (c offset) 249 association chset) 250 ;; Undo the effects of previous call (where they may have used 251 ;; a different codepage) by reverting the display table for the 252 ;; built-in charset to its pristine shape. 253 (while (< c 256) 254 (aset disp-tab (make-char built-in-set c) nil) 255 (setq c (1+ c))) 256 (while surrogates 257 (setq association (car surrogates)) 258 (setq chset (car association)) 259 (let* ((vector (cdr association)) 260 (veclen (length vector)) 261 (i 0) 262 glyph) 263 (while (< i veclen) 264 (setq glyph (aref vector i)) 265 (or glyph (setq glyph dos-unsupported-char-glyph)) 266 (if (or (not (equal chset built-in-set)) 267 (>= i cp-decoder-len) 268 (null (aref cp-decoder i))) 269 (aset disp-tab (make-char chset (+ i (logand offset 127))) 270 (vconcat 271 (if (numberp glyph) 272 (char-to-string glyph) 273 (if (> (length glyph) 1) (concat "{" glyph "}") 274 glyph))))) 275 (setq i (1+ i)))) 276 (setq surrogates (cdr surrogates))))) 277 278(defvar IT-unicode-translations 279 '( 280 (mule-unicode-0100-24ff ; charset 281 256 ; base 282 256 563 ; first, last 283 [ "A-" "a-" "A(" "a(" "A;" "a;" "C'" "c'" "C>" "c>" ; Latin Extended-A 284 "C." "c." "C<" "c<" "D<" "d<" "D/" "d/" "E-" "e-" 285 "E(" "e(" "E." "e." "E;" "e;" "E<" "e<" "G>" "g>" 286 "G(" "g(" "G." "g." "G," "g," "H>" "h>" "H/" "h/" 287 "I~" "i~" "I-" "i-" "I(" "i(" "I;" "i;" "I." "i." 288 "IJ" "ij" "J>" "j>" "K," "k," "kk" "L'" "l'" "L," 289 "l," "L<" "l<" "L." "l." "L/" "l/" "N'" "n'" "N," 290 "n," "N<" "n<" "'n" "NG" "ng" "O-" "o-" "O(" "o(" 291 "O\"" "o\"" "OE" "oe" "R'" "r'" "R," "r," "R<" "r<" 292 "S'" "s'" "S>" "s>" "S," "s," "S<" "s<" "T," "t," 293 "T<" "t<" "T/" "t/" "U~" "u~" "U-" "u-" "U(" "u(" 294 "U0" "u0" "U\"" "u\"" "U;" "u;" "W>" "w>" "Y>" "y>" 295 "Y:" "Z'" "z'" "Z." "z." "Z<" "z<" "s1" ; 017f 296 "b/" "B2" "=B" "=b" "B6" "b6" "!C" "C2" "c2" "-D" ;Lat. Extended-B 297 "D2" "=D" "=d" "!d" "!E" "-E" "Eps" "F2" "f2" "G2" 298 "V0" "hv" "io" "-I" "K2" "k2" "-l" "la-" "!M" "2N" 299 "n_" "-O" "O9" "o9" "OI" "oi" "P2" "p2" "'R" "!S" 300 "!s" "Esh" "!esh" "t~" "T2" "t2" "T~" "U9" "u9" "Ups" 301 "V2" "Y2" "y2" "Z/" "z/" "ED" "!ED" "!ed" "ed;" "2/" 302 "5-" "_5-" "ts" "wn" "|_" "||" "|=" "!_" "DZ<" "Dz<" 303 "dz<" "LJ3" "Lj3" "lj3" "NJ3" "Nj3" "nj3" "A<" "a<" "I<" 304 "i<" "O<" "o<" "U<" "u<" "U:-" "u:-" "U:'" "u:'" "U:<" 305 "u:<" "U:!" "u:!" "e1" "A:-" "a:-" "A.-" "a.-" "AE-" "ae-" 306 "G/" "g/" "G<" "g<" "K<" "k<" "O;" "o;" "O1" "o1" 307 "EZ" "ez" "j<" "DZ3" "Dz3" "dz3" "G'" "g'" "Hv" "Wn" 308 "N`" "n`" "AA'" "aa'" "AE'" "ae'" "O/'" "o/'" "A!!" "a!!" 309 "A)" "a)" "E!!" "e!!" "E)" "e)" "I!!" "i!!" "I)" "i)" 310 "O!!" "o!!" "O)" "o)" "R!!" "r!!" "R)" "r)" "U!!" "u!!" 311 "U)" "u)" ",S" ",s" ",T" ",t" "'3" "'3_" "H<" "h<" 312 nil nil "8" "8_" "Z2" "z2" "A." "a." "E," "e," 313 "O:-" "o:-" "O~-" "o~-" "O." "o." "O.-" "o.-" "Y-" "y-"] ; 0x233 314 315 ) 316 317 (mule-unicode-0100-24ff ; charset 318 256 ; base 319 884 1123 ; first, last 320 [ "'" "," nil nil nil nil "j3" nil nil nil ; Greek 321 "?;" nil nil nil nil nil "'*" "'%" "A%" ".*" 322 "E%" "Y%" "I%" nil "O%" nil "U%" "W%" "i3" "A*" 323 "B*" "G*" "D*" "E*" "Z*" "H*" "Th*" "I*" "K*" "L*" 324 "M*" "N*" "C*" "O*" "P*" "R*" nil "S*" "T*" "U*" 325 "F*" "X*" "Q*" "W*" "J*" "V*" "a%" "e%" "y%" "i%" 326 "u3" "a*" "b*" "g*" "d*" "e*" "z*" "h*" "th*" "i*" 327 "k*" "l*" "m*" "n*" "c*" "o*" "p*" "r*" "*s" "s*" 328 "t*" "u*" "f*" "x*" "q*" "w*" "j*" "v*" "o%" "u%" 329 "w%" nil "b3" "th%" "U2*" "'U2*" "U:2*" "ph*" "pi*" "ka*" 330 nil nil "Sti" "sti" "Dig" "dig" "Kop" "kop" "Sam" "sam" 331 "She" "she" "Fei" "fei" "Khe" "khe" "Hor" "hor" "Gan" "gan" 332 "Shi" "shi" "Dei" "dei" "ka*" "rh*" "ls*" "yo*" nil nil 333 nil nil nil nil nil nil nil nil nil nil 334 "IE'" "E:" "D%" "G%" "IE" "DS" "II" "YI" "J%" "LJ" ; Cyrillic 335 "NJ" "Ts" "KJ" "`I=" "V%" "DZ" 65 "B=" 66 "G=" 336 68 69 "Z%" 51 85 "J=" 75 "L=" 77 72 337 79 "P=" 80 67 84 89 "F=" 88 "C=" "C%" 338 "S%" "Sc" "=\"" "Y=" "%\"" "Ee" "JU" "JA" 97 "b=" 339 98 "g=" 103 101 "z%" "z=" 117 "j=" 107 "l=" 340 109 "n=" 111 "p=" 112 99 "t=" 121 "f=" 120 341 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "ju" "ja" 342 "ie'" "e:" "d%" "g%" "ie" "ds" "ii" "yi" "j%" "lj" 343 "nj" "ts" "kj" "v%" "`i=" "dz" "OM=" "om=" "Y3" "y3"] ; 0x463 344 ) 345 346 (mule-unicode-0100-24ff ; charset 347 256 ; base 348 1454 1645 ; first, last 349 [ nil nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'" 350 "-," "`." nil "\\." "(.)" "|'" "`-" nil "||" nil 351 nil "::" nil nil nil nil nil nil nil nil 352 nil nil nil nil 353 "A+" "B+" "G+" "D+" "H+" "W+" "Z+" "X+" "Tj" "J+" ; Hebrew 354 "K%" "K+" "L+" "M%" "M+" "N%" "N+" "S+" "E+" "P%" 355 "P+" "Zj" "ZJ" "Q+" "R+" "Sh" "T+" nil nil nil 356 nil nil "WW+" "WJ+" "JJ+" "'+" "\"+" nil nil nil 357 nil nil nil nil nil nil nil nil nil nil 358 nil nil nil nil nil nil nil nil nil nil 359 ",+" nil nil nil nil nil nil nil nil nil ; Arabic 360 nil nil nil nil nil ";+" nil nil nil "?+" 361 nil "H'" "aM" "aH" "wH" "ah" "yH" "a+" "b+" "tm" 362 "t+" "tk" "g+" "hk" "x+" "d+" "dk" "r+" "z+" "s+" 363 "sn" "c+" "dd" "tj" "zH" "e+" "i+" nil nil nil 364 nil nil "++" "f+" "q+" "k+" "l+" "m+" "n+" "h+" 365 "w+" "j+" "y+" ":+" "\"+" "=+" "/+" "'+" "1+" "3+" 366 "0+" nil nil nil nil nil nil nil nil nil 367 nil nil nil nil "0a" "1a" "2a" "3a" "4a" "5a" 368 "6a" "7a" "8a" "9a" "a%" "a." "a," "a*" ] 369 ) 370 371 (mule-unicode-0100-24ff ; charset 372 256 ; base 373 7680 9450 ; first, last 374 [ "A-0" "a-0" "B." "b." "B-." "b-." "B_" "b_" "C,'" "c,'" ; Lat Ext Add 375 "D." "d." "D-." "d-." "D_" "d_" "D," "d," "D->" "d->" 376 "E-!" "e-!" "E-'" "e-'" "E->" "e->" "E-?" "e-?" "E,(" "e,(" 377 "F." "f." "G-" "g-" "H." "h." "H-." "h-." "H:" "h:" 378 "H," "h," "H-(" "h-(" "I-?" "i-?" "I:'" "i:'" "K'" "k'" 379 "K-." "k-." "K_" "k_" "L-." "l-." "_L-." "_l-." "L_" "l_" 380 "L->" "l->" "M'" "m'" "M." "m." "M-." "m-." "N." "n." 381 "N-." "n-." "N_" "n_" "N->" "n->" "O?'" "o?'" "O?:" "o?:" 382 "O-!" "o-!" "O-'" "o-'" "P'" "p'" "P." "p." "R." "r." 383 "R-." "r-." "_R-." "_r-." "R_" "r_" "S." "s." "S-." "s-." 384 "S'." "s'." "S<." "s<." ".S-." ".s-." "T." "t." "T-." "t-." 385 "T_" "t_" "T->" "t->" "U_:" "u_:" "U-?" "u-?" "U->" "u->" 386 "U?'" "u?'" "U-:" "u-:" "V?" "v?" "V-." "v-." "W!" "w!" 387 "W'" "w'" "W:" "w:" "W." "w." "W-." "w-." "X." "x." 388 "X:" "x:" "Y." "y." "Z>" "z>" "Z-." "z-." "Z_" "z_" 389 "h_" "t:" "w0" "y0" "a))" "s1." nil nil nil nil 390 "A-." "a-." "A2" "a2" "A>'" "a>'" "A>!" "a>!" "A>2" "a>2" 391 "A>~" "a>~" ".A>" ".a>" "A('" "a('" "A(!" "a(!" "A(2" "a(2" 392 "A(~" "a(~" ".A(" ".a(" "E-." "e-." "E2" "e2" "E~" "e~" 393 "E>'" "e>'" "E>!" "e>!" "E>2" "e>2" "E>~" "e>~" ".E>" ".e>" 394 "I2" "i2" "I-." "i-." "O-." "o-." "O2" "o2" "O>'" "o>'" 395 "O>!" "o>!" "O>2" "o>2" "O>~" "o>~" ".O>" ".o>" "O9'" "o9'" 396 "O9!" "o9!" "O92" "o92" "O9~" "o9~" ".O9" ".o9" "U-." "u-." 397 "U2" "u2" "U9'" "u9'" "U9!" "u9!" "U92" "u92" "U9~" "u9~" 398 ".U9" ".u9" "Y!" "y!" "Y-." "y-." "Y2" "y2" "Y~" "y~" 399 nil nil nil nil nil nil "a*," "a*;" nil nil ; Greek Ext (0x1f00) 400 nil nil nil nil "A*," "A*;" nil nil nil nil 401 nil nil "e*," "e*;" nil nil nil nil nil nil 402 "E*," "E*;" nil nil nil nil nil nil "y*," "y*;" 403 nil nil nil nil nil nil "Y*," "Y*;" nil nil 404 nil nil nil nil "i*," "i*;" nil nil nil nil 405 nil nil "I*," "I*;" nil nil nil nil nil nil 406 "o*," "o*;" nil nil nil nil nil nil "O*," "O*;" 407 nil nil nil nil nil nil "u*," "u*;" nil nil 408 nil nil nil nil nil "U*;" nil nil nil nil 409 nil nil "w*," "w*;" nil nil nil nil nil nil 410 "W*," "W*;" nil nil nil nil nil nil "a*!" "a*'" 411 "e*!" "e*'" "y*!" "y*'" "i*!" "i*'" "o*!" "o*'" "u*!" "u*'" 412 "w*!" "w*'" nil nil nil nil nil nil nil nil 413 nil nil nil nil nil nil nil nil nil nil 414 nil nil nil nil nil nil nil nil nil nil 415 nil nil nil nil nil nil nil nil nil nil 416 nil nil nil nil nil nil nil nil nil nil 417 nil nil "a*(" "a*-" nil "a*j" nil nil "a*~" nil 418 "A*(" "A*-" "A*!" "A*'" "A*J" ")*" "J3" ",," "?*" "?:" 419 nil "y*j" nil nil "y*?" nil "E*!" "E*'" "Y*!" "Y*'" 420 "Y*J" ",!" ",'" "?," "i*(" "i*-" nil nil nil nil 421 "i*?" nil "I*(" "I*-" "I*!" "I*'" nil ";!" ";'" "?;" 422 "u*(" "u*-" nil nil "r*," "r*;" "u*?" nil "U*(" "U*-" 423 "U*!" "U*'" "R*;" "!:" ":'" "!*" nil nil nil "w*j" 424 nil nil "w*?" nil "O*!" "O*'" "W*!" "W*'" "W*J" "/*" 425 ";;" nil nil nil "1N" "1M" "3M" "4M" "6M" nil ; Gen Punct 426 nil "1T" "1H" nil nil nil "LRM" "RLM" "-1" nil 427 nil "--" "---" "===" "!2" "=2" "6`" "'9" ".9" "9'" 428 "``" "''" ":9" "9``" "/-" "/=" "sb" "3b" nil ".." 429 "..." ".-" "LSep" "PSep" "LR[" "RL[" "PDF" "LRO" "RLO" 255 430 "%o" "%oo" "'" "''" "\"'" "`" "``" "```" ".^" "<," 431 ",>" ":X" "!!" "?!" "'-" nil nil nil nil "-b" 432 "/f" nil nil nil nil nil nil nil nil nil 433 nil nil nil nil nil nil nil nil nil nil 434 nil nil nil nil nil nil nil nil nil nil 435 nil nil nil nil nil nil nil nil nil nil 436 nil nil nil nil "^0" nil nil nil "^4" "^5" 437 "^6" "^7" "^8" "^9" "^+" "^-" "^=" "^(" "^)" "^n" 438 "_0" "_1" "_2" "_3" "_4" "_5" "_6" "_7" "_8" "_9" 439 "_+" "_-" "_=" "_(" "_)" nil nil nil nil nil 440 nil nil nil nil nil nil nil nil nil nil 441 nil nil nil nil nil "Ff" "Li" nil nil "Pt" 442 nil "W=" "NIS" nil "E=" nil nil nil nil nil 443 nil nil nil nil nil nil nil nil nil nil 444 nil nil nil nil nil nil nil nil nil nil 445 nil nil nil nil nil nil nil nil nil nil 446 nil nil nil nil nil nil nil nil nil nil 447 nil nil nil nil nil nil nil nil nil nil 448 nil nil nil nil nil nil nil nil nil nil 449 nil nil nil nil nil nil nil nil nil nil 450 nil nil nil nil nil nil nil nil "a/c" "a/s" 451 nil "oC" nil "c/o" "c/u" "=e" nil "oF" nil nil 452 nil nil "-h" "=h" nil nil nil nil nil nil 453 "N0" "PO" nil nil nil nil "Re" nil "Rx" nil 454 "SM" "TEL" "TM" nil nil nil "Om" nil nil nil 455 "oK" "AO" nil nil "Est" nil nil nil nil nil 456 nil "Aleph" "Bet" "Gimel" "Dalet" "=i=" nil nil nil nil 457 nil nil nil nil nil nil nil nil nil nil 458 nil nil nil nil nil nil nil nil nil nil 459 nil "1/3" "2/3" "1/5" "2/5" "3/5" "4/5" "1/6" "5/6" "1/8" 460 "3/8" "5/8" "7/8" "1/" ".I" "II" "III" "IV" ".V" "VI" 461 "VII" "VIII" "IX" "X" "XI" "XII" ".L" ".C" ".D" ".M" 462 ".i" "ii" "iii" "iv" ".v" "vi" "vii" "viii" "ix" ".x" 463 "xi" ".l" ".c" ".d" ".m" "CD" "DD" "CoD" "CI" nil 464 nil nil nil nil nil nil nil nil nil nil 465 nil "<-" "|^" "->" "|v" "<->" "v|^" "^\\" "/^" "\\v" 466 "v/" "<-/" "/->" "<~" "~>" "<<-" "|^^" "->>" "|vv" "<-<" 467 ">->" "<-|" "_|^" "|->" "-|v" "_v|^" "<-?" "?->" "<-o" "o->" 468 "<~>" "<-/>" nil nil nil nil nil nil nil nil 469 nil nil nil nil nil nil nil nil nil nil 470 nil nil nil nil nil nil nil nil nil nil 471 nil nil nil "<=/" "<=/>" "/=>" "<=" "||^" "=>" "||v" 472 "<=>" "v||^" "^\\\\" "//^" "\\\\v" "v//" "<-=" "=->" nil nil 473 nil nil "<.." ":^" "..>" ":v" nil nil "<::" "::^" 474 "::>" "::v" nil nil nil nil nil nil nil nil 475 nil nil nil nil nil nil nil nil nil nil 476 nil nil nil nil "FA" "C." "dP" "TE" "~TE" "/0" 477 "DE" "NB" "(-" "~(-" "e-" "-)" "~-)" "-e" "QED" "*P" 478 nil "+Z" "--" "-+" ".+" "./" ".\\" "*-" "Ob" "Sb" 479 "SQR" "CBR" nil "0(" "00" "-L" "-V" nil nil ".|" 480 "~.|" "||" "/||" "AND" "OR" "(U" ")U" "In" "DI" nil 481 "Io" nil nil nil nil nil ".:" ":." ":R" "::" 482 ".-." "-:" ":-:" ":~:" "?~" "~?" "??" nil nil "/~" 483 "-~" "~-" "/~-" "~=" "~/=" "/~=" "~~" "/~~" nil nil 484 "=?" ")(" "v^" "^_" ".=" "=;" ".=." nil ":=" "=:" 485 nil "=o" "=)" "=^" "=v" "*=" "=<>" "=df" nil "?=" 486 "!=" "-=" "!-=" "==" "=<" ">=" nil nil nil nil 487 "<<" ">>" "()" "/)(" "!<" "!>" nil nil nil nil 488 nil nil nil nil nil nil "<'" "`>" "=<'" "`>=" 489 "~<'" "`>~" "/<'" "/`>" "(C" ")C" "/(C" "/)C" "(_" ")_" 490 "/(_" "/)_" nil nil nil nil nil nil nil nil 491 nil nil nil "0+" "0-" "0x" "0/" "0." "0o" "0*" 492 "0=" "0_" nil nil nil nil "|T" "T|" "-T" "_T" 493 nil nil nil nil nil nil nil nil nil nil 494 nil nil nil nil nil nil nil nil nil "-,-" 495 nil "XOR" "NAND" "NOR" nil nil nil nil nil nil 496 nil nil nil nil nil nil nil nil nil nil 497 nil nil nil nil nil nil nil nil "<." ".>" 498 "<<<" ">>>" nil nil nil nil nil nil nil nil 499 nil nil nil nil nil nil nil nil nil nil 500 nil nil ":3" "..." nil nil nil nil nil nil 501 nil nil nil nil nil nil nil nil nil nil 502 nil nil "Eh" nil nil nil nil nil "<7" ">7" 503 "7<" "7>" nil nil nil nil "~I" nil "(A" nil 504 nil "TR" nil "=||" "88" nil nil nil nil nil 505 nil nil "Iu" "Il" nil nil "-^-" "-`-" "D->" nil 506 nil "</" "/>" "<-D" nil nil nil nil nil nil 507 nil nil nil nil nil nil nil nil nil nil 508 nil nil nil nil nil nil nil nil nil nil 509 nil nil nil nil nil nil nil nil nil nil 510 nil nil nil nil nil nil nil nil nil nil 511 nil nil nil nil nil nil nil nil nil nil 512 nil nil nil nil nil nil nil nil nil nil 513 nil nil nil nil nil nil nil nil nil nil 514 nil nil nil nil nil nil nil nil nil nil 515 nil nil nil nil nil nil nil nil nil nil 516 nil nil nil nil nil nil nil nil nil nil 517 nil nil nil nil nil nil nil nil nil nil 518 nil nil nil nil nil nil nil nil nil nil 519 nil nil nil nil nil nil nil nil nil nil 520 nil nil nil nil nil nil nil nil nil nil 521 nil nil nil nil nil nil nil nil nil nil 522 nil nil nil nil nil nil nil nil nil nil 523 nil nil nil nil nil nil nil nil nil nil 524 nil nil nil nil nil nil nil nil nil nil 525 nil nil nil nil nil nil nil nil nil nil 526 nil nil nil nil nil nil nil nil nil nil 527 nil nil nil nil nil nil "NUL" "SOH" "STX" "ETX" 528 "EOT" "ENQ" "ACK" "BEL" "BS" "HT" "LF" "VT" "FF" "CR" 529 "SS" "SI" "DLE" "DC1" "DC2" "DC3" "DC4" "NAK" "SYN" "ETB" 530 "CAN" "EM" "SUB" "ESC" "FS" "GS" "RS" "US" "SP" "DEL" 531 "b/" ",_," "NL" nil "?^" nil nil nil nil nil 532 nil nil nil nil nil nil nil nil nil nil 533 nil nil nil nil nil nil nil nil nil nil 534 nil nil nil nil nil nil nil nil nil nil 535 nil nil nil nil nil nil nil nil nil nil 536 nil nil nil nil nil nil nil nil nil nil 537 nil nil "1-o" "2-o" "3-o" "4-o" "5-o" "6-o" "7-o" "8-o" 538 "9-o" "10-o" "11-o" "12-o" "13-o" "14-o" "15-o" "16-o" "17-o" "18-o" 539 "19-o" "20-o" "(1)" "(2)" "(3)" "(4)" "(5)" "(6)" "(7)" "(8)" 540 "(9)" "(10)" "(11)" "(12)" "(13)" "(14)" "(15)" "(16)" "(17)" "(18)" 541 "(19)" "(20)" "1." "2." "3." "4." "5." "6." "7." "8." 542 "9." "10." "11." "12." "13." "14." "15." "16." "17." "18." 543 "19." "20." "(a)" "(b)" "(c)" "(d)" "(e)" "(f)" "(g)" "(h)" 544 "(i)" "(j)" "(k)" "(l)" "(m)" "(n)" "(o)" "(p)" "(q)" "(r)" 545 "(s)" "(t)" "(u)" "(v)" "(w)" "(x)" "(y)" "(z)" "A-o" "B-o" 546 "C-o" "D-o" "E-o" "F-o" "G-o" "H-o" "I-o" "J-o" "K-o" "L-o" 547 "M-o" "N-o" "O-o" "P-o" "Q-o" "R-o" "S-o" "T-o" "U-o" "V-o" 548 "W-o" "X-o" "Y-o" "Z-o" "a-o" "b-o" "c-o" "d-o" "e-o" "f-o" 549 "g-o" "h-o" "i-o" "j-o" "k-o" "l-o" "m-o" "n-o" "o-o" "p-o" 550 "q-o" "r-o" "s-o" "t-o" "u-o" "v-o" "w-o" "x-o" "y-o" "z-o" 551 "0-o" ] 552 ) 553 ) 554 555 "A list of mule-unicode-* character sets and the strings that 556should be used to represent the characters from each set on a DOS 557terminal which does not have corresponding glyphs built into the 558installed codepage.") 559 560(defun IT-setup-unicode-display (&optional table) 561 "Set up display table TABLE for displaying mule-unicode-* characters 562on a DOS terminal. If TABLE is nil or omitted, `standard-display-table' 563is used." 564 (interactive) 565 (let ((disp-tab (or table standard-display-table)) 566 (tail IT-unicode-translations) 567 translation) 568 (while tail 569 (setq translation (car tail) tail (cdr tail)) 570 (let* ((chset (car translation)) 571 (base (nth 1 translation)) 572 (first (nth 2 translation)) 573 (last (nth 3 translation)) 574 (table (nth 4 translation)) 575 (i 0) 576 (this (- first base)) 577 glyph) 578 (while (<= i (- last first)) 579 (setq glyph (aref table i)) 580 (or glyph (setq glyph dos-unsupported-char-glyph)) 581 (aset disp-tab (make-char chset 582 (+ (/ this 96) 32) 583 (+ (% this 96) 32)) 584 (vconcat 585 (if (numberp glyph) 586 (char-to-string glyph) 587 (if (> (length glyph) 1) (concat "{" glyph "}") 588 glyph)))) 589 (setq i (1+ i) this (1+ this))))))) 590 591(defun dos-cpNNN-setup (codepage) 592 "Set up the MULE environment using the DOS codepage CODEPAGE. 593 594This function creates the coding system cpNNN (where NNN is the value 595of the argument CODEPAGE), and then uses this coding system to set up 596display tables, and the language environment options as appropriate." 597 (let* ((cp (format "cp%s" codepage)) 598 (charset (cp-charset-for-codepage cp)) 599 (offset (cp-offset-for-codepage cp))) 600 (cp-make-coding-systems-for-codepage cp charset offset) 601 ;; This is done by set-language-environment. 602 ;;(setq nonascii-translation-table 603 ;; (symbol-value (intern (concat cp "-nonascii-translation-table")))) 604 (set-language-environment (cp-language-for-codepage cp)) 605 (set-default-coding-systems (intern (concat cp "-dos"))) 606 (set-selection-coding-system (intern (concat cp "-dos"))) 607 (set-terminal-coding-system 608 (setq default-terminal-coding-system (intern (concat cp 609 "-unix")))) 610 (IT-display-table-setup cp) 611 ;; It's time: too many input methods in leim/quail produce 612 ;; Unicode characters. Let the user see them. 613 (IT-setup-unicode-display) 614 (prefer-coding-system (intern (concat cp "-dos"))) 615 (if default-enable-multibyte-characters 616 ;; We want this in multibyte version only, since unibyte version 617 ;; should not convert non-ASCII characters at all. 618 (setq unibyte-display-via-language-environment t) 619 ;; Let the unibyte version behave as Emacs 19 did. In particular, 620 ;; let it use and display native codepage-specific glyphs for 621 ;; non-ASCII characters. For this to work correctly, we need to 622 ;; establish the correspondence between lower-case letters and their 623 ;; upper-case brethren, as appropriate for the codepage in use. The 624 ;; code below makes this happen. 625 ;; (In the multibyte mode, the appropriate tables are prepared 626 ;; elsewhere, since multibyte Emacs uses normal MULE character sets, 627 ;; which are supported on all platforms.) 628 (let* ((i 128) 629 (modify (function 630 (lambda (ch sy) 631 (modify-syntax-entry ch sy text-mode-syntax-table) 632 (if (boundp 'tex-mode-syntax-table) 633 (modify-syntax-entry ch sy tex-mode-syntax-table)) 634 (modify-syntax-entry ch sy (standard-syntax-table)) 635 ))) 636 (table (standard-case-table)) 637 ;; The following are strings of letters, first lower then 638 ;; upper case. This will look funny on terminals which 639 ;; display other code pages. In particular, what is 640 ;; displayed as blanks or triangles are not what they 641 ;; look like at all! (Use `C-x =' to see what they 642 ;; really are.) 643 (chars 644 (cond 645 ((= codepage 850) 646 "���������������Ǡ��҉ӊԋ،ޡ֑��┙���������Y��I�餥����") 647 ((= codepage 865) 648 "�������A���A���E�E�E�I�I�I���O���O�U�U�Y���A�I�O�U��") 649 ;; default is 437 650 (t "�������A���A���E�E�E�I�I�I���O���O�U�U�Y�A�I�O�U��")))) 651 652 (while (< i 256) 653 (funcall modify i "_") 654 (setq i (1+ i))) 655 656 (setq i 0) 657 (while (< i (length chars)) 658 (let ((ch1 (aref chars i)) 659 (ch2 (aref chars (1+ i)))) 660 (if (> ch2 127) 661 (set-case-syntax-pair ch2 ch1 table)) 662 (setq i (+ i 2)))) 663 (save-excursion 664 (mapcar (lambda (b) (set-buffer b) (set-case-table table)) 665 (buffer-list))) 666 (set-standard-case-table table))) 667 ;; Some codepages have sporadic support for Latin-1, Greek, and 668 ;; symbol glyphs, which don't belong to their native character 669 ;; set. It's a nuisance to have all those glyphs here, for all 670 ;; the codepages (for starters, I don't even have references for 671 ;; all the codepages). So I provide a hook for those who want to 672 ;; squeeze every bit of support out of their terminal/font. 673 (run-hooks 'dos-codepage-setup-hook) 674 )) 675 676(defvar cjk-codepages-alist 677 '((932 "Japanese" japanese-shift-jis) 678 (950 "Chinese-BIG5" cn-big5) 679 (936 "Chinese-GB" cn-gb-2312) 680 (949 "Korean" euc-kr)) 681 "An alist of Far-Eastern codepages and the names of the associated 682language and supported coding system.") 683 684(defun dos-codepage-setup () 685 "Set up the MULE environment as appropriate for the installed DOS codepage. 686 687This function sets coding systems, display tables, and the language 688environment options as appropriate for the current value of `dos-codepage'. 689 690This function is automatically run at startup via the `term-setup-hook' 691list. You can (and should) also run it whenever the value of 692`dos-codepage' changes." 693 (interactive) 694 (let* ((desc (cdr (assq dos-codepage cjk-codepages-alist))) 695 (lang (car desc)) 696 (coding (car (cdr desc))) 697 coding-dos coding-unix) 698 (if (null desc) 699 (dos-cpNNN-setup dos-codepage) 700 ;; We've got one of the Far-Eastern codepages which support 701 ;; MULE native coding systems directly. 702 (setq coding-dos (intern (format "%s-dos" coding)) 703 coding-unix (intern (format "%s-unix" coding))) 704 (set-language-environment lang) 705 (set-selection-coding-system coding-dos) 706 (setq file-name-coding-system coding-unix) 707 (set-terminal-coding-system 708 (setq default-terminal-coding-system coding-unix)) 709 ;; Assume they support non-ASCII Latin characters like the IBM 710 ;; codepage 437 does. 711 (IT-display-table-setup "cp437") 712 ;; It's time: too many input methods in leim/quail produce 713 ;; Unicode characters. Let the user see them. 714 (IT-setup-unicode-display) 715 (prefer-coding-system coding-dos) 716 (if default-enable-multibyte-characters 717 (setq unibyte-display-via-language-environment t)) 718 ))) 719 720;; We want to delay the terminal and other codepage-related setup 721;; until after the terminal is set and user's .emacs is processed, 722;; because people might define their `dos-codepage-setup-hook' there. 723(add-hook 'term-setup-hook 'dos-codepage-setup) 724 725;; In multibyte mode, we want unibyte buffers to be displayed using 726;; the terminal coding system, so that they display correctly on the 727;; DOS terminal; in unibyte mode we want to see all 8-bit characters 728;; verbatim. In both cases, we want the entire range of 8-bit 729;; characters to arrive at our display code verbatim. 730(standard-display-8bit 127 255) 731 732;;; arch-tag: eea04c06-7311-4b5a-b531-3c1be1b070af 733;;; internal.el ends here 734