Ещё всякие муторности о процессе конфигурирования моего линукса.
Я ненавижу локаль.
Слово LC_CTYPE вызывает во мне что-то родственное ненависти.
Сейчас провёл кучу времени, настраивая свой любимый mutt, чтобы показывал русские буквы нормально.
Я ещё не знаю, буду ли пробовать какие-то графические юниксовские мейлеры (типа Mozilla Thunderbird или Evolution). Может, и стоит. Но пока что я возвращаюсь обратно к mutt'у, по которому успел заскучать (подписаться, что ли, заново на mutt-dev?).
Казалось бы, всё должно быть просто. Я привык, что в mutt могу менять charset терминала (т.е. говорить mutt'у, какой у меня charset терминала): ":set charset=cp1251", например. Проверить, что начинает правильно показывать (скажем, письма-уведомления о комментах от ЖЖ), внести это навсегда в .muttrc, и всё.
Тем более, что программа-терминал, gnome-terminal, позволяет тоже менять кодировки на лету: просто в меню выбираешь, в какой кодировке она должна воспринимать выдаваемые ей символы (включая и UTF-8 при желании), и сохранить можно. Очень удобно. Если добавить к этому то, что она позволяет много терминалов в табах одного окна открывать, и палитру настраивать -- вообще непонятно, зачем теперь rxvt нужен, я и не буду его ставить, наверное.
Но. mutt долго и упорно отказывался показывать мне русские буквы: либо показывает вопросительные знаки, либо восьмеричные коды типа \321 вместо символа. То есть, думает, что не может показать, хотя на самом деле может.
После долгого и упорного копания в исходниках оказалось, что при постройке он по умолчанию использует системные функции перехода от wide characters (Юникода, короче говоря) к multi-byte characters. Внутри у себя он всё пропускает через Юникод так или иначе, но при выдаче на экран обратно переводит в какую-то кодировку. Но функции, которыми он при этом пользуется - wcrtomb(), mbrtowc() и некоторые другие - используют локаль для того, чтобы знать, откуда и куда переводить. Т.е. заботливо выставленный мной set charset ничего не делает, т.к. (например) mutt во время вырисовки строки письма, получив одим символ в Юникоде, вызывает wcrtomb(), чтобы перевести его обратно в восьмибитную строку и передать curses, а этот вызов пользуется выставленной у меня локалью и туда и переводит (если может вообще). Если при постройке mutt не находит этих системных функций, то он использует свои такие же, но пользующиеся как раз не локалью, а его конфигурационной переменной charset - то, к чему я привык в прошлом.
В общем, я попытался поиграться с локалью, но, как обычно, кроме приступа ненависти это ни к чему не привело. Сначала долго вспоминал счастливо забытый за последние годы формат LC_CTYPE и прочих его друзей. Ну хорошо, вспомнил. LC_CTYPE=ru_RU mutt . Он поднимается и показывает мне русские буквы, переведенные... в ISO-8859-5! Боже мой, какое извращение, ну да, это же дифолтная кодировка ru_RU... пытаюсь выставить LC_CTYPE=ru_RU.CP1251, но это ни к чему не приводит, отказывается показывать в cp1251. Да я и в любом случае не хочу менять локаль на русскую! Потом только неожиданных проблем не оберёшься с сортировкой символов и ещё кучей вещей.
Потыкался я, потыкался, и решил перестроить mutt, чтобы он не пользовался glibc'шными функциями для перевода unicode<-->multibyte, а пользовался своими. К счастью, у его configure и флаг для этого нашёлся: --without-wc-funcs. Осталось только сообразить, как это сделать "правильно" в рамках Gentoo... после недолгого копания в недрах portage и ebuild нашлась переменная EXTRA_ECONF, и после запуска EXTRA_ECONF="--without-wc-funcs" emerge mutt всё собралось, построилось и заработало.
Уф.
Да, вот как я настроил себе почту пока. Установил postfix (ну не sendmail же, а qmail я совсем не знаю и учить лень). Собственно принимать почту у себя на машине пока не собираюсь, незачем особо, использую postfix только для отсылки (а почему не какой-нибудь простой примитивный отсыльщик типа ssmtp? потому что мне нужна посылка через рилей, и говорить с ним надо на SASL, а всякие простые отсыльщики этого не умеют. postfix умеет). Принимаю почту, качая её через POP3, для этого использую getmail (решил попробовать что-то новое вместо fetchmail), пока отлично работает. Для локальной delivery с фильтрами использую maildrop (опять же вместо привычного procmail, чтобы что-то новое попробовать), тоже очень хорошо выглядит, фильтры намного удобнее устроены, чем у procmail'а, правда, не успел их ещё пока настроить.
Все вокруг стремятся убедить меня использовать формат maildir для хранения почты -- Gentoo так конфигурирует по умолчанию, и пришлось его переиграть на использование mbox; getmail и maildrop умеют доставлять как в mbox, так и в maildir, но в один голос советуют maildir (для тех, кто не знает: mbox - это когда ящик писем в одном файле, maildir - ящик занимает директорию, каждое письмо - в отдельном файле + некоторые контрольные. Основное преимущество maildir в том, что не нужно locking делать для добавления нового письма, и не нужно сканировать все письма, когда открываешь ящик). Но я решил всё же не делать этого пока. Во-первых, привык к mbox'у всё же. Во-вторых, психологически мне тяжело принять систему, при которой каждое письмо в отдельном файле (и, скажем, ящик большой рассылки превращается в директорию с 3000 крошечными файлами). Даже хоть я умом и понимаю, что современные файловые системы с этим неплохо справляются, уж лучше, по крайней мере, чем в прошлом, а сердце всё равно не хочет это принять. Ну и ладно, поживу ещё с mbox'ом.
Я ненавижу локаль.
Слово LC_CTYPE вызывает во мне что-то родственное ненависти.
Сейчас провёл кучу времени, настраивая свой любимый mutt, чтобы показывал русские буквы нормально.
Я ещё не знаю, буду ли пробовать какие-то графические юниксовские мейлеры (типа Mozilla Thunderbird или Evolution). Может, и стоит. Но пока что я возвращаюсь обратно к mutt'у, по которому успел заскучать (подписаться, что ли, заново на mutt-dev?).
Казалось бы, всё должно быть просто. Я привык, что в mutt могу менять charset терминала (т.е. говорить mutt'у, какой у меня charset терминала): ":set charset=cp1251", например. Проверить, что начинает правильно показывать (скажем, письма-уведомления о комментах от ЖЖ), внести это навсегда в .muttrc, и всё.
Тем более, что программа-терминал, gnome-terminal, позволяет тоже менять кодировки на лету: просто в меню выбираешь, в какой кодировке она должна воспринимать выдаваемые ей символы (включая и UTF-8 при желании), и сохранить можно. Очень удобно. Если добавить к этому то, что она позволяет много терминалов в табах одного окна открывать, и палитру настраивать -- вообще непонятно, зачем теперь rxvt нужен, я и не буду его ставить, наверное.
Но. mutt долго и упорно отказывался показывать мне русские буквы: либо показывает вопросительные знаки, либо восьмеричные коды типа \321 вместо символа. То есть, думает, что не может показать, хотя на самом деле может.
После долгого и упорного копания в исходниках оказалось, что при постройке он по умолчанию использует системные функции перехода от wide characters (Юникода, короче говоря) к multi-byte characters. Внутри у себя он всё пропускает через Юникод так или иначе, но при выдаче на экран обратно переводит в какую-то кодировку. Но функции, которыми он при этом пользуется - wcrtomb(), mbrtowc() и некоторые другие - используют локаль для того, чтобы знать, откуда и куда переводить. Т.е. заботливо выставленный мной set charset ничего не делает, т.к. (например) mutt во время вырисовки строки письма, получив одим символ в Юникоде, вызывает wcrtomb(), чтобы перевести его обратно в восьмибитную строку и передать curses, а этот вызов пользуется выставленной у меня локалью и туда и переводит (если может вообще). Если при постройке mutt не находит этих системных функций, то он использует свои такие же, но пользующиеся как раз не локалью, а его конфигурационной переменной charset - то, к чему я привык в прошлом.
В общем, я попытался поиграться с локалью, но, как обычно, кроме приступа ненависти это ни к чему не привело. Сначала долго вспоминал счастливо забытый за последние годы формат LC_CTYPE и прочих его друзей. Ну хорошо, вспомнил. LC_CTYPE=ru_RU mutt . Он поднимается и показывает мне русские буквы, переведенные... в ISO-8859-5! Боже мой, какое извращение, ну да, это же дифолтная кодировка ru_RU... пытаюсь выставить LC_CTYPE=ru_RU.CP1251, но это ни к чему не приводит, отказывается показывать в cp1251. Да я и в любом случае не хочу менять локаль на русскую! Потом только неожиданных проблем не оберёшься с сортировкой символов и ещё кучей вещей.
Потыкался я, потыкался, и решил перестроить mutt, чтобы он не пользовался glibc'шными функциями для перевода unicode<-->multibyte, а пользовался своими. К счастью, у его configure и флаг для этого нашёлся: --without-wc-funcs. Осталось только сообразить, как это сделать "правильно" в рамках Gentoo... после недолгого копания в недрах portage и ebuild нашлась переменная EXTRA_ECONF, и после запуска EXTRA_ECONF="--without-wc-funcs" emerge mutt всё собралось, построилось и заработало.
Уф.
Да, вот как я настроил себе почту пока. Установил postfix (ну не sendmail же, а qmail я совсем не знаю и учить лень). Собственно принимать почту у себя на машине пока не собираюсь, незачем особо, использую postfix только для отсылки (а почему не какой-нибудь простой примитивный отсыльщик типа ssmtp? потому что мне нужна посылка через рилей, и говорить с ним надо на SASL, а всякие простые отсыльщики этого не умеют. postfix умеет). Принимаю почту, качая её через POP3, для этого использую getmail (решил попробовать что-то новое вместо fetchmail), пока отлично работает. Для локальной delivery с фильтрами использую maildrop (опять же вместо привычного procmail, чтобы что-то новое попробовать), тоже очень хорошо выглядит, фильтры намного удобнее устроены, чем у procmail'а, правда, не успел их ещё пока настроить.
Все вокруг стремятся убедить меня использовать формат maildir для хранения почты -- Gentoo так конфигурирует по умолчанию, и пришлось его переиграть на использование mbox; getmail и maildrop умеют доставлять как в mbox, так и в maildir, но в один голос советуют maildir (для тех, кто не знает: mbox - это когда ящик писем в одном файле, maildir - ящик занимает директорию, каждое письмо - в отдельном файле + некоторые контрольные. Основное преимущество maildir в том, что не нужно locking делать для добавления нового письма, и не нужно сканировать все письма, когда открываешь ящик). Но я решил всё же не делать этого пока. Во-первых, привык к mbox'у всё же. Во-вторых, психологически мне тяжело принять систему, при которой каждое письмо в отдельном файле (и, скажем, ящик большой рассылки превращается в директорию с 3000 крошечными файлами). Даже хоть я умом и понимаю, что современные файловые системы с этим неплохо справляются, уж лучше, по крайней мере, чем в прошлом, а сердце всё равно не хочет это принять. Ну и ладно, поживу ещё с mbox'ом.
no subject
Date: 2003-08-08 10:14 pm (UTC)no subject
Date: 2003-08-08 10:25 pm (UTC)no subject
Date: 2003-08-09 05:08 am (UTC)Единственное, что меня немного беспокоит - это отсутствие до конца очеловеченного процесса апгрейда версий Fire/Thunder-Bird-ов. Там у них у всех настоятельно реокмендуется создавать новые профайлы при установке новых версий, а это тащит за собой геморрой с импортом-экспортом. Но по сравнению с удобствами пользования это всё пустяки.
Хотя наличие Thunderbird mutt-а, конечно, не отменяет, я без него не могу :) Иксы приходят и уходят, а текстовая консоль - она навсегда :)
Про postfix ничего не скажу - так я и не сталкивался с ним ни разу реально. Как перешёл когда-то с sendmail-а на smail и потом на exim, так больше ничего и не хотелось, а в Дебиане exim вообще по умолчанию ставится.
no subject
Date: 2003-08-09 05:19 am (UTC)это внушает грусть
большие куски локали устаревают, если переходить на Unicode.
no subject
Date: 2003-08-09 11:25 am (UTC)Я в восторге от табов его, и потихоньку отучаюсь открывать много терминальных окон, открываю табы внутри одного окна. Переделал клавиши, чтобы Ctrl-N открывал новый таб, Ctrl-W закрывал (как в Мозилле/Опере), совсем хорошо стало.
no subject
Date: 2003-08-09 11:27 am (UTC)no subject
Date: 2003-08-09 11:28 am (UTC)The wonders never cease.
Нет-нет, подальше от всего этого.
no subject
Date: 2003-08-09 11:30 am (UTC)no subject
Date: 2003-08-10 02:27 pm (UTC)Не знаю, надо ли оно вам, но:
Дельфийское нутро Бата периодически проскакивает в виде неприятных Access Violations в самых неожиданных местах. Не смертельно. В 1.62, что у меня, почти не встречаются(а пользуюсь я им давно). На диалапе(у меня так) - при большом трафике коннекты уходят в Idle (как пишет Бат в Connection Centre) и не снимаются батовскими же средствами. Такое соединение(если не обратить внимание), вполне может просуществовать несколько часов, пока не заметишь. Ну, мелкие глюки всякие, тоже не смертельно. Но раздражает.
Правда сколько-нибудь альтернативный(по возможностям, нужным мне) почтовик под win32 я так и не нашёл. Так что кушаю кактус.
no subject
Date: 2003-08-10 02:32 pm (UTC)Кроме того, механизм фильтрации у него довольно мощный, для моих нужд вполне адекватным оказался.
no subject
Date: 2003-08-10 02:35 pm (UTC)ru_RU у вас алиасом на официальную русскую кодировку.
grep ru | /usr/share/locale/locale.alias
cp1251 локали у вас, скорее всего, в системе просто не существует.
locale -a | grep ru
no subject
Date: 2003-08-10 02:40 pm (UTC)grep ru | /usr/share/locale/locale.alias
russian ru_RU.ISO-8859-5
cp1251 локали у вас, скорее всего, в системе просто не существует.
locale -a | grep ru
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_UA
ru_UA.koi8u
russian
Да, вы правы, очевидно. Ну и фиг с ним ;)
no subject
Date: 2003-08-10 05:23 pm (UTC)no subject
Date: 2003-08-10 05:43 pm (UTC)no subject
Date: 2003-08-10 06:02 pm (UTC)Так он, зараза, под новое ядро компилиться не хочет.
no subject
Date: 2003-08-11 02:28 am (UTC)Там появились индексные файлы? Если нет, то все равно придется перебрать все эти тысячи файлов для получения заголовков, другое дело, что дальше header'a письма читать ничего не нужно.
Но это все равно часто работает медленнее mbox, т.к. там хоть все кэшируется заранее, а 3000 маленьких файлов вполне себе могут быть разбросаны по диску, поэтому каждый читается отдельно.
По-крайней мере, пару лет назад было так :)
no subject
Date: 2003-08-11 02:32 am (UTC)Кстати, профайл никогда не менял. Просто переписываю полностью дистрибутив Thunderbird, пока все работает :)