Обновился до mpc-0.16-alt1 и получил кракозябры, т.к. у меня локаль CP1251, а mpc выдаёт юникод. Проверяется так: mpc | cat
Хотел помочь найти проблемный коммит, но это оказалось непросто: сделал бранч на основе 0.12.0-alt1, посмотрел а в нём только спек. Оказывается в пакете с некоторых пор используются теги. Ок, с ними конечно я не очень умею работать, но попробую: сделал бранч на основе тегов 0.12.1 и 0.14 -- в этих версиях бага ещё нет. Далее надо бы проверить версии 0.15 и 0.16, но для них тегов нет, есть только сразу же последний -- 0.16-alt1 Плохо :( Попробовал слить репо с официального сайта: error: transfer closed with outstanding read data remaining (curl_result = 18, http_code = 200, sha1 = fd14fe69f586531ed231c0310c0c4f37f820eb44) error: Unable to find 946c85ad837cbd90aaf1744291e2cd7c9dde74f5 under http://git.musicpd.org/cgit/master/mpc.git Cannot obtain needed blob 946c85ad837cbd90aaf1744291e2cd7c9dde74f5 while processing commit 551a6949315dd1c0644ec7e7862e6bf6bca2587e. fatal: Fetch failed. Такие дела :-(
Пришлось качать тарболлы с оффсайта. Дошел до 0.14 -- в нём баг уже есть. Почему он не проявился когда я из тегов собирал -- не знаю, может не то собрал. Короче, качаю тарболлы. Вот он ваш хвалёный гит и груповая разработка -- если не следить, то легче с тарболлами дело иметь.
Ага, нашел! Сломалось между 0.14 и 0.15. Вот код из src/main.c: charset_init(command->pipe >= 0 || isatty(STDIN_FILENO), isatty(STDOUT_FILENO)); И вот прототип этой ф-ции: charset_init(bool enable_input, bool enable_output); В моём случае, isatty(STDOUT_FILENO) возвращал 0, т.к. вывод шел не на терминал, а в pipe и перекодировка для выводимых данных отключалась. Это же касается не только данных, которые отправляются в pipe, но и при перенаправлении в файл, например. Исправить можно, например, так (включает безусловную перекодировку выходных данных): - charset_init(command->pipe >= 0 || isatty(STDIN_FILENO), - isatty(STDOUT_FILENO)); + charset_init(command->pipe >= 0 || isatty(STDIN_FILENO), 1); Сейчас отпишу автору насчет этого, что он скажет.
P.S. Вышел 0.17, к слову.
(В ответ на комментарий №1) > Хотел помочь найти проблемный коммит, но это оказалось непросто: сделал бранч > на основе 0.12.0-alt1, посмотрел а в нём только спек. Оказывается в пакете с > некоторых пор используются теги. Не теги, а бранчи. Учите гит, исходники апстрима лежат в отдельном бранче. Рекомендую также пользоваться средствами визуализации: giggle, gitg...
Теперь что касается комментария №3: > Исправить можно, например, так (включает безусловную перекодировку выходных > данных): > > - charset_init(command->pipe >= 0 || isatty(STDIN_FILENO), > - isatty(STDOUT_FILENO)); > + charset_init(command->pipe >= 0 || isatty(STDIN_FILENO), 1); > > Сейчас отпишу автору насчет этого, что он скажет. Не знаю, что вам помешало осилить гит хотя бы в виде веб-интерфейса http://git.musicpd.org/cgit/master/mpc.git , но автор там открытым текстом пишет о своих мотивах для того, чтобы так сделать. Почитайте лог коммита d99be092. Я не уверен, что стоит откатывать этот коммит.
(В ответ на комментарий №6) > Почитайте лог коммита d99be092. Я не уверен, что стоит откатывать этот коммит. Почитал (http://git.musicpd.org/cgit/master/mpc.git/commit/?id=d99be092) -- вроде как пытались позаботиться о тех у кого локаль не юникодная, а в итоге лично мне стало от этого изменения только хуже.
Что-то я не чувствую разницы между mpc ls и mpc ls | cat у себя на машине. Кодировку выставил ru_RU.CP1251
Т.е. выглядит это в обоих случаях так: Сурганова Рё оркестр и так далее. У mpd, правда, стоит filesystem_charset utf8.
(В ответ на комментарий №9) > Т.е. выглядит это в обоих случаях так: > Сурганова Рё оркестр > и так далее. У mpd, правда, стоит filesystem_charset utf8. У меня filesystem_charset "cp1251"
(В ответ на комментарий №3) > Сейчас отпишу автору насчет этого, что он скажет. Автор что-нибудь ответил?
(В ответ на комментарий №11) > (В ответ на комментарий №3) > > Сейчас отпишу автору насчет этого, что он скажет. > Автор что-нибудь ответил? Нет ещё.
(В ответ на комментарий №12) > Автор что-нибудь ответил? Да. Вот его ответ: "I have reverted that patch now, you have convinced me that it was a bad idea."
P.S.: http://git.musicpd.org/cgit/master/mpc.git/commit/?id=ea66e807e892bc05e49a761c201a2c67f56a3361
mpc-0.17-alt2 -> sisyphus: * Mon Sep 14 2009 Alexey Rusakov <ktirf@altlinux> 0.17-alt2 - revert "disable character set conversion to/from pipe" (ALT #21080).
Чот не помогло.
Ну, я даже не знаю, чем помочь. Можете взять мой гит и посмотреть, правильный ли коммит я накатил. Хотя мне показалось, что правильный.