¿Cómo detectar la codificación de caracteres actual de gnome-terminal?

¿Cómo detectar la codificación de caracteres actual de gnome-terminal?

Estoy intentando detectar la gnome-terminalcodificació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-terminalmenú, elijo Terminal->Set Character Encoding->ISO-8859-10y 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/encodingno ha cambiado ISO-8859-10aunque el terminal esté usando esa codificación. Por lo tanto, parece que gconftoolno se puede utilizar para determinar la codificación actual.

Respuesta1

Recomiendo verificar locale charmapla 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/encodinges igual a la cadena current. Suponiendo que la cadena currentsignifica que gnome-terminaldebería usar la configuración regional actual.

Es tentador comprobar la LANGvariable para determinar la codificación, pero segúnestePregunta, eso no es confiable. En su lugar I18N::Langinfose 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-terminalcodificación cuando el usuario cambia manualmente la codificación desde el gnome-terminalmenú.

información relacionada