%PDF- %PDF-
| Direktori : /usr/share/im-config/ |
| Current File : //usr/share/im-config/xinputrc.common |
# Common shell routine used by im-config
# /usr/share/im-config/xinputrc.common
# (C) Osamu Aoki <osamu@debian.org>, GPL-2+
# vim: set sts=4 sw=4 expandtab:
#
#############################################################
# Common variables used by im-config and its hook script
#############################################################
IM_CONFIG_VERSION=0.57-2
IM_CONFIG_DATA=/usr/share/im-config/data
IM_CONFIG_XINPUTRC_USR=$HOME/.xinputrc
IM_CONFIG_XINPUTRC_SYS=/etc/X11/xinit/xinputrc
IM_CONFIG_DEFAULT=/etc/default/im-config
IM_CONFIG_VERBOSE=false
. gettext.sh
TEXTDOMAIN="im-config"
export TEXTDOMAIN
TEXTDOMAINDIR="/usr/share/locale/"
export TEXTDOMAINDIR
IM_CONFIG_CURRENT_DESKTOP=$XDG_CURRENT_DESKTOP
# hack since LXQt sets XDG_CURRENT_DESKTOP late - https://github.com/lxqt/lxqt/issues/1830
# Upstream claims that the issue was fixed in lxqt-session 0.17.0. However, Lubuntu 21.10
# uses 0.17.1 but it still does not work. So let's keep this hack for now.
if [ -z "$IM_CONFIG_CURRENT_DESKTOP" ] && [ "$DESKTOP_SESSION" = 'lxqt' -o "$DESKTOP_SESSION" = 'Lubuntu' ]; then
IM_CONFIG_CURRENT_DESKTOP=LXQt
fi
if [ -r $IM_CONFIG_DEFAULT ]; then
. $IM_CONFIG_DEFAULT
fi
IM_CONFIG_LC_CTYPE=$(locale | sed -nr 's/LC_CTYPE=\"?([a-zA-Z_]*).*/\1/p')
IM_CONFIG_PREFERRED=$(echo "$IM_CONFIG_PREFERRED_RULE"| sed -rn "s/(^|.*:)${IM_CONFIG_LC_CTYPE},([^:]*)($|:.*$)/\2/p")
#############################################################
# Common functions used by im-config hook script (any mode)
#############################################################
# run selected input method script
# run_im <config>
run_im () {
IM_CONFIG_CODE="run_im"
if [ -r $IM_CONFIG_DATA/[012345678]?_$1.rc ]; then
. $IM_CONFIG_DATA/[012345678]?_$1.rc
IM_CONFIG_NAME=$1
if $IM_CONFIG_VERBOSE ; then
eval_gettext "I: Script for \$IM_CONFIG_NAME started at \$IM_CONFIG_CODE." >&2
echo >&2
fi
else
IM_CONFIG_NAME=$1
eval_gettext "E: Script for \$IM_CONFIG_NAME not found at \$IM_CONFIG_CODE." >&2
echo >&2
fi
}
#############################################################
# Package status function used by im-config and auto mode
#############################################################
# package_status <packagename>
# return TRUE if in properly installed
package_status () {
PACKAGE_NAME="$1"
if [ "$( LC_ALL=C dpkg-query -l "$PACKAGE_NAME" 2>/dev/null | \
sed -n '6s/\([^ ]*\) .*$/\1/p' )" = "ii" ]; then
# return TRUE
return 0
else
return 1
fi
}
#############################################################
# Common functions used by auto mode
#############################################################
# name_im <full_path>
name_im () {
local x
x=${1#$IM_CONFIG_DATA/??_}
x=${x%.rc}
x=${x%.conf}
echo -n $x
}
# avail_auto <config>
# configuration availability for auto mode
# define package_auto for 10-79*.conf
avail_auto () {
if [ -r $IM_CONFIG_DATA/??_$1.conf ]; then
. $IM_CONFIG_DATA/??_$1.conf
package_auto
else
IM_CONFIG_CODE="avail_auto"
IM_CONFIG_NAME=$1
eval_gettext "E: Configuration for \$IM_CONFIG_NAME not found at \$IM_CONFIG_CODE." >&2
echo >&2
# return FALSE
return 1
fi
}
# autobase_im
# echo automatic IM configuration name (without considering locale)
autobase_im () {
# auto mode uses first available script in 10-79
# 78 is for "none" (i.e., no im-config hooks are used), and always available and break
# 79 is for "xim", and never reached
for IM_CONFIG_SCRIPT_PATH in $IM_CONFIG_DATA/[1234567]*.rc ; do
IM_CONFIG_SCRIPT=$(name_im $IM_CONFIG_SCRIPT_PATH)
if avail_auto $IM_CONFIG_SCRIPT ; then
echo -n "$IM_CONFIG_SCRIPT"
break
fi
done
}
# automatic_im
# echo automatic IM configuration name
automatic_im () {
if find_match "$IM_CONFIG_CURRENT_DESKTOP" "$DESKTOP_SETUP_IBUS" ; then
autobase_im
elif [ "$IM_CONFIG_PREFERRED" != "" ] && avail_auto "$IM_CONFIG_PREFERRED" ; then
echo -n "$IM_CONFIG_PREFERRED"
else
autobase_im
fi
}
# mode_cjkv
# echo cjkv IM configuration name
mode_cjkv () {
if find_match "$IM_CONFIG_CURRENT_DESKTOP" "$CJKV_DEFAULT_DESKTOP" ; then
# locale aware IM activation
if find_match "$IM_CONFIG_LC_CTYPE" "$CJKV_LOCALES" ; then
echo -n "auto"
else
echo -n "none"
fi
else
# locale unaware IM activation (fall back to auto)
echo -n "auto"
fi
}
#############################################################
# Common functions used by auto, cjkv and ibus mode
#############################################################
# find_match
# find match of $1 (dynamic value) in $2 (static list)
# return 0=TRUE if match found or $2="*"
# return 1=FALSE if match not found or
# match found with "-" preceded choices in $2
find_match () {
# local: Non-POSIX per shellcheck but usable on dash/bash/zsh/...
local OLDIFS="$IFS" R=1 X Y
IFS=':'
if [ -n "$1" ] && [ -n "$2" ]; then
for X in $1; do
for Y in $2; do
if [ "*" = "$Y" ]; then
R=0
break 2
elif [ "$X" = "$Y" ]; then
R=0
break 2
fi
done
done
fi
IFS="$OLDIFS"
return "$R"
}