%PDF- %PDF-
Direktori : /bin/ |
Current File : //bin/im-config |
#!/bin/sh -e # Input Method configuration # (C) 2010-2017 Osamu Aoki <osamu@debian.org>, GPL-2+ # vim: set sts=4 expandtab: ############################################################# # Common configuration functions and pre-defined variables # used by this im-config and its hook script. ############################################################# . /usr/share/im-config/xinputrc.common ############################################################# # Set configuration file used based on UID ############################################################# if [ $(id -u) = 0 ]; then IM_CONFIG_XINPUTRC=$IM_CONFIG_XINPUTRC_SYS IM_CONFIG_XINPUTRC_TYPE="$(gettext "system configuration")" else IM_CONFIG_XINPUTRC=$IM_CONFIG_XINPUTRC_USR IM_CONFIG_XINPUTRC_TYPE="$(gettext "user configuration")" fi ############################################################# # Configuration functions and pre-defined variables used by # this im-config. ############################################################# IM_CONFIG_AUTOMATIC=$(automatic_im) IM_CONFIG_AUTOBASE=$(autobase_im) . /usr/share/im-config/im-config.common # This is used everywhere IM_CONFIG_MSGA="$(gettext "Explicit selection is not required to enable the automatic configuration if the active one is default/auto/cjkv/missing.")" IM_CONFIG_RTFM="$(gettext "If a daemon program for the previous configuration is re-started by the X session manager, you may need to kill it manually with kill(1).")" IM_CONFIG_RTFM="$(eval_gettext "\$IM_CONFIG_RTFM See im-config(8) and /usr/share/doc/im-config/README.Debian.gz for more.")" IM_CONFIG_ALL=false IM_CONFIG_DRY=false if [ "x$DISPLAY" != "x" ]; then # X (GTK GUI) dialog with zenity IM_CONFIG_DIALOG="X" else # console dialog IM_CONFIG_DIALOG="console" fi IM_CONFIG_LIST=false IM_CONFIG_ACTIVE0=$(IM_CONFIG_XINPUTRC=$IM_CONFIG_XINPUTRC_SYS active_im) IM_CONFIG_ACTIVE=$(active_im) ############################################################# # Parse command line arguments ############################################################# IM_CONFIG_ID="$(eval_gettext "Input Method Configuration (im-config, ver. \$IM_CONFIG_VERSION)")" IM_CONFIG_SETMODE="${IM_CONFIG_SETMODE:-+x}" set $IM_CONFIG_SETMODE while [ -n "$1" ]; do case $1 in -d) # debug trace mode :-) undocumented. IM_CONFIG_SETMODE="-x" set $IM_CONFIG_SETMODE ;; -a) IM_CONFIG_ALL=true ;; -c) IM_CONFIG_DIALOG="console" ;; -x) IM_CONFIG_DIALOG="X" ;; -s) IM_CONFIG_DRY=true ;; -l) IM_CONFIG_LIST=true ;; -m) echo "$IM_CONFIG_ACTIVE0" echo "$IM_CONFIG_ACTIVE" echo "$IM_CONFIG_AUTOMATIC" echo "$IM_CONFIG_PREFERRED" echo "$IM_CONFIG_AUTOBASE" exit ;; -n) shift IM_CONFIG_NAME=$1 write_config $IM_CONFIG_NAME $IM_CONFIG_XINPUTRC exit ;; -o) shift . $IM_CONFIG_DATA/??_$1.conf echo -n "$IM_CONFIG_LONG" exit ;; *) eval_gettext \ "\$IM_CONFIG_ID (c) Osamu Aoki <osamu@debian.org>, GPL-2+ See im-config(8), /usr/share/doc/im-config/README.Debian.gz." >&2 echo >&2 exit ;; esac shift done ############################################################# # Check number of installed input methods (10-89) ############################################################# IM_CONFIG_NUMBER=0 IM_CONFIG_AVAIL="" for IM_CONFIG_PATH in $IM_CONFIG_DATA/[12345678][0123456789]_*.rc ; do IM_CONFIG_NAME=$(name_im $IM_CONFIG_PATH) if ( $IM_CONFIG_ALL || avail_menu $IM_CONFIG_NAME ) && \ [ $IM_CONFIG_NAME != "none" ] && \ [ $IM_CONFIG_NAME != "xim" ]; then IM_CONFIG_NUMBER="$(($IM_CONFIG_NUMBER + 1))" fi if ( $IM_CONFIG_ALL || avail_menu $IM_CONFIG_NAME ) && \ [ $IM_CONFIG_NAME != "none" ]; then IM_CONFIG_AVAIL="$IM_CONFIG_AVAIL $IM_CONFIG_NAME" fi done ############################################################# # Report installed input methods and exit. (NO-GUI needed) ############################################################# if $IM_CONFIG_LIST ; then echo "$IM_CONFIG_AVAIL" exit fi ############################################################# # Sanity check (GUI) ############################################################# if [ $IM_CONFIG_DIALOG = "X" ]; then kdialog_found=1 if [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then kdialog_found=0 fi if [ $kdialog_found -ne 0 ] && [ ! -x /usr/bin/zenity ]; then eval_gettext "E: zenity must be installed." >&2 echo >&2 exit 1 fi if [ "x$DISPLAY" = "x" ]; then eval_gettext "E: X server must be available." >&2 echo >&2 exit 1 fi else if [ ! -x /usr/bin/whiptail ]; then eval_gettext "E: whiptail must be installed." >&2 echo >&2 exit 1 fi fi ############################################################# # Do not run im-config if "$IM_CONFIG_ACTIVE" = "custom" ############################################################# if [ "$IM_CONFIG_ACTIVE" = "custom" ]; then msgbox "$(eval_gettext "The \$IM_CONFIG_XINPUTRC_TYPE has been manually modified. Remove the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC manually to use im-config. \$IM_CONFIG_RTFM")" exit fi ############################################################# # UI dialogue for im-config ############################################################# IM_CONFIG_MSG="$(eval_gettext "Current configuration for the input method: * Default mode defined in /etc/default/im-config: '\$IM_CONFIG_DEFAULT_MODE' * Active configuration: '\$IM_CONFIG_ACTIVE' (normally missing) * Normal automatic choice: '\$IM_CONFIG_AUTOBASE' (normally ibus or fcitx5) * Override rule: '\$IM_CONFIG_PREFERRED_RULE' * Current override choice: '\$IM_CONFIG_PREFERRED' (Locale='\$IM_CONFIG_LC_CTYPE') * Current automatic choice: '\$IM_CONFIG_AUTOMATIC' * Number of valid choices: \$IM_CONFIG_NUMBER (normally 1) * Desktop environment: '\$IM_CONFIG_CURRENT_DESKTOP' The configuration set by im-config is activated by re-starting the system.")" if [ $IM_CONFIG_NUMBER = 0 ]; then # no input method installed, make a simple recommendation IM_CONFIG_MSG="$(eval_gettext "\$IM_CONFIG_MSG In order to enter non-ASCII native characters, you must install one set of input method tools: * ibus and its associated packages (recommended) * multilingual support * GUI configuration * fcitx5 and its associated packages * multilingual support with focus on Chinese * GUI configuration * uim and its associated packages * multilingual support * manual configuration with the Scheme code * text terminal support even under non-X environments * any set of packages which depend on im-config \$IM_CONFIG_MSGA")" elif [ $IM_CONFIG_NUMBER = 1 ]; then # one input method installed IM_CONFIG_MSG="$(eval_gettext "\$IM_CONFIG_MSG \$IM_CONFIG_MSGA")" else IM_CONFIG_MSG="$(eval_gettext "\$IM_CONFIG_MSG \$IM_CONFIG_MSGA Available input methods:\$IM_CONFIG_AVAIL Unless you really need them all, please make sure to install only one input method tool.")" fi msgbox "$IM_CONFIG_MSG" IM_CONFIG_YNQ="$(eval_gettext "Do you explicitly select the \${IM_CONFIG_XINPUTRC_TYPE}? * Select NO, if you do not wish to update it. (recommended) * Select YES, if you wish to update it.")" if yesno "$IM_CONFIG_YNQ" ; then # If you wish to update configuration explicitly IM_CONFIG_MENULIST="$(menulist_init \ "$(eval_gettext "Select \$IM_CONFIG_XINPUTRC_TYPE. The user configuration supersedes the system one.")" \ "$(gettext "select")" \ "$(gettext "name")" \ "$(gettext "description")" )" # Make selection menu list (00-89) for IM_CONFIG_PATH in $( echo $IM_CONFIG_DATA/[012345678][0123456789]_*.rc | sort ) ; do IM_CONFIG_NAME=$(name_im $IM_CONFIG_PATH) IM_CONFIG_NAME_SHORT="$(dsc_short $IM_CONFIG_NAME)" if $IM_CONFIG_ALL || avail_menu $IM_CONFIG_NAME ; then if [ "$IM_CONFIG_NAME" = "$IM_CONFIG_ACTIVE" ]; then IM_CONFIG_MENULIST="$IM_CONFIG_MENULIST $(menulist_add $IM_CONFIG_NAME "$IM_CONFIG_NAME_SHORT" on)" else IM_CONFIG_MENULIST="$IM_CONFIG_MENULIST $(menulist_add $IM_CONFIG_NAME "$IM_CONFIG_NAME_SHORT" off)" fi fi done IM_CONFIG_TMPFILE=$(mktemp --tmpdir im-config.XXXXXXXX) set +x menulist_eval "$IM_CONFIG_MENULIST" 2>$IM_CONFIG_TMPFILE IM_CONFIG_NAME=$(cat $IM_CONFIG_TMPFILE) set $IM_CONFIG_SETMODE rm $IM_CONFIG_TMPFILE if [ "x$IM_CONFIG_NAME" = "xREMOVE" ]; then # remove configuration file if ! $IM_CONFIG_DRY ; then rm -f $IM_CONFIG_XINPUTRC fi IM_CONFIG_ACTIVE="missing" IM_CONFIG_MSG="$(eval_gettext "Removing the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC.")" IM_CONFIG_RTFM="$(eval_gettext " The \$IM_CONFIG_XINPUTRC_TYPE is modified by im-config. Restart the session to activate the new \$IM_CONFIG_XINPUTRC_TYPE. \$IM_CONFIG_RTFM")" elif [ -z "$IM_CONFIG_NAME" ]; then # keep configuration file if [ "x$IM_CONFIG_ACTIVE" = "xmissing" ]; then IM_CONFIG_MSG="$(eval_gettext "Keeping the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC as missing.")" else IM_CONFIG_MSG="$(eval_gettext "Keeping the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC unchanged as \$IM_CONFIG_ACTIVE.")" fi else # update configuration file if ! $IM_CONFIG_DRY ; then write_config $IM_CONFIG_NAME $IM_CONFIG_XINPUTRC fi IM_CONFIG_ACTIVE="$IM_CONFIG_NAME" IM_CONFIG_MSG="$(eval_gettext "Setting the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC to \$IM_CONFIG_ACTIVE.")" IM_CONFIG_RTFM="$(eval_gettext " The \$IM_CONFIG_XINPUTRC_TYPE is modified by im-config. Restart the session to activate the new \$IM_CONFIG_XINPUTRC_TYPE. \$IM_CONFIG_RTFM")" fi if $IM_CONFIG_DRY ; then # dry-run IM_CONFIG_MSG="$(eval_gettext "*** This is merely a simulated run and no changes are made. *** \$IM_CONFIG_MSG")" fi else # keep configuration file if [ "x$IM_CONFIG_ACTIVE" = "xmissing" ]; then IM_CONFIG_MSG="$(eval_gettext "Keeping the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC as missing.")" else IM_CONFIG_MSG="$(eval_gettext "Keeping the \$IM_CONFIG_XINPUTRC_TYPE \$IM_CONFIG_XINPUTRC unchanged as \$IM_CONFIG_ACTIVE.")" fi fi if [ "x$IM_CONFIG_ACTIVE" = "xmissing" ] || \ [ "x$IM_CONFIG_ACTIVE" = "xdefault" ] || \ [ "x$IM_CONFIG_ACTIVE" = "xauto" ] || \ [ "x$IM_CONFIG_ACTIVE" = "xcjkv" ] ; then IM_CONFIG_AUTOMATIC_LONG=$(dsc_long $IM_CONFIG_AUTOMATIC) msgbox "$(eval_gettext "\$IM_CONFIG_MSG Automatic configuration selects: \$IM_CONFIG_AUTOMATIC \$IM_CONFIG_AUTOMATIC_LONG \$IM_CONFIG_RTFM")" else IM_CONFIG_ACTIVE_LONG=$(dsc_long $IM_CONFIG_ACTIVE) msgbox "$(eval_gettext "\$IM_CONFIG_MSG Manual configuration selects: \$IM_CONFIG_ACTIVE \$IM_CONFIG_ACTIVE_LONG \$IM_CONFIG_RTFM")" fi