summaryrefslogblamecommitdiffstats
path: root/source/x/x11-skel/scripts/imconfig
blob: a576b2732e50163e1d00268f233a0f68ee2f2995 (plain) (tree)

















































































































































                                                                                                               
#!/bin/sh

# Copyright 2022  Heinz Wiesinger, Amsterdam, The Netherlands
# Copyright 2022  Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

TMP=$HOME/.imconfig

if [ ! -d $TMP ]; then
 mkdir -p $TMP
 chmod 700 $TMP
fi

# Set up some background information:
BACKTITLE="--backtitle \"Setting default input method in $HOME/.profile.d/input-method.sh\""

# This stops --backtitle from cluttering the initial install:
if [ ! -r /proc/kcore ]; then
  BACKTITLE=""
fi

# Do we already have an existing default?
unset PRESELECT
if [ -f "$HOME/.profile.d/input-method.sh" ]; then
  CURRENT="$(grep QT_IM_MODULE "$HOME/.profile.d/input-method.sh" | cut -d '=' -f 2)"
  if ! [ "$CURRENT" = "" ]; then
    PRESELECT=" --default-item $CURRENT "
  fi
fi

# Remove any previous script:
rm -f $TMP/tmpscript.sh

# Add the top of the script:
cat << EOF > $TMP/tmpscript.sh
dialog $BACKTITLE --title "SELECT DEFAULT INPUT METHOD FOR X/WAYLAND" $PRESELECT --menu \\
"Please select the default input method to use. This will define the application that is \\
being used to type non-latin characters in a desktop environment." 12 74 0 \\
EOF

# Add default "none" option to disable input methods:
echo "\"none\" \"Do not use input methods\" \\" >> $TMP/tmpscript.sh

# Add fcitx as the first and default entry:
if [ -r /usr/bin/fcitx5-autostart ]; then
  echo "\"fcitx\" \"Fcitx5: Flexible Context-aware Input Tool with eXtension support\" \\" >> $TMP/tmpscript.sh
elif [ -r /usr/bin/fcitx-autostart ]; then
  echo "\"fcitx\" \"Fcitx: Flexible Context-aware Input Tool with eXtension support\" \\" >> $TMP/tmpscript.sh
fi

# Add ibus:
if [ -r /usr/bin/ibus-autostart ]; then
  echo "\"ibus\" \"IBus: Intelligent Input Bus\" \\" >> $TMP/tmpscript.sh
fi

# Add uim:
if [ -r /usr/bin/uim-autostart ]; then
  echo "\"uim\" \"uim: Universal Input Method\" \\" >> $TMP/tmpscript.sh
fi

# Add scim:
if [ -r /usr/bin/scim-autostart ]; then
  echo "\"scim\" \"SCIM: Smart Common Input Method\" \\" >> $TMP/tmpscript.sh
fi

# Then, the tail end:
cat << EOF >> $TMP/tmpscript.sh
2> $TMP/output
if [ ! \$? = 0 ]; then
  rm -f $TMP/output
  echo "Canceled."
  exit
fi

dialog $BACKTITLE --title "SELECT DEFAULT INPUT METHOD FOR X/WAYLAND" --msgbox \\
"Changes will take effect after a re-login." 0 0
EOF

sh $TMP/tmpscript.sh

if [ ! -r $TMP/output ]; then
  rm -f $TMP/tmpscript.sh
  exit
fi

OUTPUT=$(cat $TMP/output)

# Create $HOME/.profile.d if it doesn't exist yet
if ! [ -e "$HOME/.profile.d" ]; then
  mkdir "$HOME/.profile.d"
fi

if [ "$OUTPUT" = "none" ]; then

# Create the bash profile script
cat << EOF > "$HOME/.profile.d/input-method.sh"
# File auto-generated by imconfig
EOF

cat << EOF > "$HOME/.profile.d/input-method.csh"
# File auto-generated by imconfig
EOF

else

# Create the bash profile script
cat << EOF > "$HOME/.profile.d/input-method.sh"
# File auto-generated by imconfig
export XMODIFIERS="@im=$OUTPUT"
export XIM=$OUTPUT
export XIM_PROGRAM=$OUTPUT
export GTK_IM_MODULE=$OUTPUT
export QT_IM_MODULE=$OUTPUT
EOF

# Create the csh profile script
cat << EOF > "$HOME/.profile.d/input-method.csh"
# File auto-generated by imconfig
setenv XMODIFIERS "@im=$OUTPUT"
setenv XIM $OUTPUT
setenv XIM_PROGRAM $OUTPUT
setenv GTK_IM_MODULE $OUTPUT
setenv QT_IM_MODULE $OUTPUT
EOF

fi

rm -f $TMP/tmpscript.sh $TMP/output