217 lines
6.9 KiB
Plaintext
217 lines
6.9 KiB
Plaintext
# Input Method configuration, im-config.common
|
|
# (C) Osamu Aoki <osamu@debian.org>, GPL-2+
|
|
# vim: set sts=4 expandtab:
|
|
#
|
|
#############################################################
|
|
# IM Configuration functions used by im-config
|
|
# *** NOT TO BE CALLED BY ANY RUNTIME HOOK SCRIPTS ***
|
|
#############################################################
|
|
# active_im
|
|
# echo active IM configuration name set in the system/user configuration
|
|
active_im () {
|
|
if [ ! -r $IM_CONFIG_XINPUTRC ]; then
|
|
echo -n "missing"
|
|
elif check_md5sum $IM_CONFIG_XINPUTRC ; then
|
|
# when configuration is autogenerated by im-config
|
|
IM_CONFIG_ACTIVE_IM=$(sed -n -e 's/^run_im \([^ ]*\) *$/\1/p' < $IM_CONFIG_XINPUTRC)
|
|
if [ -z "$IM_CONFIG_ACTIVE_IM" ]; then
|
|
echo -n "bogus"
|
|
elif [ -r $IM_CONFIG_DATA/[012345678]?_$IM_CONFIG_ACTIVE_IM.conf ]; then
|
|
echo $IM_CONFIG_ACTIVE_IM
|
|
else
|
|
echo -n "bogus"
|
|
fi
|
|
else
|
|
# when configuration is changed manually by the user
|
|
echo -n "custom"
|
|
fi
|
|
}
|
|
|
|
# dsc_short <config>
|
|
# echo IM configuration short description for IM configuration name
|
|
dsc_short () {
|
|
if [ -r $IM_CONFIG_DATA/??_$1.conf ] ; then
|
|
# use subshell here
|
|
{
|
|
# subshell
|
|
. $IM_CONFIG_DATA/??_$1.conf
|
|
if [ "x$IM_CONFIG_AUTOMATIC" = "x$1" -a "x$IM_CONFIG_PREFERRED" = "x$1" ]; then
|
|
echo -n "$IM_CONFIG_SHORT @!"
|
|
elif [ "x$IM_CONFIG_PREFERRED" = "x$1" ]; then
|
|
echo -n "$IM_CONFIG_SHORT !"
|
|
elif [ "x$IM_CONFIG_AUTOMATIC" = "x$1" ]; then
|
|
echo -n "$IM_CONFIG_SHORT @"
|
|
else
|
|
echo -n "$IM_CONFIG_SHORT"
|
|
fi
|
|
}
|
|
else
|
|
IM_CONFIG_CODE="dsc_short"
|
|
IM_CONFIG_NAME=$1
|
|
eval_gettext "E: Configuration for \$IM_CONFIG_NAME not found at \$IM_CONFIG_CODE." >&2
|
|
echo >&2
|
|
fi
|
|
}
|
|
|
|
# dsc_long <config>
|
|
# echo IM configuration long description for IM configuration name
|
|
dsc_long () {
|
|
if [ -r $IM_CONFIG_DATA/??_$1.conf ] ; then
|
|
# use subshell here
|
|
{
|
|
# subshell
|
|
. $IM_CONFIG_DATA/??_$1.conf
|
|
echo -n "$IM_CONFIG_LONG"
|
|
}
|
|
else
|
|
IM_CONFIG_CODE="dsc_long"
|
|
IM_CONFIG_NAME=$1
|
|
eval_gettext "E: Configuration for \$IM_CONFIG_NAME not found at \$IM_CONFIG_CODE." >&2
|
|
echo >&2
|
|
fi
|
|
}
|
|
|
|
#############################################################
|
|
# Package status function used by menu
|
|
#############################################################
|
|
# avail_menu <config>
|
|
# configuration availability for menu listing
|
|
# define package_menu for 00-89
|
|
avail_menu () {
|
|
if [ -r $IM_CONFIG_DATA/??_$1.conf ]; then
|
|
. $IM_CONFIG_DATA/??_$1.conf
|
|
package_menu
|
|
else
|
|
IM_CONFIG_CODE="avail_menu"
|
|
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
|
|
}
|
|
|
|
#############################################################
|
|
# User modification verification functions used by im-config
|
|
#############################################################
|
|
# check_md5sum <filename>
|
|
check_md5sum () {
|
|
if [ -r "$1" ] && \
|
|
[ "# im-config signature: $(head -n -1 $1 | md5sum)" = "$(tail -n 1 $1)" ]; then
|
|
true
|
|
elif [ -r "$1" ] && \
|
|
[ "# im-config signiture: $(head -n -1 $1 | md5sum)" = "$(tail -n 1 $1)" ]; then
|
|
true # compatibility
|
|
else
|
|
false
|
|
fi
|
|
}
|
|
# write_config <config name> <file name>
|
|
write_config () {
|
|
IM_CONFIG_NAME=$1
|
|
IM_CONFIG_XINPUTRC=$2
|
|
if [ "x$IM_CONFIG_NAME" = "xREMOVE" ]; then
|
|
rm -f $IM_CONFIG_XINPUTRC
|
|
elif [ -r $IM_CONFIG_XINPUTRC ] && ! check_md5sum $IM_CONFIG_XINPUTRC ; then
|
|
eval_gettext "E: Configuration in \$IM_CONFIG_XINPUTRC is manually managed. Doing nothing." >&2
|
|
echo >&2
|
|
exit 1
|
|
elif [ ! -r $IM_CONFIG_DATA/??_$IM_CONFIG_NAME.conf ]; then
|
|
eval_gettext "E: \$IM_CONFIG_NAME is bogus configuration for \$IM_CONFIG_XINPUTRC. Doing nothing." >&2
|
|
echo >&2
|
|
exit 1
|
|
else
|
|
echo "# im-config(8) generated on $(date -R)" > $IM_CONFIG_XINPUTRC
|
|
echo "run_im $IM_CONFIG_NAME" >> $IM_CONFIG_XINPUTRC
|
|
echo "# im-config signature: $(md5sum < $IM_CONFIG_XINPUTRC)" >> $IM_CONFIG_XINPUTRC
|
|
fi
|
|
}
|
|
|
|
#############################################################
|
|
# GUI/console UI functions used by im-config
|
|
#############################################################
|
|
|
|
# msgbox (wrap and scroll)
|
|
msgbox () {
|
|
if [ $IM_CONFIG_DIALOG = "console" ]; then
|
|
# console
|
|
whiptail --title "$IM_CONFIG_ID" --msgbox "$1" 15 76
|
|
else
|
|
if [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then
|
|
# KDE GUI
|
|
tmp_file=$(mktemp --tmpdir im-config-kdialog.XXXXXXXX)
|
|
echo -n "$1" > $tmp_file
|
|
kdialog --title "$IM_CONFIG_ID" --textbox $tmp_file 600 400
|
|
rm -f $tmp_file
|
|
else
|
|
# GTK GUI
|
|
echo -n "$1" | zenity --width=600 --height=400 --title "$IM_CONFIG_ID" --text-info
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# yesno (text size is fixed and must be small)
|
|
yesno () {
|
|
if [ $IM_CONFIG_DIALOG = "console" ]; then
|
|
# console
|
|
whiptail --title "$IM_CONFIG_ID" --yesno "$1" 20 76
|
|
else
|
|
if [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then
|
|
# KDE GUI
|
|
kdialog --title "$IM_CONFIG_ID" --yesno "$1"
|
|
else
|
|
# GTK GUI
|
|
zenity --title "$IM_CONFIG_ID" --width=600 --height=400 --question --text "$1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# menulist_init (size fixed)
|
|
# $1 text
|
|
# $2 colum1(GUI)
|
|
# $3 colum2(GUI)
|
|
# $4 colum3(GUI)
|
|
menulist_init () {
|
|
if [ $IM_CONFIG_DIALOG = "console" ]; then
|
|
# console
|
|
printf "%s" "whiptail --title \"$IM_CONFIG_ID\" --radiolist \"$1\" 23 76 18"
|
|
elif [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then
|
|
printf "%s" "kdialog --title=\"$IM_CONFIG_ID\" --radiolist \"$1\""
|
|
else
|
|
# GTK GUI
|
|
printf "%s" "zenity --title=\"$IM_CONFIG_ID\" --width=600 --height=400 --text=\"$1\" --list --radiolist --column \"$2\" --column \"$3\" --column \"$4\""
|
|
fi
|
|
}
|
|
|
|
# menulist_add (size fixed)
|
|
# $1 $y
|
|
# $2 \"$(dsc_short $y)\"
|
|
# $3 on
|
|
menulist_add () {
|
|
if [ $IM_CONFIG_DIALOG = "console" ]; then
|
|
# console
|
|
printf "%s" "$1 \"$2\" $3"
|
|
elif [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then
|
|
printf "%s" "$1 \"$2\" $3"
|
|
else
|
|
# GTK GUI
|
|
if [ "x$3" = "xon" ]; then
|
|
printf "%s" "TRUE $1 \"$2\""
|
|
else
|
|
printf "%s" "FALSE $1 \"$2\""
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# menulist_eval
|
|
# $1 command-line
|
|
menulist_eval () {
|
|
if [ $IM_CONFIG_DIALOG = "console" ]; then
|
|
# console
|
|
eval "$1"
|
|
else
|
|
# KDE or GTK GUI
|
|
eval "$1" 3>&2 2>/dev/null 1>&3
|
|
fi
|
|
}
|