home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / bin / unicode_start < prev    next >
Text File  |  2006-11-29  |  3KB  |  100 lines

  1. #!/bin/sh
  2. # Enables Unicode processing in the current console.
  3.  
  4. # 0. Check whether we're on a console
  5. TTY=`/usr/bin/tty`
  6. case $TTY in
  7.     /dev/console|/dev/tty[0-9]*)
  8.         ;;
  9.     *)
  10.         echo "unicode_start skipped on $TTY"
  11.         exit 0
  12.         ;;
  13. esac
  14.  
  15. # 1. The input side: the keyboard driver.
  16.  
  17. # Set the keyboard driver in Unicode mode. (Default is ASCII mode.)
  18. # This really does nothing with the way normal keys are handled in
  19. # the kernel. All it does is:
  20. # - It is necessary for `dumpkeys' in order to not drop U+XXXX
  21. #   entries from the keymaps.
  22. # - It is necessary for `loadkeys' in order to avoid warnings.
  23. # - Unicode characters typed as Alt-x1 ... Alt-xn (where x1,...,xn
  24. #   are digits on the numeric keypad) will be emitted in UTF-8.
  25.  
  26. kbd_mode -u
  27.  
  28. # Change the keyboard mapping in such a way that the non-ASCII keys
  29. # produce UTF-8 encoded multibyte sequences, instead of single bytes
  30. # >= 0x80 in a legacy 8-bit encoding.
  31.  
  32. # There is no way of reverting the effect of "dumpkeys | loadkeys --unicode",
  33. # the memory of the earlier keymap is lost. Therefore, try
  34. # to save a copy of the original keymap to be able to reload it in unicode_stop.
  35. # (see also http://mail.nl.linux.org/linux-utf8/2003-08/msg00053.html):
  36.  
  37. test -z "$HOME" -o "/" == "$HOME" && HOME=/root
  38. test -d $HOME/.kbd || mkdir $HOME/.kbd
  39. dumpkeys > $HOME/.kbd/.keymap_sv
  40.  
  41. # redirect stderr and stdout of loadkeys to /dev/null to avoid the confusing
  42. # "plus before udiaeresis ignored" warnings.
  43.  
  44. dumpkeys | loadkeys --unicode > /dev/null 2>&1
  45.  
  46. # 2. The output side: the console screen.
  47.  
  48. # Tell the console output driver that the bytes arriving are UTF-8
  49. # encoded multibyte sequences.
  50.  
  51. echo -n -e '\033%G'
  52.  
  53. # Tell the graphics card how to display Unicode characters not
  54. # contained in the IBM 437 character set (on PCs). The font should
  55. # have a Unicode map attached, or explicitly specified, e.g.,
  56. # by giving `def.uni' as a second argument.
  57.  
  58. DEFAULT_UNICODE_FONT=LatArCyrHeb-16
  59. # Also drdos8x16 is a good candidate.
  60.  
  61. # Fonts with 512 glyphs like LatArCyrHeb-16 make it impossible to use bold
  62. # on the console, which makes YaST2 unusable. To be able to use bold,
  63. # only fonts with 256 glyphs can be used. Therefore we prefer
  64. # the font specified in /etc/sysconfig/console. This should be OK because
  65. # the default font written to /etc/sysconfig/console by YaST2
  66. # is currently always a font with 256 glyphs and a Unicode map
  67. # which is suitable for the language used during the installation.
  68.  
  69. case $# in
  70.     2)
  71.         setfont $1 -u $2
  72.         ;;
  73.     1)
  74.         setfont $1
  75.         ;;
  76.     0)
  77.         if [ -f /etc/sysconfig/console ] ; then
  78.             . /etc/sysconfig/console
  79.         fi
  80.         if [ -n "$CONSOLE_FONT" ] ; then
  81.             SETFONT_ARGS="$CONSOLE_FONT"
  82.             if [ -n "$CONSOLE_UNICODEMAP" ] ; then
  83.             SETFONT_ARGS="$SETFONT_ARGS -u $CONSOLE_UNICODEMAP"
  84.             fi
  85.             if [ -n "$CONSOLE_SCREENMAP" ] ; then
  86.             SETFONT_ARGS="$SETFONT_ARGS -m $CONSOLE_SCREENMAP"
  87.             fi
  88.             setfont $SETFONT_ARGS
  89.             if [ -n "$CONSOLE_MAGIC" -a "$CONSOLE_MAGIC" != "none" ] ; then
  90.             echo -en "\033$CONSOLE_MAGIC"
  91.             fi
  92.         else
  93.             setfont $DEFAULT_UNICODE_FONT
  94.         fi
  95.         ;;
  96.     *)
  97.         echo "usage: unicode_start [font [unicode map]]"
  98.         ;;
  99. esac
  100.