uxterm revision 1.1.1.5 1 1.1 mrg #!/bin/sh
2 1.1.1.5 mrg # $XTermId: uxterm,v 1.30 2023/05/03 23:47:34 tom Exp $
3 1.1.1.2 mrg # -----------------------------------------------------------------------------
4 1.1.1.2 mrg # this file is part of xterm
5 1.1.1.2 mrg #
6 1.1.1.4 mrg # Copyright 2001-2020,2023 by Thomas E. Dickey
7 1.1.1.2 mrg #
8 1.1.1.2 mrg # All Rights Reserved
9 1.1.1.2 mrg #
10 1.1.1.2 mrg # Permission is hereby granted, free of charge, to any person obtaining a
11 1.1.1.2 mrg # copy of this software and associated documentation files (the
12 1.1.1.2 mrg # "Software"), to deal in the Software without restriction, including
13 1.1.1.2 mrg # without limitation the rights to use, copy, modify, merge, publish,
14 1.1.1.2 mrg # distribute, sublicense, and/or sell copies of the Software, and to
15 1.1.1.2 mrg # permit persons to whom the Software is furnished to do so, subject to
16 1.1.1.2 mrg # the following conditions:
17 1.1.1.2 mrg #
18 1.1.1.2 mrg # The above copyright notice and this permission notice shall be included
19 1.1.1.2 mrg # in all copies or substantial portions of the Software.
20 1.1.1.2 mrg #
21 1.1.1.2 mrg # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 1.1.1.2 mrg # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 1.1.1.2 mrg # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 1.1.1.2 mrg # IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
25 1.1.1.2 mrg # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 1.1.1.2 mrg # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 1.1.1.2 mrg # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 1.1.1.2 mrg #
29 1.1.1.2 mrg # Except as contained in this notice, the name(s) of the above copyright
30 1.1.1.2 mrg # holders shall not be used in advertising or otherwise to promote the
31 1.1.1.2 mrg # sale, use or other dealings in this Software without prior written
32 1.1.1.2 mrg # authorization.
33 1.1.1.2 mrg # -----------------------------------------------------------------------------
34 1.1 mrg #
35 1.1 mrg # wrapper script to setup xterm with UTF-8 locale
36 1.1 mrg
37 1.1 mrg whoami=uxterm
38 1.1 mrg
39 1.1.1.3 mrg : "${XTERM_PROGRAM=xterm}"
40 1.1 mrg
41 1.1 mrg # Check if there is a workable locale program. If there is not, we will read
42 1.1 mrg # something via the standard error. Ignore whatever is written to the
43 1.1 mrg # standard output.
44 1.1 mrg locale=`sh -c "LC_ALL=C LC_CTYPE=C LANG=C locale >/dev/null" 2>&1`
45 1.1 mrg found=no
46 1.1 mrg
47 1.1 mrg # Check for -version and -help options, to provide a simple return without
48 1.1 mrg # requiring the program to create a window:
49 1.1 mrg if test $# = 1
50 1.1 mrg then
51 1.1 mrg case $1 in
52 1.1 mrg -v|-ver*|-h|-he*)
53 1.1 mrg $XTERM_PROGRAM "$@"
54 1.1 mrg exit $?
55 1.1 mrg ;;
56 1.1 mrg esac
57 1.1 mrg fi
58 1.1 mrg
59 1.1.1.3 mrg # Check environment variables that might be used for encoding:
60 1.1 mrg for name in LC_ALL LC_CTYPE LANG
61 1.1 mrg do
62 1.1 mrg eval 'value=$'$name
63 1.1 mrg if test -n "$value" ; then
64 1.1 mrg case $value in
65 1.1 mrg *.utf8|*.UTF8|*.utf-8|*.UTF-8)
66 1.1 mrg found=yes
67 1.1 mrg ;;
68 1.1 mrg *.utf8@*|*.UTF8@*|*.utf-8@*|*.UTF-8@*)
69 1.1 mrg found=yes
70 1.1 mrg ;;
71 1.1.1.3 mrg *)
72 1.1.1.3 mrg value="" # ignore
73 1.1.1.3 mrg continue # keep trying
74 1.1 mrg ;;
75 1.1 mrg esac
76 1.1 mrg break
77 1.1 mrg fi
78 1.1 mrg done
79 1.1 mrg
80 1.1 mrg # If we didn't find one that used UTF-8, modify the safest one. Not everyone
81 1.1 mrg # has a UTF-8 locale installed (and there appears to be no trivial/portable way
82 1.1 mrg # to determine whether it is, from a shell script). We could check if the
83 1.1 mrg # user's shell does not reset unknown locale specifiers, but not all shells do.
84 1.1 mrg if test $found != yes ; then
85 1.1 mrg if test -n "$value" ; then
86 1.1.1.4 mrg value=`echo "${value}" |sed -e 's/[.@].*//'`.UTF-8
87 1.1 mrg else
88 1.1.1.3 mrg expect=
89 1.1.1.3 mrg for name in LC_ALL LC_CTYPE LANG
90 1.1.1.3 mrg do
91 1.1.1.3 mrg eval 'check=$'$name
92 1.1.1.3 mrg if test -n "$check"
93 1.1.1.3 mrg then
94 1.1.1.3 mrg expect=`echo "$check" | sed -e 's/[.@].*$//'`
95 1.1.1.3 mrg test -n "$expect" && break
96 1.1.1.3 mrg fi
97 1.1.1.3 mrg done
98 1.1.1.3 mrg if test -z "$expect" ; then
99 1.1.1.3 mrg name="LC_CTYPE"
100 1.1.1.3 mrg expect="en_US"
101 1.1.1.3 mrg fi
102 1.1.1.3 mrg value=`locale -a | awk -v "expect=$expect" 'BEGIN {
103 1.1.1.3 mrg exact=""
104 1.1.1.3 mrg maybe=""
105 1.1.1.3 mrg }
106 1.1.1.3 mrg /[.](utf|UTF)[-]?8(@.*)?$/ {
107 1.1.1.3 mrg if (index($0, "C.") == 1) {
108 1.1.1.3 mrg maybe=$0;
109 1.1.1.3 mrg }
110 1.1.1.3 mrg if (index($0, expect ".") == 1) {
111 1.1.1.3 mrg exact=$0;
112 1.1.1.3 mrg }
113 1.1.1.3 mrg }
114 1.1.1.3 mrg END {
115 1.1.1.3 mrg if ( exact != "" ) {
116 1.1.1.3 mrg print exact;
117 1.1.1.3 mrg } else if ( maybe != "" ) {
118 1.1.1.3 mrg print maybe;
119 1.1.1.3 mrg } else {
120 1.1.1.3 mrg print "";
121 1.1.1.3 mrg }
122 1.1.1.3 mrg }
123 1.1.1.3 mrg '`
124 1.1.1.3 mrg test -z "$value" && value="en_US.UTF-8"
125 1.1 mrg fi
126 1.1 mrg eval save=\$${name}
127 1.1 mrg eval ${name}=${value}
128 1.1 mrg eval export ${name}
129 1.1 mrg if test -z "$locale" ; then
130 1.1 mrg # The 'locale' program tries to do a sanity check.
131 1.1 mrg check=`sh -c "locale >/dev/null" 2>&1`
132 1.1 mrg if test -n "$check" ; then
133 1.1.1.3 mrg eval ${name}="${save}"
134 1.1 mrg eval export ${name}
135 1.1 mrg
136 1.1 mrg echo "$whoami tried to use locale $value by setting \$$name" >&2
137 1.1 mrg xmessage -file - <<EOF
138 1.1 mrg $whoami tried unsuccessfully to use locale $value
139 1.1 mrg by setting \$$name to "${value}".
140 1.1 mrg EOF
141 1.1 mrg exit 1
142 1.1 mrg fi
143 1.1 mrg fi
144 1.1 mrg fi
145 1.1 mrg
146 1.1 mrg # for testing:
147 1.1 mrg #test -f ./xterm && XTERM_PROGRAM=./xterm
148 1.1 mrg
149 1.1.1.4 mrg exec "$XTERM_PROGRAM" -class UXTerm -u8 "$@"
150