The Linux Thai HOWTO Poonlap Veeratanabutr, poon-v@fedu.uec.ac.jp v0.3, 16 July 1997 This document describes how to set Linux to use Thai language. This means at least, you can read and write Thai plain text document, name filename in Thai and use some applications with Thai characters. I use Linux Slackware96, the path name I describe here may be different to other distributions. 1. Introduction My motivation comes from ZzzThai Project by uecthai@fedu.uec.ac.jp , which describe how to use Thai with many computer platforms. I joined this project, started from windows95 then I felt Linux is more interesting. This is the early version of Thai HOWTO. It is not complete yet. The things I did not describe here, printing Thai document, Thai Tex, etc. I will try to describe them in later version. Thai standard character codes is TIS620. Thai character codes are in the same range as iso_8859_1, so we can treat it as iso_8859_1 type. Now it seems to be iso_8859_11 standard. See http://www.nectec.or.th/it-standards/iso8859-11 about this new standard. With X11R6 there is information about Thai in /usr/X11/include/X11/keysymdef.h and /usr/X11/lib/X11/locale/th_TH.TACTIS. You may look in these directory or file for your information. For now, it is better to treat Thai character as iso_8859_1 and it works well. Thai characters are not like Latin characters. There are many position in Thai character, normal position, character on other characters, character under other characters. There is not space in sentences. These are some problems in developing Thai word-processor. You can find the lastest version of this HOWTO document on http://www.fedu.uec.ac.jp/ZzzThai/Linux 2. Thai Input and Output 2.1. Linux console 2.1.1. Thai fonts You can obtain Linux Thai console fonts which created by Khun Phaisarn Techajaruwong from ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux/Fonts For example, there is a font name "phaisarn.psf". You can load the new font from Linux console by command %setfont phaisarn.psf You should put Thai fonts (psf format) in /usr/lib/kbd/consolefonts/. If you want Thai font to be loaded automatically when you boot the machine, create the file /etc/rc.d/rc.font (Slackware) as the follow­ ing. #!/bin/sh # # This selects your default screen font from among the ones in # /usr/lib/kbd/consolefonts. # setfont phaisarn.psf 2.1.2. Keyboard layout You can set keyboard behavior as you like by using loadkeys command. Usually, you use loadkeys to load the file located in /usr/lib/kbd/keytables. You can create the map file and save in this directory. This is the sample. # thai.map # This thai.map was modified by Poonlap Veeratanabutr (poon-v@fedu.uec.ac.jp) # from us.map. Map Thai Kedmanee keyboard to US keyboard. # 28 April 1997 # Thai/Us toggle key is AltGr(right alt). keycode 0 = keycode 1 = Escape Escape alt keycode 1 = Meta_Escape keycode 2 = +one exclam +aring plus alt keycode 2 = Meta_one alt shift keycode 2 = Meta_exclam keycode 3 = +two at +slash ntilde control keycode 3 = nul control shift keycode 3 = nul alt keycode 3 = Meta_two alt shift keycode 3 = Meta_at keycode 4 = +three numbersign +underscore ograve control keycode 4 = Escape alt keycode 4 = Meta_three alt shift keycode 4 = Meta_numbersign keycode 5 = +four dollar +Agrave oacute control keycode 5 = Control_backslash alt keycode 5 = Meta_four alt shift keycode 5 = Meta_dollar keycode 6 = +five percent +paragraph ocircumflex control keycode 6 = Control_bracketright alt keycode 6 = Meta_five alt shift keycode 6 = Meta_percent keycode 7 = +six asciicircum +Ooblique Ugrave control keycode 7 = Control_asciicircum alt keycode 7 = Meta_six alt shift keycode 7 = Meta_asciicircum keycode 8 = +seven ampersand +Odiaeresis ssharp control keycode 8 = Control_underscore alt keycode 8 = Meta_seven keycode 9 = +eight asterisk +currency otilde control keycode 9 = Delete alt keycode 9 = Meta_eight keycode 10 = +nine parenleft +mu Odiaeresis alt keycode 10 = Meta_nine keycode 11 = +zero parenright +diaeresis division alt keycode 11 = Meta_zero keycode 12 = +minus underscore +cent oslash control keycode 12 = Control_underscore control shift keycode 12 = Control_underscore alt keycode 12 = Meta_minus keycode 13 = +equal plus +ordfeminine ugrave alt keycode 13 = Meta_equal keycode 14 = Delete Delete Delete Delete alt keycode 14 = Meta_Delete keycode 15 = Tab Tab Tab Tab alt keycode 15 = Meta_Tab keycode 16 = +q Q +ae eth keycode 17 = +w W +adiaeresis quotedbl keycode 18 = +e E +Oacute registered keycode 19 = +r R +threequarters plusminus keycode 20 = +t T +ETH cedilla keycode 21 = +y Y +Ntilde iacute keycode 22 = +u U +Otilde ecircumflex keycode 23 = +i I +Atilde threesuperior keycode 24 = +o O +onesuperior Idiaeresis keycode 25 = +p P +Acircumflex hyphen keycode 26 = +bracketleft braceleft +masculine degree control keycode 26 = Escape alt keycode 26 = Meta_bracketleft alt shift keycode 26 = Meta_braceleft keycode 27 = +bracketright braceright +Aring comma control keycode 27 = Control_bracketright alt keycode 27 = Meta_bracketright alt shift keycode 27 = Meta_braceright keycode 28 = Return Return Return Return alt keycode 28 = 0x080d keycode 29 = Control Control Control Control keycode 30 = +a A +questiondown Adiaeresis keycode 31 = +s S +Ediaeresis brokenbar keycode 32 = +d D +exclamdown macron keycode 33 = +f F +acute acircumflex keycode 34 = +g G +agrave notsign keycode 35 = +h H +eacute ccedilla keycode 36 = +j J +egrave ediaeresis keycode 37 = +k K +Ograve Eacute keycode 38 = +l L +Ecircumflex Egrave keycode 39 = +semicolon colon +Ccedilla guillemotleft alt keycode 39 = Meta_semicolon keycode 40 = +apostrophe quotedbl +section period control keycode 40 = Control_g alt keycode 40 = Meta_apostrophe keycode 41 = +grave asciitilde +minus percent control keycode 41 = nul alt keycode 41 = Meta_grave keycode 42 = Shift Shift Shift Shift keycode 43 = +backslash bar +sterling yen control keycode 43 = Control_backslash alt keycode 43 = Meta_backslash alt shift keycode 43 = Meta_bar keycode 44 = +z Z +onequarter parenleft keycode 45 = +x X +guillemotright parenright keycode 46 = +c C +aacute copyright keycode 47 = +v V +Iacute Icircumflex keycode 48 = +b B +Ocircumflex Uacute keycode 49 = +n N +multiply igrave keycode 50 = +m M +periodcentered question keycode 51 = +comma less +Aacute twosuperior alt keycode 51 = Meta_comma alt shift keycode 51 = Meta_less keycode 52 = +period greater +atilde Igrave alt keycode 52 = Meta_period alt shift keycode 52 = Meta_greater keycode 53 = +slash question +onehalf AE control keycode 53 = Delete alt keycode 53 = Meta_slash keycode 54 = Shift Shift Shift Shift keycode 55 = KP_Multiply keycode 56 = Alt Alt Alt Alt keycode 57 = space space space space control keycode 57 = nul alt keycode 57 = Meta_space keycode 58 = Caps_Lock Caps_Lock Caps_Lock Caps_Lock keycode 59 = F1 F11 Console_13 control keycode 59 = F1 alt keycode 59 = Console_1 control alt keycode 59 = Console_1 keycode 60 = F2 F12 Console_14 control keycode 60 = F2 alt keycode 60 = Console_2 control alt keycode 60 = Console_2 keycode 61 = F3 F13 Console_15 control keycode 61 = F3 alt keycode 61 = Console_3 control alt keycode 61 = Console_3 keycode 62 = F4 F14 Console_16 control keycode 62 = F4 alt keycode 62 = Console_4 control alt keycode 62 = Console_4 keycode 63 = F5 F15 Console_17 control keycode 63 = F5 alt keycode 63 = Console_5 control alt keycode 63 = Console_5 keycode 64 = F6 F16 Console_18 control keycode 64 = F6 alt keycode 64 = Console_6 control alt keycode 64 = Console_6 keycode 65 = F7 F17 Console_19 control keycode 65 = F7 alt keycode 65 = Console_7 control alt keycode 65 = Console_7 keycode 66 = F8 F18 Console_20 control keycode 66 = F8 alt keycode 66 = Console_8 control alt keycode 66 = Console_8 keycode 67 = F9 F19 Console_21 control keycode 67 = F9 alt keycode 67 = Console_9 control alt keycode 67 = Console_9 keycode 68 = F10 F20 Console_22 control keycode 68 = F10 alt keycode 68 = Console_10 control alt keycode 68 = Console_10 keycode 69 = Num_Lock keycode 70 = Scroll_Lock Show_Memory Show_Registers control keycode 70 = Show_State alt keycode 70 = Scroll_Lock keycode 71 = KP_7 alt keycode 71 = Ascii_7 keycode 72 = KP_8 alt keycode 72 = Ascii_8 keycode 73 = KP_9 alt keycode 73 = Ascii_9 keycode 74 = KP_Subtract keycode 75 = KP_4 alt keycode 75 = Ascii_4 keycode 76 = KP_5 alt keycode 76 = Ascii_5 keycode 77 = KP_6 alt keycode 77 = Ascii_6 keycode 78 = KP_Add keycode 79 = KP_1 alt keycode 79 = Ascii_1 keycode 80 = KP_2 alt keycode 80 = Ascii_2 keycode 81 = KP_3 alt keycode 81 = Ascii_3 keycode 82 = KP_0 alt keycode 82 = Ascii_0 keycode 83 = KP_Period altgr control keycode 83 = Boot control alt keycode 83 = Boot keycode 84 = Last_Console keycode 85 = keycode 86 = less greater bar alt keycode 86 = Meta_less keycode 87 = F11 F11 Console_23 control keycode 87 = F11 alt keycode 87 = Console_11 control alt keycode 87 = Console_11 keycode 88 = F12 F12 Console_24 control keycode 88 = F12 alt keycode 88 = Console_12 control alt keycode 88 = Console_12 keycode 89 = keycode 90 = keycode 91 = keycode 92 = keycode 93 = keycode 94 = keycode 95 = keycode 96 = KP_Enter keycode 97 = Control keycode 98 = KP_Divide keycode 99 = Control_backslash control keycode 99 = Control_backslash alt keycode 99 = Control_backslash keycode 100 = AltGr_Lock keycode 101 = Break keycode 102 = Find keycode 103 = Up keycode 104 = Prior shift keycode 104 = Scroll_Backward keycode 105 = Left alt keycode 105 = Decr_Console keycode 106 = Right alt keycode 106 = Incr_Console keycode 107 = Select keycode 108 = Down keycode 109 = Next shift keycode 109 = Scroll_Forward keycode 110 = Insert keycode 111 = Remove altgr control keycode 111 = Boot control alt keycode 111 = Boot keycode 112 = keycode 113 = keycode 114 = keycode 115 = keycode 116 = keycode 117 = keycode 118 = keycode 119 = keycode 120 = keycode 121 = keycode 122 = keycode 123 = keycode 124 = keycode 125 = keycode 126 = keycode 127 = string F1 = "\033[[A" string F2 = "\033[[B" string F3 = "\033[[C" string F4 = "\033[[D" string F5 = "\033[[E" string F6 = "\033[17~" string F7 = "\033[18~" string F8 = "\033[19~" string F9 = "\033[20~" string F10 = "\033[21~" string F11 = "\033[23~" string F12 = "\033[24~" string F13 = "\033[25~" string F14 = "\033[26~" string F15 = "\033[28~" string F16 = "\033[29~" string F17 = "\033[31~" string F18 = "\033[32~" string F19 = "\033[33~" string F20 = "\033[34~" string Find = "\033[1~" string Insert = "\033[2~" string Remove = "\033[3~" string Select = "\033[4~" string Prior = "\033[5~" string Next = "\033[6~" string F21 = "" string F22 = "" string F23 = "" string F24 = "" string F25 = "" string F26 = "" Suppose you save this file as thai.map. To load this file %loadkeys thai.map To switch to Thai input press the right Alt key. If you want to switch to English press the right Alt key again. To set Thai keymap as default (Slackware), after you put thai.map in /usr/lib/kbd/keytables create the file /etc/rc.d/rc.keymap like the sample. #!/bin/sh # # Loadkeys will look for thai.map in /usr/lib/kbd/keytables # loadkeys thai The thai.map will be automatically loaded when you boot the machine. For RedHat, change the content of the file /etc/sysconfig/keyboard. 2.2. X Window system 2.2.1. Thai fonts To display Thai characters in X Window system, you must have Thai fonts for X Window system. You can obtain Thai fonts in bdf format or pcf format on internet. ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/UNIX/Fonts http://thaigate.rd.nacsis.ac.jp/files/thaifonts.html http://www.nectec.ac.th/pub/software/i18n/thai These fonts usually come in tar or gz format. You must extract it by using command tar or gunzip. You will get a lot of 2.2.1.1. Installing Thai fonts You must log in as root. Let's put Thai fonts in /usr/X11/lib/X11/fonts/misc/ change directory to /usr/X11/lib/X11/fonts/misc/ and run command #mkfontdir This command will update font database file. If you run this command in X Windows system, you may need to restart X window to take effect. 2.2.2. Thai keyboard layout 2.2.2.1. Thai keyboard layout with xmodmap You can use the utility xmodmap to map Thai keyboard. Normally xmodmap is used to load the the file. There is the file .Xmodmap in /use/X11/lib/X11/xinit/. This file will be load if you don't have ~.xinitrc/ and .Xmodmap(in Slackware). The file /usr/X11/lib/X11/xinit/.Xmodmap doesn't map all keys. It only solves the Backspace/Delete key's problem. The following is the sample .Xmodmap for Thai Kedmanee keyboard layout. ! ! Linux/XFree86 Thai Kedmanee layout (based on US keyboard) ! Generated on Mon May 26 22:59:56 1997 ! by Poonlap Veeratanabutr (poon-v@fedu.uec.ac.jp) ! Use ScrollLock to switch to Thai keyboard. ! This file will work with XFree86 only. ! keycode 0x09 = Escape keycode 0x43 = F1 keycode 0x44 = F2 keycode 0x45 = F3 keycode 0x46 = F4 keycode 0x47 = F5 keycode 0x48 = F6 keycode 0x49 = F7 keycode 0x4A = F8 keycode 0x4B = F9 keycode 0x4C = F10 keycode 0x5F = F11 keycode 0x60 = F12 keycode 0x6F = Print keycode 0x4E = Mode_switch XF86ModeLock keycode 0x6E = Pause keycode 0x31 = grave asciitilde minus percent keycode 0x0A = 1 exclam aring plus keycode 0x0B = 2 at slash ntilde keycode 0x0C = 3 numbersign underscore ograve keycode 0x0D = 4 dollar Agrave oacute keycode 0x0E = 5 percent paragraph ocircumflex keycode 0x0F = 6 asciicircum Ooblique Ugrave keycode 0x10 = 7 ampersand Odiaeresis ssharp keycode 0x11 = 8 asterisk currency otilde keycode 0x12 = 9 parenleft mu odiaeresis keycode 0x13 = 0 parenright diaeresis division keycode 0x14 = minus underscore cent oslash keycode 0x15 = equal plus ordfeminine ugrave keycode 0x33 = backslash bar sterling yen keycode 0x16 = BackSpace keycode 0x6A = Insert keycode 0x61 = Home keycode 0x63 = Prior keycode 0x4D = Num_Lock keycode 0x70 = KP_Divide keycode 0x3F = KP_Multiply keycode 0x52 = KP_Subtract keycode 0x17 = Tab keycode 0x18 = q Q ae eth keycode 0x19 = w W adiaeresis quotedbl keycode 0x1A = e E Oacute registered keycode 0x1B = r R threequarters plusminus keycode 0x1C = t T ETH cedilla keycode 0x1D = y Y Ntilde iacute keycode 0x1E = u U Otilde ecircumflex keycode 0x1F = i I Atilde threesuperior keycode 0x20 = o O onesuperior Idiaeresis keycode 0x21 = p P Acircumflex hyphen keycode 0x22 = bracketleft braceleft masculine degree keycode 0x23 = bracketright braceright Aring comma keycode 0x24 = Return keycode 0x6B = Delete keycode 0x67 = End keycode 0x69 = Next keycode 0x4F = KP_7 keycode 0x50 = KP_8 keycode 0x51 = KP_9 keycode 0x56 = KP_Add keycode 0x42 = Caps_Lock keycode 0x26 = a A questiondown Adiaeresis keycode 0x27 = s S Ediaeresis brokenbar keycode 0x28 = d D exclamdown macron keycode 0x29 = f F acute acircumflex keycode 0x2A = g G agrave notsign keycode 0x2B = h H eacute ccedilla keycode 0x2C = j J egrave ediaeresis keycode 0x2D = k K Ograve Eacute keycode 0x2E = l L Ecircumflex Egrave keycode 0x2F = semicolon colon Ccedilla guillemotleft keycode 0x30 = apostrophe quotedbl section period keycode 0x53 = KP_4 keycode 0x54 = KP_5 keycode 0x55 = KP_6 keycode 0x32 = Shift_L keycode 0x34 = z Z onequarter parenleft keycode 0x35 = x X guillemotright parenright keycode 0x36 = c C aacute copyright keycode 0x37 = v V Iacute Icircumflex keycode 0x38 = b B Ocircumflex Uacute keycode 0x39 = n N multiply igrave keycode 0x3A = m M periodcentered question keycode 0x3B = comma less Aacute twosuperior keycode 0x3C = period greater atilde Igrave keycode 0x3D = slash question onehalf AE keycode 0x3E = Shift_R keycode 0x62 = Up keycode 0x57 = KP_1 keycode 0x58 = KP_2 keycode 0x59 = KP_3 keycode 0x6C = KP_Enter keycode 0x25 = Control_L keycode 0x40 = Alt_L Meta_L keycode 0x41 = space keycode 0x71 = Alt_R Meta_R keycode 0x6D = Control_R keycode 0x64 = Left keycode 0x68 = Down keycode 0x66 = Right keycode 0x5A = KP_0 keycode 0x5B = KP_Decimal clear Shift clear Lock clear Control clear Mod1 clear Mod2 clear Mod3 clear Mod4 clear Mod5 add Shift = Shift_L Shift_R add Lock = Caps_Lock add Control = Control_L Control_R add Mod1 = Alt_L Alt_R add Mod2 = Mode_switch Put this sample file in your home directory. If you have .xinitrc or .xsession in your home directory, add the following line in those files. xmodmap ~/.Xmodmap Thai/US toggle key is assigned to keycode 0x4E (78), Scroll Lock key with the statement keycode 0x4E = Mode_switch XF86ModeLock XF86ModeLock is the special keysym for XFree86 X server. If you don't add this keysym, you have to hold the scroll lock key while you are typing Thai characters. Note that if you use accelerated X, some key­ codes are different. You may have to map keyboard by yourself. I rec­ ommend xkeycaps utility to config you keyboard behavior. You can get xkeycaps lastest version from http://home.netscape.com/people/jwz/xkeycaps . I submited the above xmodmap file to Mr.Jamie Zawinski who created xkeycaps so you can find above map file from xkeycaps too. Note: If you are using XFree86 version 3.1.2D or later, you need to add the line XkbDisable in keyboard section in the XF86Config file. If necessary you may config the keyboard section like the example. Section "Keyboard" Protocol "Standard" AutoRepeat 500 5 LeftAlt Meta RightAlt ModeShift ScrollLock ModeLock RightCtl Compose XkbDisable EndSection 2.2.2.2. XFree86 3.1.2D or later and Thai keyboard layout. Beginning with XFree86 3.1.2D, you can use the new X11R6.1 XKEYBOARD extension to manage the keyboard layout. This is very helpful. You can set Thai keyboard layout in 2 ways. First with traditional xmodmap, second with XFree86 configuration. During X server configuration with xf86config you will be asked about XKB, if you want to to set Thai keyboard layout for your system, say yes. There are a list of preconfigured keymaps. Choose Standard 101-key, Thai encoding. XF86Setup is the graphical configuration utility for XFree86. XF86Setup is normally used to either perform the initial setup of the XFree86 X servers or to make adjustments to the existing configuration. It is easier than traditional xf86config. You can see the keyboard layout with this tool. Ther are many choices of switch key to select. The default is Alt+RightShift switch to Thai and Alt+LeftShift switch to US. You can input Thai characters but Thai fonts are not provided. I found that preconfigured keymaps that came with XFree86-3.2 (RedHat 4.2) is not correct. You may not be able to type THO THUNG which located at "5 key". To fix this problem, you should add the line key { [], [ paragraph, ocircumflex ] }; in the file /usr/X11R6/lib/X11/xkb/symbols/th as the example. key { [], [ minus, ograve ] }; key { [], [ Agrave, oacute ] }; key { [], [ paragraph, ocircumflex ] }; key { [], [ Ooblique, Ugrave ] }; key { [], [ Odiaeresis, ssharp ] }; You can not type SORUSI also. Please change the line from key { [], [ Ograve, eacute ] }; to key { [], [ Ograve, Eacute ] }; Note that eacute is MAITHO and Eacute is SORUSI. There are also XKB extension utilities such as setxkbmap, xkbcomp, etc. Please see man page for more information. The following is the example. It is the part of XF86Config file in keyboard section. This configuration uses the default toggle key. Section "Keyboard" Protocol "Standard" AutoRepeat 500 5 LeftAlt Meta RightAlt Meta ScrollLock Compose RightCtl Control # XkbDisable XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "pc101" XkbLayout "th" EndSection If you use XKB extension, Thai keyboard mapping with xmodmap may not work. 3. Applications with Thai characters This is the tricky part. Most applications support iso_8859_1 characters or 8-bit characters. For example, emacs can display iso_8859_1 character. If we set emacs to display iso_8859_1 and use Thai font, you can edit Thai document with emacs. You should define the environment LC_CTYPE to iso_8859_1 in /etc/profile (for bash users) and /etc/csh.cshrc (for tcsh users). Similarly you should (for the sake of principle) put something like this in your *basicLocale: C *timeFormat: C *numeric: C *displayLang: iso_8859_1 *inputLang: iso_8859_1 If you use libc-4.x.xx you should set LC_CTYPE to ISO-8859-1 instead of iso_8859_1. These are some of applications which can use with Thai characters and how to config them. To make X window application displays Thai font, you should run the application with -fn option. For example, #xterm -fn thai8x16 If you don't want to fill -fn option every time you run application. You should set Thai font in your ~/.Xdefaults or ~/.Xresources like this XTerm*font: NameOfThaifont 3.1. Non-network applications 3.1.1. xterm There are several programs running under xterm such as shell, pine, vi, etc. Don't forget to use Thai font with xterm as I mention above. bash : New versions of bash (v1.14.1+) only need to have LC_CTYPE set to iso_8859_1, but if you have problems put the following in your /etc/inputrc or ~/.inputrc file: set meta-flag on set convert-meta off set output-meta on I actually don't set LC_CTYPE environment variable to iso_8859_1 because this environment variable will effect other applications too. With bash shell, you can specify which environment variable to be passed to the application. I can make tterm (Thai Terminal) with this syntax. LC_CTYPE=iso_8859_1 xterm -fn thai8x16 It is helpful if you alias the commands like this in alias tterm='LC_CTYPE=iso_8859_1 xterm -fn thai8x16' alias temacs='LC_CTYPE=iso_8859_1 emacs -fn -etl-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1' alias ls='ls -F -N --color' To run xterm with bash shell that accepts Thai characters, you just run tterm. You can type Thai characters in command line. That means you can name filenames in Thai. tcsh : Put the following in your /etc/csh.cshrc or .tcshrc file: setenv LC_CTYPE iso_8859_1 Note: If this doesn't work, your copy of tcsh was probably not com­ piled with NLS support or possibly it's version 6.03 or lower. ls : Issue the command as ls -N or possibly ls --8bit You may set alias in ~/.bashrc or ~/.cshrc, so you can type ls without option. If you don't use ls with -N option, you may see Thai filename as ?????. less : Set the following environment variable: LESSCHARSET=latin1 3.1.2. emacs In version 19.26 or later of GNU emacs for X11 you can simply set the environment variable LC_CTYPE to iso_8859_1. If you use an older version or use emacs under plain Linux put the following in your ~/.emacs or the the system-wide initialization file (probably /usr/lib/emacs/site-lisp/default.el): (standard-display-european t) (set-input-mode (car (current-input-mode)) (nth 1 (current-input-mode)) 0) If you run emacs already, press Esc-x and type standard-display- european in minibuffer, this command will tell emacs to display 8-bit character. If you use bash shell you can run emacs in this way, LC_CTYPE=iso_8859_1 emacs -fn -etl-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1 This will set LC_CTYPE=iso_8859_1 for emacs only. Because some Thai characters have 0 width, cursor's position may be not in the right place. you should use the fonts from mule. You can get these fonts from ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/UNIX/Fonts/Mule/etl_fonts.tar Therefore I use the font -etl-fixed-medium-r- normal--16-160-72-72-m-80-tis620.2529-1 in an example. 3.1.3. vi Vi should be run on xterm that uses Thai font. 3.1.4. xedit Run xedit with -fn option like xterm. This application can display Thai characters in the right position. 3.2. Network applications 3.2.1. E-mail You can not send Thai E-mail with mail command. Mail command transfers mail in 7 bit. You should use mail application that supports MIME such as pine or elm. elm: Put the following definitions in your ~/.elm/elmrc file: charset = iso-8859-1 displaycharset = iso-8859-1 textencoding = 8bit This may not work on some versions of elm. pine : Put the following definition in your ~/.pinerc file: # Reflects capabilities of the display you have. Default: US-ASCII. # Typical alternatives include ISO-8859-x, (x is a number between 1 and 9). character-set=ISO-8859-1 This can also be set via the Setup option in pine. You can find it under Config. 3.2.2. tin Put the following definitions in your ~/.tin/headers file: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Now you can post messages with the proper Danish characters in the message body. 3.2.3. lynx Put the following definition in your ~/.lynxrc file: character_set=ISO Latin 1 This can also be set via the Options menu in lynx. Type `o' and set the relevant option. 3.2.4. Netscape If you have Thai fonts in your system. You just select Thai fonts from Options | General Preferences | Fonts. Thai fonts will appear in ISO-8859-1 or in User defined. See http://www.fedu.uec.ac.jp/ZzzThai/unix for setting Thai language on Netscape. 3.3. Thai Applications on X window. As I know. There are few Thai applications on X window. Likit is the Thai editor and mail sender (by uuencode) that does not need Thai font. Likit was created by Khun Vuthichai Ampornaramveth. You can find this application from thaigate site. If you are using Tex or Latex, you may want to use Thai Tex. This is the work of Dr. Manop Wongsaisuwan and his friends at Tokyo Institute of technology. You can also find Thai tex on http://thaigate.nacsis.ac.jp/files/ttex.html . Txterm, this is Thai xterm version. I don't know much about this. Xzthai, this is the Tcl/Tk application for mapping Thai keyboard on US keyboard with graphical user interface. Also provides simple editor and keyboard layout figure. You need to have Thai font. It actually uses xmodmap program in background to map US keyboard and Thai keyboard. This program was created by me. See http://www.fedu.uec.ac.jp/ZzzThai/xio/xzthai.html 3.4. Other Tips. Now you can configure the applications to be more Thai environment. Because Xt based applications allows user to configure the applications by resources. We can make the menu or label to be Thai language. For example, if you want xman to display Thai labels. You may add these lines in your .Xdefaults !! Xman section Xman*Font: thai8x16 Xman*helpButton.Label: ªèÇ Xman*quitButton.Label: ÍÍ¡ Xman*manpageButton.Label: ¤ÙèÁ×Í¡ÒÃãªé 4. References and FTP sites 4.1. Other documents of relevance The HOWTOs ought to be available from all mirrors of sunsite.unc.edu. The Linux Danish/International HOWTO by Niels Kristian Bech Jensen The Linux Cyrillic HOWTO by Alexander L. Belikoff The Keystroke mini-HOWTO by Zenon Fortuna. The Locales mini-HOWTO by Peeter Joot. (This one is mainly for developers.) The ISO-8859-1 FAQ and Programming for Internationalization FAQ (plus much more) by Michael Gschwind is available from his homepage . NACSIS R& D Thai Project Page You can get information about Thai computing here. ZzzThai Project , by The group of students in The University of Electro-Communications, Tokyo. Describe how to use Thai with many computer platforms. Vuthichai's Page , contains information about Thai computing by Khun Vuthichai Ampornaramveth. 4.2. FTP and Web sites NACSIS R & D Thai Project : http://thaigate.rd.nacsis.ac.jp You can find Thai tex on this site. ZzzThai Project : http://www.fedu.uec.ac.jp/ZzzThai Vuthichai's Homepage : http://www.ctrl.titech.ac.jp:80/~vuthi/ SunSite and mirrors. doc/howto has the above mentioned HOWTOs. utils/nls and subdirectories contain files related to National Language Support. Developers should take a look at locale-tutorial-0.8.txt.gz, locale-pack-0.8.tar.gz and cat- pack.tar.gz. The GNU archives has the recode package for character table conversion, the ABOUT-NLS file and the gettext package for locale support of some GNU applications and (of course) the latest versions of GNU emacs. 5. Acknowledgments and Copyright Some parts of this HOWTO comes from The Linux Danish/International HOWTO by Thomas Petersen, petersen@post1.tele.dk (the original author) and Niels Kristian Bech Jensen, nkbj@image.dk. Thank you to Phaisarn Techajaruwong for building Thai fonts and valuable discussion. Thank you to Thai students at The University of Electro-Communications and Khun Vuthichai Ampornaramveth for every help. This HOWTO is copyrighted by Poonlap Veeratanabutr, poon- v@fedu.uec.ac.jp. It is distributed as other Linux HOWTOs under the terms described below. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the authors would like to be notified of any such distributions. All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below. If you have questions, please contact Greg Hankins, the Linux HOWTO coordinator, at gregh@sunsite.unc.edu via email.