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