Estoy intentando detectar la gnome-terminal
codificación de caracteres actual desde la línea de comando. He intentado usar gconftool
:
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
current
$ gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
Pero si ahora voy al gnome-terminal
menú, elijo Terminal->Set Character Encoding->ISO-8859-10
y luego ejecuto nuevamente
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
por lo que la codificación /apps/gnome-terminal/profiles/Default/encoding
no ha cambiado ISO-8859-10
aunque el terminal esté usando esa codificación. Por lo tanto, parece que gconftool
no se puede utilizar para determinar la codificación actual.
Respuesta1
Recomiendo verificar locale charmap
la salida de (que informa los valores establecidos por $LANG, $LC_CTYPE, $LC_ALL). Este no consulta directamente al terminal, pero es esencial para la mayoría de las aplicaciones que la configuración regional esté configurada correctamente, de forma consistente con el terminal. Si informa algo más que el comportamiento real, no solo su aplicación sino casi todas las demás aplicaciones se comportarán mal en el terminal, y no es su culpa. Por supuesto, el usuario puede cambiar la codificación desde el menú, pero si decide dispararse en el pie, no hay mucho que pueda/deba hacer contra. No es su tarea detectar una configuración defectuosa en todo el sistema. Además, no hay forma de que usted se dé cuenta si el usuario cambia la codificación mientras su aplicación se está ejecutando, por lo que no creo que tenga mucho sentido verificarla al inicio.
Si realmente necesita verificar el comportamiento del tiempo de ejecución, puede emitir secuencias de escape que consulten la posición del cursor (e informarlo en un formato determinado como si se hubiera escrito desde el teclado) y luego emitir algunos bytes que, por ejemplo, formen un solo carácter. en UTF-8 mientras hay varios caracteres en cualquier otra codificación (deshabilitando el eco local mientras tanto, para que las pulsaciones de teclas por parte del usuario no hagan avanzar el cursor) y vuelva a consultar la posición del cursor. Quizás sea demasiado problema y realmente no valga la pena el esfuerzo.
Respuesta2
Aquí hay una solución a medias, que aborda el problema de determinar la codificación cuando /apps/gnome-terminal/profiles/Default/encoding
es igual a la cadena current
. Suponiendo que la cadena current
significa que gnome-terminal
debería usar la configuración regional actual.
Es tentador comprobar la LANG
variable para determinar la codificación, pero segúnestePregunta, eso no es confiable. En su lugar I18N::Langinfo
se debe utilizar el módulo Perl :
temp=$(gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding)
if [[ $temp == "current" ]] ; then
perl -MI18N::Langinfo=langinfo,CODESET -E 'say langinfo(CODESET())'
else
echo $temp
fi
Tenga en cuenta que esta respuesta no aborda el problema de determinar la gnome-terminal
codificación cuando el usuario cambia manualmente la codificación desde el gnome-terminal
menú.