  The Linux Thai HOWTO
  Poonlap Veeratanabutr, poon-v@fedu.uec.ac.jp <mailto: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
  <http://www.fedu.uec.ac.jp/ZzzThai> by uecthai@fedu.uec.ac.jp
  <mailto: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
  <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
  <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
       <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
       <ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/UNIX/Fonts>
       http://thaigate.rd.nacsis.ac.jp/files/thaifonts.html
       <http://thaigate.rd.nacsis.ac.jp/files/thaifonts.html>
       http://www.nectec.ac.th/pub/software/i18n/thai
       <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
  <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 <AE05> {        [], [   paragraph,      ocircumflex     ]       };

  in the file /usr/X11R6/lib/X11/xkb/symbols/th as the example.

           key <AE03> {        [], [       minus,      ograve          ]       };
           key <AE04> {        [], [      Agrave,      oacute          ]       };
           key <AE05> {        [], [   paragraph,      ocircumflex     ]       };
           key <AE06> {        [], [    Ooblique,      Ugrave          ]       };
           key <AE07> {        [], [  Odiaeresis,      ssharp          ]       };

  You can not type SORUSI also. Please change the line from

           key <AC08> {        [], [      Ograve,      eacute          ]       };

  to

           key <AC08> {        [], [      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
       <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
  <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
  <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
  <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
  <http://www.vlsivie.tuwien.ac.at/mike/i18n.html>.

  NACSIS R& D Thai Project Page <http://thaigate.rd.nacsis.ac.jp> You
  can get information about Thai computing here.

  ZzzThai Project <http://www.fedu.uec.ac.jp/ZzzThai/>, by The group of
  students in The University of Electro-Communications, Tokyo. Describe
  how to use Thai with many computer platforms.

  Vuthichai's Page <http://www.ctrl.titech.ac.jp:80/~vuthi/>, 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
  <http://thaigate.rd.nacsis.ac.jp> You can find Thai tex on this site.

  ZzzThai Project : http://www.fedu.uec.ac.jp/ZzzThai
  <http://www.fedu.uec.ac.jp/ZzzThai>

  Vuthichai's Homepage : http://www.ctrl.titech.ac.jp:80/~vuthi/
  <http://www.ctrl.titech.ac.jp:80/~vuthi/>

  SunSite <ftp://sunsite.unc.edu/pub/linux/> 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 <ftp://prep.ai.mit.edu/pub/gnu/> 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 <mailto:gregh@sunsite.unc.edu>
  via email.

