uxterm revision d522f475
1d522f475Smrg#!/bin/sh 2d522f475Smrg# $XTermId: uxterm,v 1.25 2007/12/30 16:33:36 tom Exp $ 3d522f475Smrg# 4d522f475Smrg# wrapper script to setup xterm with UTF-8 locale 5d522f475Smrg 6d522f475Smrgwhoami=uxterm 7d522f475Smrg 8d522f475Smrg: ${XTERM_PROGRAM=xterm} 9d522f475Smrg 10d522f475Smrg# Check if there is a workable locale program. If there is not, we will read 11d522f475Smrg# something via the standard error. Ignore whatever is written to the 12d522f475Smrg# standard output. 13d522f475Smrglocale=`sh -c "LC_ALL=C LC_CTYPE=C LANG=C locale >/dev/null" 2>&1` 14d522f475Smrgfound=no 15d522f475Smrg 16d522f475Smrg# Check for -version and -help options, to provide a simple return without 17d522f475Smrg# requiring the program to create a window: 18d522f475Smrgif test $# = 1 19d522f475Smrgthen 20d522f475Smrg case $1 in 21d522f475Smrg -v|-ver*|-h|-he*) 22d522f475Smrg $XTERM_PROGRAM "$@" 23d522f475Smrg exit $? 24d522f475Smrg ;; 25d522f475Smrg esac 26d522f475Smrgfi 27d522f475Smrg 28d522f475Smrg# Check environment variables that xterm does, in the same order: 29d522f475Smrgfor name in LC_ALL LC_CTYPE LANG 30d522f475Smrgdo 31d522f475Smrg eval 'value=$'$name 32d522f475Smrg if test -n "$value" ; then 33d522f475Smrg case $value in 34d522f475Smrg *.utf8|*.UTF8|*.utf-8|*.UTF-8) 35d522f475Smrg found=yes 36d522f475Smrg ;; 37d522f475Smrg *.utf8@*|*.UTF8@*|*.utf-8@*|*.UTF-8@*) 38d522f475Smrg found=yes 39d522f475Smrg ;; 40d522f475Smrg C|POSIX) 41d522f475Smrg # Yes, I know this is not the same - but why are you 42d522f475Smrg # here then? 43d522f475Smrg value=en_US 44d522f475Smrg ;; 45d522f475Smrg esac 46d522f475Smrg break 47d522f475Smrg fi 48d522f475Smrgdone 49d522f475Smrg 50d522f475Smrg# If we didn't find one that used UTF-8, modify the safest one. Not everyone 51d522f475Smrg# has a UTF-8 locale installed (and there appears to be no trivial/portable way 52d522f475Smrg# to determine whether it is, from a shell script). We could check if the 53d522f475Smrg# user's shell does not reset unknown locale specifiers, but not all shells do. 54d522f475Smrgif test $found != yes ; then 55d522f475Smrg if test -n "$value" ; then 56d522f475Smrg value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8 57d522f475Smrg else 58d522f475Smrg name="LC_CTYPE" 59d522f475Smrg value="en_US.UTF-8" 60d522f475Smrg fi 61d522f475Smrg eval save=\$${name} 62d522f475Smrg eval ${name}=${value} 63d522f475Smrg eval export ${name} 64d522f475Smrg if test -z "$locale" ; then 65d522f475Smrg # The 'locale' program tries to do a sanity check. 66d522f475Smrg check=`sh -c "locale >/dev/null" 2>&1` 67d522f475Smrg if test -n "$check" ; then 68d522f475Smrg eval ${name}=${save} 69d522f475Smrg eval export ${name} 70d522f475Smrg 71d522f475Smrg echo "$whoami tried to use locale $value by setting \$$name" >&2 72d522f475Smrg xmessage -file - <<EOF 73d522f475Smrg$whoami tried unsuccessfully to use locale $value 74d522f475Smrgby setting \$$name to "${value}". 75d522f475SmrgEOF 76d522f475Smrg exit 1 77d522f475Smrg fi 78d522f475Smrg fi 79d522f475Smrgfi 80d522f475Smrg 81d522f475Smrg# for testing: 82d522f475Smrg#test -f ./xterm && XTERM_PROGRAM=./xterm 83d522f475Smrg 84d522f475Smrgexec $XTERM_PROGRAM -class UXTerm -title $whoami -u8 "$@" 85