Как обнаружить текущую терминальную гномом кодировку символов?

Я пытаюсь обнаружить ток gnome-terminal кодировка символов из командной строки. Я попытался использовать 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

Но если я теперь перехожу в gnome-terminal меню и выбирает Terminal->Set Character Encoding->ISO-8859-10 и затем выполненный снова

$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8

так кодирование в /apps/gnome-terminal/profiles/Default/encoding не изменился на ISO-8859-10 даже при том, что терминал использует то кодирование. Таким образом, это кажется gconftool не может использоваться для определения текущего кодирования.

3
задан 20 June 2015 в 18:06

2 ответа

Я рекомендую проверить locale charmap вывод (который сообщает о значениях, установленных $LANG, $LC_CTYPE, $LC_ALL). Этот непосредственно не запрашивает терминал, но для большинства приложений важно, чтобы локаль была настроена правильно, последовательно с терминалом. Если это сообщает о чем-либо еще, чем фактическое поведение, не только Ваше приложение, но и в значительной степени любое приложение будет неправильно себя вести в терминале, и это не Ваш отказ. Конечно, пользователь может изменить кодирование из меню, но если они решают выстрелить себе в ногу, нет очень, Вы можете/должны, делают против. Это не Ваша задача обнаружить дефектную установку в масштабе всей системы. Также нет никакого способа для Вас заметить, переключает ли пользователь кодирование, в то время как Ваше приложение работает, таким образом, я не думаю, что существует много точки в проверке его при запуске.

, Если действительно действительно необходимо проверить поведение во время выполнения, можно испустить escape-последовательности, которые запрашивают позицию курсора (и сообщают ее в определенном формате, как будто она была введена с клавиатуры), затем испустите некоторые байты это, например, сформируйте отдельный символ в UTF-8, в то время как несколько символов в любом другом кодировании (запрещающий локальное эхо тем временем, таким образом, нажатия клавиш пользователем не совершенствуют курсор), и запрашивают позицию курсора снова. Это - возможно, слишком много проблемы и действительно не стоящее усилия.

2
ответ дан 1 December 2019 в 16:27

Вот полурешение, решая проблему определения кодирования, когда /apps/gnome-terminal/profiles/Default/encoding равно строке current. Предположение, что строка current средства, что gnome-terminal должен использовать текущую локаль.

заманчиво проверить LANG переменная для определения кодирования, но согласно этот вопрос, который не надежен. Вместо этого модуль Perl I18N::Langinfo должен использоваться:

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

Примечание, что этот ответ не решает проблему определения gnome-terminal кодирование, когда пользователь вручную изменяет кодирование от gnome-terminal меню.

1
ответ дан 1 December 2019 в 16:27

Другие вопросы по тегам:

Похожие вопросы: