x11-tools/xim

177 lines
5.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# $Id: xim,v 1.28 2004/12/07 11:04:59 mfabian Exp $
#
# Copyright © 2001 SUSE LINUX GmbH Nuernberg, Germany
#
# Mike Fabian <mfabian@suse.de>, 2000, 2001, 2002, 2004, 2005, 2006, 2007
# Werner Fink <werner@suse.de>, 2007
#
# This program comes with ABSOLUTELY NO WARRANTY; it may be copied or modified
# under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
# usually, /etc/X11/xim is used to start a default input method.
# If want to change the default, you have the following options:
#
# 1) Set the variable INPUT_METHOD in /etc/sysconfig/language.
# For example:
# INPUT_METHOD="scim"
# This changes the default for all users
# 2) set and export the variable "INPUT_METHOD" in ~/.profile in the
# home directory of a user (or ~/.login for csh users) For example:
# export INPUT_METHOD="scim"
# This changes the default only for one user.
#
# The possible values for the variable INPUT_METHOD are the names
# of the scripts which exist in the directory /etc/X11/xim.d/
# for example if a script /etc/X11/xim.d/scim exists,
# and INPUT_METHOD is set to "scim", this script will be tried first
# to start an input method and only if this fails other input methods
# will be tried.
#
# 3) If you don't like the behaviour of any of the available
# scripts in /etc/X11/xim.d, you can write your own script
# containing the necessary lines to start your preferred input
# method and save it as ~/.xim. If a file ~/.xim exists, only
# this file is sourced to start an input method and nothing
# else.
# Usually you need only a few lines, the systemwide
# file to start an input method, /etc/X11/xim, is only so
# complicated because it tries to find a nice default depending
# on the language and the installed input methods.
#
# For example, if you want to use "scim" as your input method,
# it is enough to have the following 5 lines (and nothing else)
# in your ~/.xim file:
# export XMODIFIERS="@im=SCIM"
# export GTK_IM_MODULE=scim
# export QT_IM_SWITCHER=imsw-multi
# export QT_IM_MODULE=scim
# scim -d
echo "/etc/X11/xim: Checking whether an input method should be started."
#
# Get variables from the user environment which might influence the start
# of an input method (see bug #235044, written by Werner Fink <werner@suse.de>):
#
if shopt -q extglob ; then
extglob=1
else
extglob=0
shopt -s extglob
fi
adduserenv () {
local cur var=${1+"$@"}
var=${var// /|}
while read cur; do
case "$cur" in
@($var)=*)
echo "/etc/X11/xim: user environment variable $cur"
eval $cur
esac
done < <(exec -l -a ${SHELL##*/} $SHELL -c printenv)
}
# if gdm passes the language to Xsession, we should not override this
# see http://bugzilla.novell.com/show_bug.cgi?id=440371
# The test for $GDM_LANG needs to be changed slightly as soon as other
# displaymanager also pass a second argument to Xsession.
if test -n "$GDM_LANG" ; then
echo "/etc/X11/xim: use GDM_LANG=$GDM_LANG"
adduserenv INPUT_METHOD
else
adduserenv LANG LC_CTYPE LC_ALL INPUT_METHOD
fi
test $extglob -eq 0 && shopt -u extglob
# if INPUT_METHOD is already set to something non-empty here,
# the user must have set it in ~/.profile or ~/.login or on the
# command line before using startx. In that case, don't
# read the system wide default from /etc/sysconfig/language,
# use the user supplied value instead:
if [ "$INPUT_METHOD" == "" ] ; then
echo "sourcing /etc/sysconfig/language to get the value of INPUT_METHOD"
source /etc/sysconfig/language
fi
if [ "$INPUT_METHOD" != "" ]; then
echo "INPUT_METHOD is set to $INPUT_METHOD."
echo "Trying to start this user selected input method first ..."
if [ -r "/etc/X11/xim.d/$INPUT_METHOD" ] ; then
echo "sourcing /etc/X11/xim.d/$INPUT_METHOD"
source /etc/X11/xim.d/$INPUT_METHOD
if [ "$?" == "0" ]; then
echo "Start of $INPUT_METHOD succeeded."
return 0;
else
echo "Start of $INPUT_METHOD failed."
fi
else
echo "/etc/X11/xim.d/$INPUT_METHOD does not exist."
fi
else
echo "INPUT_METHOD is not set or empty (no user selected input method)."
fi
# Determine the LC_CTYPE locale category setting
tmplang=${LC_ALL-${LC_CTYPE-${LANG-en_US}}}
echo "Trying to start a default input method for the locale $tmplang ..."
subdirlist=$tmplang
while [ "$tmplang" != ${tmplang%[_.@]*} ]
do
tmplang=${tmplang%[_.@]*}
subdirlist="$subdirlist $tmplang"
done
im_failed=0
for subdir in $subdirlist ; do
if [ -d /etc/X11/xim.d/$subdir ] ; then
echo "Checking for a default input method in /etc/X11/xim.d/$subdir/"
for im in /etc/X11/xim.d/$subdir/* ; do
if [ -r $im ] ; then
echo "sourcing $im ..."
source $im
if [ "$?" == "0" ]; then
echo "$im started sucessfully"
return 0
else
echo "$im failed"
im_failed=1
fi
fi
done
fi
done
if [ "$im_failed" == 0 ] ; then
echo "There is no default input method for the current locale."
else
echo "All default input methods tried for the current locale failed."
fi
# If there is no default input method for the current locale, set
# XMODIFIERS="@im=local". "@im=local" means "use compose and dead-keys" and
# some programs will use compose and dead-keys only if XMODIFIERS
# is set to either "@im=local" or "@im=none".
export XMODIFIERS="@im=local"
# Input of German umlauts in acroread doesnt work if GTK_IM_MODULE is
# unset. Make sure that it is set here, setting it to "xim" is
# a reasonable setting together with XMODIFIERS="@im=local". See also
# http://bugzilla.novell.com/show_bug.cgi?id=413879
export GTK_IM_MODULE=xim