#!/bin/bash
# setime                  by Jun Nishii <jun@vinelinux.org>
#                    Time-stamp: <02/10/05 04:39:26 shom>
#
#     atok entry is by Takeshi Isobe <isobe@ps.namco.co.jp>

. /usr/share/vine/functions

##########  Messages #############################

ShowUsage_C() {
cat <<EOF
  Usage:  setime [-k] {canna|wnn|wnn6|wnn6xwnmo|wnn7|wnn7xwnmo|FreeWnn|atokx|atok17|vje|anthy|none|status}

     canna:   set Canna as default input method and start kinput2
     wnn:     set Wnn as default input method and start kinput2
	       (wnn7, wnn6 and FreeWnn is automatically selected)
     wnn7:    set Wnn7 as default input method and start kinput2
     wnn7xwnmo:    set Wnn7 as default input method and start xwnmo
     wnn6:    set Wnn6 as default input method and start kinput2
     wnn6xwnmo:    set Wnn6 as default input method and start xwnmo
     FreeWnn: set FreeWnn as default input method and start kinput2
     atokx:   set Atok X as default input method
     atok17:  set Atok17 as default input method
     vje:     set VJE-Delta as default input method and start vje
     skk:     set SKK as default input method and start skkinput
     anthy:   set Anthy as default input method and start uim-xim
     default: start default kinput2
     none:    do not use input method and stop kinput2
     status:  get information about current environment for Kanji input methods

     Options
	    -k: do not restart kinput2
EOF
}

ShowUsage_ja() {
cat <<EOF
  ˡ:  setime [-k]{canna|wnn|wnn6|wnn6xwnmo|wnn7|wnn7xwnmo|FreeWnn|atokx|atok17|vje|anthy|none|status}

     canna:    ǥեȤδѴƥȤkinput2 ưޤ
     wnn:     Wnn ǥեȤδѴƥȤkinput2 ưޤ
	       (Wnn7, Wnn6  FreeWnn ϼư򤵤ޤ)
     wnn7:    Wnn7 ǥեȤδѴƥȤkinput2 ưޤ
     wnn7xwnmo:Wnn7 ǥեȤδѴƥȤxwnmo ưޤ
     wnn6:    Wnn6 ǥեȤδѴƥȤkinput2 ưޤ
     wnn6xwnmo:Wnn6 ǥեȤδѴƥȤxwnmo ưޤ
     FreeWnn: FreeWnn6 ǥեȤδѴƥȤkinput2 ưޤ
     atokx:   Atok X ǥեȤδѴƥȤޤ
     atok17:  Atok17 ǥեȤδѴƥȤޤ
     vje:     VJE-DeltaǥեȤδѴƥȤvje ưޤ
     skk:     SKKǥեȤδѴƥȤskkinput ưޤ
     anthy:   AnthyǥեȤδѴƥȤuim-xim ưޤ
     default: ǥեȤδѴƥѤơkinput2 ưޤ
     none:    ѴƥѤʤ
     status:  ߤΥƥˤ롢ˡ˴ؤɽޤ

     ץ
	    -k: kinput2 κƵư򤷤ʤ
EOF
}

IMEMsg_ja(){
cat <<EOF
Ķѿ ~/.vine/system/ime ⤷ /etc/sysconfig/ime ꤵƤޤ.
EOF
}

IMEMsg_C(){
cat <<EOF
The Environment Variables are set in ~/.vine/system/ime or /etc/sysconfig/ime.
EOF
}

CurIMEMsg_ja(){
echo "[ߤδϥƥ]"
}

CurIMEMsg_C(){
echo "[Current IME]"
}

PackageStatMsg_ja(){
echo "[ѥåΥ󥹥ȡ]"
}

PackageStatMsg_C(){
echo "[Package status]"
}

EnvVarMsg_ja(){
echo "[Ķѿ]"
}

EnvVarMsg_C(){
echo "[Environment Variables]"
}

SettingIMMsg_ja(){
echo "$1 Ԥޤ"
}

SettingIMMsg_C(){
    echo "setting up $1..."
}

CannaNotAliveMsg_ja(){
cat <<EOF
    ʴѴФäƤޤ!
    ʥФưƺĩ路Ƥ!
    λޤ...
EOF
}

CannaNotAliveMsg_C(){
cat <<EOF
    Canna server is NOT running!
    Start canna server and try again!
    Aborted...
EOF
}

WnnNotAliveMsg_ja(){
cat <<EOF
    Wnn ФäƤޤ!
    Wnn Фưƺĩ路Ƥ!
    λޤ...
EOF
}

WnnNotAliveMsg_C(){
cat <<EOF
    Wnn server is NOT running!
    Start Wnn server and try again!
    Aborted...
EOF
}

AtokxNotAliveMsg_ja(){
cat <<EOF
    Atokx ФäƤޤ!
    Atokx Фưƺĩ路Ƥ!
    λޤ...
EOF
}

AtokxNotAliveMsg_C(){
cat <<EOF
    Atokx server is NOT running!
    Start Atokx server and try again!
    Aborted...
EOF
}

Atok17NotAliveMsg_ja(){
cat <<EOF
    Atok17 ФäƤޤ!
    Atok17 Фưƺĩ路Ƥ!
    λޤ...
EOF
}

Atok17NotAliveMsg_C(){
cat <<EOF
    Atok17 server is NOT running!
    Start Atok17 server and try again!
    Aborted...
EOF
}

VjeNotAliveMsg_ja(){
cat <<EOF
    VJE ФäƤޤ!
    VJE Фưƺĩ路Ƥ!
    λޤ...
EOF
}

VjeNotAliveMsg_C(){
cat <<EOF
    VJE server is NOT running!
    Start VJE server and try again!
    Aborted...
EOF
}

NoIMMsg_ja(){
cat <<EOF
    $1 Ĥޤ...
    λޤ.
EOF
}

NoIMMsg_C(){
cat <<EOF
    not found $1...
    exit set up.
EOF
}

ExitMsg_ja(){
echo "꤬λޤ."
echo "ϡ뤫ͭˤʤޤ"
isXRunning && (echo "ƤΥͭˤˤϡX window Ƶưɬפޤ.")
}

ExitMsg_C(){
echo "Configuration finished."
echo "A new configuration is effective on new shells."
isXRunning && (echo "To effect this configuration to all applications, You should restart X Window System.")
}

xwnmoWarning_ja(){
    echo "[Warning!] xwnmo ǥեȤΥץåȥ᥽åɤˤ,"
    echo "[Warning!] X window ե꡼礬ޤե꡼"
    echo "[Warning!] Ȥˤ Ctrl-Alt-BackSpace  X window "
    echo "[Warning!] λǤޤ"
    echo "[Warning!] xwnmo ȤȤˤϡ X window εư"
    echo "[Warning!] xwnmo εưԤȥ֥뤬ʤ褦Ǥ"
}

xwnmoWarning_C(){
    echo "[Warning!] Setting xwnmo as default xim is harmful."
    echo "[Warning!] I recommend to use kinput2 for default input methos."
}

########## end of Messages #############################3

setLocale(){
case $LANG in
    ja*)LOCALE=ja ;;
    *) LOCALE=C ;;
esac
#isXRunning || LOCALE=C
if [ ${TERM} = "linux" ]; then
    LOCALE=C
fi
}

CheckOption() {
if [ $# != 1 ] ; then
    eval ShowUsage_$LOCALE ${0##*/}
    return -1
fi
return 0
}

CheckXIMStatus() {
case "$XIM_PROG" in
	canna* | Canna*)
		STATUS=canna
		;;
	wnn*|FreeWnn*|freewnn*)
		STATUS=wnn
		;;
	atok17* | Atok17*)
		STATUS=atok17
		;;
	atokx* | Atokx*)
		STATUS=atokx
		;;
	vje*|VJE*)
		STATUS=vje
		;;
	skk*|SKK*)
		STATUS=skk
		;;
	anthy*|Anthy*)
		STATUS=anthy
		;;
	No_IM)
		STATUS=No_IM
		;;
	*)
		STATUS=unknown
		return -1
		;;
esac
return 0
}

ShowIMEStatus() {

CANNARPM=Canna
WNNRPM=FreeWnn
WNN7RPM_S=wnn7-server
WNN7RPM_C=wnn7-xclients
WNN6RPM=wnn6
ATOKXRPM=atokx
ATOK17RPM=atokx
VJERPM=vje-delta
ANTHYRPM=anthy
UIMXIMRPM=uim-xim
UIMRPM=uim

eval IMEMsg_$LOCALE
cat<<EOF
-----------------------------------------
`eval CurIMEMsg_${LOCALE}`
${STATUS}
-----------------------------------------
`eval PackageStatMsg_${LOCALE}`
[Canna] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${CANNARPM}`
[Wnn]   `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${WNNRPM} 2>&1`
[Wnn7 server] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${WNN7RPM_S} 2>&1`
[Wnn7 client] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${WNN7RPM_C} 2>&1`
[Wnn6]  `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${WNN6RPM} 2>&1`
[Atokx] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${ATOKXRPM} 2>&1`
[Atok17] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${ATOK17RPM} 2>&1`
[VJE-Delta] `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${VJERPM} 2>&1`
[Anthy]  `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${ANTHYRPM} 2>&1`
[UIM]  `LANG=${LOCALE} LC_ALL=${LOCALE} rpm -q ${UIMRPM} 2>&1`
-----------------------------------------
`eval EnvVarMsg_${LOCALE}`
EMACS_IME=${EMACS_IME}
XIM_PROG=${XIM_PROG}
CANNA_SERVER=${CANNA_SERVER}
JSERVER=${JSERVER}
WNN7_FRONT_END=${WNN7_FRONT_END}
WNN7_SERVER=${WNN7_SERVER}
WNN6_FRONT_END=${WNN6_FRONT_END}
WNN6_SERVER=${WNN6_SERVER}
-----------------------------------------
EOF
}

isCannaAlive(){
if [ ! -n "`cannastat 2>/dev/null`" ]; then
    eval CannaNotAliveMsg_$LOCALE
    return -1
fi
return 0
}

isWnnAlive(){
if [ -n "`wnnstat 2>/dev/null| grep wnnstat`" ]; then
    eval WnnNotAliveMsg_$LOCALE
    return -1
fi
return 0
}

isAtokxAlive(){
if [ -z "`ps ax | grep atokmngdaemon 2>/dev/null`" ]; then
    eval AtokxNotAliveMsg_$LOCALE
    return -1
fi
return 0
}

isAtok17Alive(){
if [ -z "`ps ax | grep atokx2mngdaemon 2>/dev/null`" ]; then
    eval Atok17NotAliveMsg_$LOCALE
    return -1
fi
return 0
}

isVjeAlive(){
if [ -z "`/sbin/pidof vjed`" ] ; then
    eval VjeNotAliveMsg_$LOCALE
    return -1
fi
return 0
}

Wnn7Exists(){

if [ -f /usr/lib/wnn7/ja_JP/wnnenvrc ] \
&& [ -x /usr/sbin/jserver ]; then
    return 0
else
    return -1
fi
}

Wnn6Exists(){

#if [ -n "`rpm -q wnn6 2>/dev/null`" ]; then
if [ -f /etc/wnn6/ja_JP/wnnenvrc -o -f /usr/local/lib/wnn6/ja_JP/wnnenvrc ] \
&& [ -x /usr/sbin/jserver -o -x /usr/local/bin/jserver \
                          -o -x /usr/local/bin/Wnn6/jserver ]; then
    return 0
else
    return -1
fi
}

FreeWnnExists(){
#if [ -n "`rpm -q $WNNRPM 2>/dev/null`" ]; then
if [ -f /etc/FreeWnn/ja/wnnenvrc -a -x /usr/bin/jserver ] ; then
    return 0
else
    return -1
fi
}

Atok17Exists(){
if [ -f "/opt/atokx2/sbin/atokx2mngdaemon" ] ; then
    return 0
else
    return -1
fi
}

AtokxExists(){
if [ -f "/usr/lib/locale/ja/atokserver/atokmngdaemon" ] ; then
    return 0
else
    return -1
fi
}

checkKinput2Mod(){
    isXRunning || return -1
    return ${Kinput2mod:-0}
}

startKinput2(){
    (cd /; kinput2ctl $1)
    XMODIFIERS="@im=kinput2"
    GTK_IM_MODULE=xim
    TK_KCPROTO=kinput2
}

startUimXim(){
    if ! (ps ax | grep -q uim-xim) ; then
      uim-xim >& /dev/null &
    fi
    TK_KCPROTO=xim
}

setCanna(){
    isCannaAlive || return -1
    checkKinput2Mod && startKinput2 canna && killXwnmo
    return 0
}

setSKK(){
    XMODIFIERS="@im=skkinput"
    TK_KCPROTO=kinput2
    checkKinput2Mod && kinput2ctl stop
    checkStart skkinput
    return 0
}

setAnthy(){
    startUimXim
    XMODIFIERS="@im=uim-anthy"
    GTK_IM_MODULE=uim-anthy
    checkKinput2Mod && kinput2ctl stop
    checkStart uim-xim
    return 0
}

killXwnmo(){
    if [ ! -z `pidofmyproc xwnmo` ]; then
        if [ -x /usr/local/bin/Wnn6/killxwnmo ] ; then
            /usr/local/bin/Wnn6/killxwnmo
        else
            killall xwnmo
        fi
    fi
}

setWnn7(){
isWnnAlive || return -1
echo "WNN7_FRONT_END: " $WNN7_FRONT_END
case "$WNN7_FRONT_END" in
    xwnmo)
        checkKinput2Mod && kinput2ctl stop
	XWNMO_PROG=/usr/X11R6/bin/xwnmo
	XWNMO_RPM=`rpm -q wnn7-xclients`
	case "$XWNMO_RPM" in
	    wnn7-xclients-1.01-*)
		# 1.00 doesn't have --gtk_expose_patch option
		# 1.01 needs --gtk_expose_patch option for Vine's gtk+
		# after 1.02 doesn't need --gtk_expose_patch option
		XWNMO_OPT=--gtk_expose_patch
		;;
	    wnn7-xclients-1.03-*)
		# 1.03 needs -map option for nautilus on Gnome2
		# after 1.03(1.04 or 1.1?), unknown this requirements.
		XWNMO_OPT=-map
		;;
	esac
	XWNMO_GEOM=1x1-0-48
	isXRunning && (checkStart $XWNMO_PROG $XWNMO_OPT -D ${WNN7_SERVER:=localhost} -g $XWNMO_GEOM) && sleep 2
        XMODIFIERS="@im=_XWNMO"
	GTK_IM_MODULE=xim
        TK_KCPROTO=xim
	;;
    *)
	WNN7_FRONT_END=kinput2
	checkKinput2Mod && startKinput2 wnn7 && killXwnmo
	;;
esac
return 0
}

setWnn6(){
isWnnAlive || return -1
echo "WNN6_FRONT_END: " $WNN6_FRONT_END
case "$WNN6_FRONT_END" in
    xwnmo)
	isXRunning || eval xwnmoWarning_$LOCALE
	checkKinput2Mod && kinput2ctl stop

	if [ -x /usr/local/bin/Wnn6/xwnmo ] ; then
		XWNMO_PROG=/usr/local/bin/Wnn6/xwnmo
	else
		XWNMO_PROG=xwnmo
	fi
	isXRunning && (checkStart $XWNMO_PROG -D ${WNN6_SERVER:=localhost} &)
	XMODIFIERS="@im=_XWNMO"
#	XMODIFIERS="@im=kinput2" # needed for emacs
	GTK_IM_MODULE=xim
	TK_KCPROTO=xim
	;;
    *)
	WNN6_FRONT_END=kinput2
	checkKinput2Mod && startKinput2 wnn6 && killXwnmo
	;;
esac
return 0
}

setFreeWnn(){
isWnnAlive || return -1
checkKinput2Mod && startKinput2 FreeWnn
return 0
}

setAtokx(){
isAtokxAlive || return -1
export XMODIFIERS="@im=htt"
export TK_KCPROTO=htt
export HTT_DISABLE_STATUS_WINDOW=t
export HTT_GENERATES_KANAKEY=t
export HTT_USES_LINUX_XKEYSYM=t

if [ -z "`ps xc | grep httx`" -a -n "$DISPLAY" ]; then

   if [ -f ${HOME}/.Xdefaults ]; then
      xrdb -merge ${HOME}/.Xdefaults
    fi
    if [ -f "/usr/lib/im/locale/ja/atokserver/shift_space" ]; then
        echo "*conversionOnKeys: Kanji Zenkaku_Hankaku <Shift>space" | /usr/X11R6/bin/xrdb -m
    else
        echo "*conversionOnKeys: Kanji Zenkaku_Hankaku <Ctrl>space" | /usr/X11R6/bin/xrdb -m
    fi
    LD_PRELOAD=/usr/X11R6/lib/libXi.so.6 /usr/lib/im/httx -if atok12 -lc_basiclocale ja_JP -xim htt_xbe &

    times=0

    while :
    do
     if [ -n "`ps xc | grep LookupAux`" ]; then
#         sleep 1
         break
     fi
     usleep 100000
     times=$[$times+1]
     if [ $times -ge "30" ]; then
         break
     fi
    done

fi

return 0
}

setAtok17(){
isAtok17Alive || return -1
export XMODIFIERS="@im=htt"
export TK_KCPROTO=htt
export HTT_DISABLE_STATUS_WINDOW=t
export HTT_GENERATES_KANAKEY=t
export HTT_USES_LINUX_XKEYSYM=t

if [ -z "`ps xc | grep httx`" -a -n "$DISPLAY" ]; then

   if [ -f ${HOME}/.Xdefaults ]; then
      xrdb -merge ${HOME}/.Xdefaults
    fi
    if [ -f "/usr/lib/im/locale/ja/atokserver/shift_space" ]; then
        echo "*conversionOnKeys: Kanji Zenkaku_Hankaku <Shift>space" | /usr/X11R6/bin/xrdb -m
    else
        echo "*conversionOnKeys: Kanji Zenkaku_Hankaku <Ctrl>space" | /usr/X11R6/bin/xrdb -m
    fi
    /usr/lib/im/httx -if atokx2 -xim htt_xbe &

    times=0

    while :
    do
     if [ -n "`ps xc | grep LookupAux`" ]; then
         break
     fi
     usleep 100000
     times=$[$times+1]
     if [ $times -ge "30" ]; then
         break
     fi
    done

fi

return 0
}

setVje(){
isVjeAlive || return -1
    XMODIFIERS="@im=vje"
    GTK_IM_MODULE=xim
    echo "Emacs*useXim: true" | /usr/X11R6/bin/xrdb -m
    times=0
    ( while :
      do
        if [ $(ps xc | grep nautilus | wc -l) -ge "2" ]; then
	  sleep 2
	  break
	fi
        sleep 1
	times=$[$times+1]
	if [ $times -ge "10" ]; then
	  break
	fi
      done && PATH=$PATH:/usr/sbin vje ) &
    return 0
}

setNone(){
    kinput2ctl stop
    return 0
}

setIME(){

SYSIME=/etc/sysconfig/ime
USERIMEDIR=$HOME/.vine/system/
USERIME=${USERIMEDIR}/ime

source ${SYSIME}
[ -f ${USERIME} ] && source ${USERIME}

#echo ${XIM_PROG}
if [ "$1" = "default" ]; then
    TARGET=${XIM_PROG:-canna}
    FE=${WNN6_FRONT_END}
else
    TARGET=$1
fi

case "$TARGET" in
	canna)
		eval SettingIMMsg_$LOCALE canna
		EMACS_IME=canna
		XIM_PROG=canna
		setCanna ;;
	wnn7)
		eval SettingIMMsg_$LOCALE wnn7
		WNNTAG=wnn7
		EMACS_IME=wnn7
		XIM_PROG=wnn7
		WNN7_FRONT_END=${FE:=xwnmo}
	    setWnn7 ;;
	wnn6)
		eval SettingIMMsg_$LOCALE wnn6
		WNNTAG=wnn6
		EMACS_IME=wnn6
		XIM_PROG=wnn6
		WNN6_FRONT_END=${FE:=kinput2}
	    setWnn6 ;;
	FreeWnn)
		eval SettingIMMsg_$LOCALE FreeWnn
		WNNTAG=FreeWnn
		EMACS_IME=wnn
		XIM_PROG=FreeWnn
	    setFreeWnn ;;
	wnn)
	    XIM_PROG=wnn
	    WNN6_FRONT_END=kinput2
            WNN7_FRONT_END=kinput2
            if Wnn7Exists ; then
                eval SettingIMMsg_$LOCALE wnn7
                WNNTAG=wnn7
		EMACS_IME=wnn7
            elif Wnn6Exists ; then
		eval SettingIMMsg_$LOCALE wnn6
		WNNTAG=wnn6
		EMACS_IME=wnn6
	    elif FreeWnnExists ; then
		eval SettingIMMsg_$LOCALE FreeWnn
		WNNTAG=FreeWnn
		EMACS_IME=wnn
	    else
		eval NoIMMsg_$LOCALE wnn
		return -1
	    fi
	    case "$WNNTAG" in
		wnn7) setWnn7 ;;
		wnn6) setWnn6 ;;
		FreeWnn) setFreeWnn ;;
	    esac
	    ;;
	atokx)
		eval SettingIMMsg_$LOCALE atokx
		EMACS_IME=atokx
		XIM_PROG=atokx
	    setAtokx
	    ;;
	atok17)
		eval SettingIMMsg_$LOCALE atok17
		EMACS_IME=atokx
		XIM_PROG=atokx
	    setAtok17
	    ;;
	vje)
	    eval SettingIMMsg_$LOCALE vje
	    EMACS_IME=vje
	    XIM_PROG=vje
	    setVje
	    ;;
	anthy)
	    eval SettingIMMsg_$LOCALE anthy
	    EMACS_IME=anthy
	    XIM_PROG=anthy
	    setAnthy
	    ;;
	skk)
	    eval SettingIMMsg_$LOCALE skk
	    EMACS_IME=skk
	    XIM_PROG=skk
	    setSKK
	    ;;
	none|No_IM)
	    eval SettingIMMsg_$LOCALE No_IM
	    EMACS_IME=No_IM
	    XIM_PROG=No_IM
	    setNone
	    ;;
esac

[ -d ${USERIMEDIR} ] || mkdir -p ${USERIMEDIR}

CANNA_SERVER=${CANNA_SERVER:=unix}

cat <<EOF >${USERIME}
EMACS_IME=${EMACS_IME}
XIM_PROG=${XIM_PROG}
JSERVER=${JSERVER:=localhost}
WNN7_FRONT_END=${FE:=xwnmo}
WNN6_FRONT_END=${FE:=kinput2}
WNN7_SERVER=${WNN7_SERVER:=localhost}
WNN6_SERVER=${WNN6_SERVER:=localhost}
CANNA_SERVER=${CANNA_SERVER/localhost/unix}
GTK_IM_MODULE=${GTK_IM_MODULE}
EOF
return 0
}

unsetImeFuncs(){
unset -f ShowUsage_C ShowUsage_ja IMEMsg_C IMEMsg_ja
unset -f CurIMEMsg_ja CurIMEMsg_C PackageStatMsg_ja PackageStatMsg_C
unset -f EnvVarMsg_ja EnvVarMsg_C SettingIMMsg_ja SettingIMMsg_C
unset -f CannaNotAliveMsg_ja CannaNotAliveMsg_C WnnNotAliveMsg_ja WnnNotAliveMsg_C
unset -f AtokxNotAliveMsg_ja AtokxNotAliveMsg_C
unset -f Atok17NotAliveMsg_ja Atok17NotAliveMsg_C
unset -f VjeNotAliveMsg_ja VjeNotAliveMsg_C
unset -f NoIMMsg_ja NoIMMsg_C ExitMsg_ja ExitMsg_C xwnmoWarning_ja xwnmoWarning_C
unset -f setLocale CheckOption CheckXIMStatus ShowIMEStatus isCannaAlive isWnnAlive
unset -f isAtokxAlive AtokxExists setAtokx
unset -f isAtok17Alive Atok17Exists setAtok17
unset -f isVjeAlive setVje
unset -f Wnn7Exists Wnn6Exists FreeWnnExists checkKinput2Mod startKinput2 setCanna killXwnmo
unset -f setWnn7 setWnn6 setFreeWnn setIME setNone unsetImeFuncs
unset -f setSKK
unset -f setAnthy startUimXim
}
