Sonata - редактировать теги?

Так, проблему локализовал, осталось только решение найти.

Фишка в следующем: настраивал я когда-то расширенный ввод (мне нужна была диакритика, кое-какие знаки препинания, валют и т.п.) - подробности описывал здесь.
Так вот, чтобы это работало везде, в том числе в GTK-приложениях, понадобилось мне глобально установить переменную окружения GTK_IM_METHOD=xim (в QT4 xim и так по дефолту).

Соната, как выяснилось, с этим методом ввода не дружит (что, имхо, неправильно: другие приложения на python+GTK такой проблемы не имеют, например terminator или gajim). Убрал я эту переменную - кириллица начала вводиться и сохраняться.

Но это, увы, не решение проблемы: мне расширенный ввод сильно нужен, мне нужна диакритика, отключить не могу.

Короче, выбор у меня небогатый - либо все-таки отказаться от использования сонаты в пользу какого-либо аналога (а очень не хочется, она идельно меня устраивает во всем остальном, а вот аналоги - не устраивают), либо… поставить пива тому доброму человеку, который подружит сонату с xim. :)
Пока могу предложить только костыль (не работал никогда с pygtk). При правке тегов для sonata (для других приложений - нет) будет сбрасываться переменная среды, потом (при закрытии окна правки) восстанавливаться. Конечно диакритические знаки в теги записать будет невозможно.
usr/lib/python2.6/site-packages/sonata/tagedit.py
стр 26
	def __init__(self, window, tags_mpd_update, tags_set_use_mpdpath):
		self.window = window
		self.tags_mpd_update = tags_mpd_update
		self.tags_set_use_mpdpath = tags_set_use_mpdpath
		self.filelabel = None
		self.curr_mpdpath = None
		self.tagnum = None
		self.use_mpdpaths = None
		os.environ['GTK_IM_MODULE'] = ""	
		os.environ.update()
где то 317 стр.
	def tags_win_hide(self, window, _data, tags):
		tag_paths = (tag['mpdpath'] for tag in tags[:self.tagnum])
		gobject.idle_add(self.tags_mpd_update, tag_paths)
		window.destroy()
		self.tags_set_use_mpdpath(self.use_mpdpaths)
		os.environ['GTK_IM_MODULE'] = "xim"	
		os.environ.update()
Костыль рабочий, спасибо. Собственно, именно в тегах мне диакритика и спецсимволы не особенно-то и нужны.

Готов проставиться пивом.

P.S. Написал багрепорт разработчикам sonata - надеюсь, пофиксят. А пока похожу с костылем.
В багтрекере сонаты предложили более удобное решение:

В файле /usr/lib/python2.6/site-packages/sonata/misc.py надо найти вот это (221-223 строка):
# XXX this makes python-mpd correctly return lowercase
# keys for, e.g., playlistinfo() with a turkish locale:
locale.setlocale(locale.LC_CTYPE, "C")
и закомментировать последнюю строчку.
После этого русский в тегах вводится без проблем + дополнительные символы из .XCompose тоже начинают вводиться.
Эту строчку видел. Возник вопрос - зачем? Но ответ был тут же - нужна турецким пользователям sonata. :)
Ну да так проще. Кстати, пропала нужда в том, что я описывал в своем первом посте.
Ulis
Кстати, пропала нужда в том, что я описывал в своем первом посте.
Ну да, я ж говорю - расширенные символы тоже начали вводиться.
Я
Muu
Ну да, я ж говорю - расширенные символы тоже начали вводиться.
Я имел ввиду что можно править теги файлов с русскоязычными путями без encode('utf-8'). Походу FileRef на основании локали пыталась Unicode декодировать.
А, понял.
 
Зарегистрироваться или войдите чтобы оставить сообщение.