Выбор кодировки по маске файла
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Хочу поделиться удобным (для меня, во всяком случае) скриптом, выбирающим кодировку в редакторе в зависимости от расширения файла. Причина: автоматическое определение не всегда срабатывает (особенно на коротких файлах); в то же время бывают предопределённые случаи. В предлагаемом скрипте заложено:
1. *.lua,*.fml,*.fmlua,*.lua.*,*.fb2 - всегда 65001
2. *.bat,*.cmd,*.prg,*.ch (программы на Харборе, командные файлы) - всегда 866
Расширять можно и дальше.
Условие выполнения скрипта: для вьюера требуется, чтобы нужная кодировка была видна в меню выбора кодировок. Т.е. это должна быть либо одна из основных (866, 1251), либо Unicode (65001, 1200, 1201), либо помеченная как Favorite, либо должны быть видны ВСЕ кодировки (переключение по CtrlH)
В версии 5 убрана зависимость от таблицы _G.BAX . Исправлены неточности, оптимизирован текст (спасибо John Doe). Соответственно, исправлена ошибка, описанная citRiks.
Модуль прилагается, но скрипт должен работать с практически любой версией этого модуля (если кто уже ставил). В модуль добавлен номер версии - на будущее для контроля совместимости.
Версия 1.1.6:
1. В начальную конфигурацию добавлены некоторые расширения (напр., *.moon)
2. require на "свалку" BaxUtils заменен на require DialogTools. Соответственно в архив вложены два "специализированных" модуля вместо одной кучи всего, что я написал
1. *.lua,*.fml,*.fmlua,*.lua.*,*.fb2 - всегда 65001
2. *.bat,*.cmd,*.prg,*.ch (программы на Харборе, командные файлы) - всегда 866
Расширять можно и дальше.
Условие выполнения скрипта: для вьюера требуется, чтобы нужная кодировка была видна в меню выбора кодировок. Т.е. это должна быть либо одна из основных (866, 1251), либо Unicode (65001, 1200, 1201), либо помеченная как Favorite, либо должны быть видны ВСЕ кодировки (переключение по CtrlH)
В версии 5 убрана зависимость от таблицы _G.BAX . Исправлены неточности, оптимизирован текст (спасибо John Doe). Соответственно, исправлена ошибка, описанная citRiks.
Модуль прилагается, но скрипт должен работать с практически любой версией этого модуля (если кто уже ставил). В модуль добавлен номер версии - на будущее для контроля совместимости.
Версия 1.1.6:
1. В начальную конфигурацию добавлены некоторые расширения (напр., *.moon)
2. require на "свалку" BaxUtils заменен на require DialogTools. Соответственно в архив вложены два "специализированных" модуля вместо одной кучи всего, что я написал
Last edited by buniak_a_h on Fri 15 Jan, 2021 07:54, edited 8 times in total.
- John Doe
- Бюрократ
- Posts: 13847
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Выбор кодировки по маске файла
Workaround (для немодального вьювера): переоткрыть с нужной кодировкой.
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Если у Вас остался первоначальный скрипт (через вызов меню выбора кодировок), то можно использовать аналогичный алгоритм. Я вьюером тоже практически не пользуюсь, но если надо - перепроверю...
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Наверно, (а) стоило бы и (б) хорошо бы ViewerEvent-ы распространялись не только на Area=Viewer, но и на Area=QView. А то (применительно к кодировке) получается странная вещь: если файл ранее открывался во вьюере, то выбранная там кодировка действует и на QView; и при этом евент для ViewerEvent на QView-просмотровщик не распространяется. Ну, нелогично!.. Ну, или надо вводить группу QViewEvent (я бы навесил на это показ DirInfo в случае, если на другой панели - каталог). Впрочем, возможно, такая фишка была бы удобна как штатная: сейчас отображаются некие summary по каталогу, и остаётся довольно много места для показа DirInfo (точнее, тех файлов, которые обычно показываются в инфо-панели). С такими же фозможностями сокрытия разделов, как в инфо-панели... На мантис? Или бесполезно?
- zg
- zero-gravity
- Posts: 6034
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Выбор кодировки по маске файла
они распространяются.buniak_a_h wrote: ↑Tue 08 Jan, 2019 18:10Наверно, (а) стоило бы и (б) хорошо бы ViewerEvent-ы распространялись не только на Area=Viewer, но и на Area=QView.
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Я, перед тем, как запостить, проверил. На том скрипте,что здесь. Не работает.
Last edited by buniak_a_h on Tue 08 Jan, 2019 18:24, edited 1 time in total.
- zg
- zero-gravity
- Posts: 6034
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Выбор кодировки по маске файла
ваш скрипт рассчитывает, что просмотр является активным окном (shiftf8 вызывает список кодировок), что в случае qview не всегда так.
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Решил представить свой вариант скрипта. Часть кода в переработанном виде позаимствована у buniak_a_h.
Отличия:
- Лучшая масштабируемость. Для обработки нового типа файлов достаточно добавить одну строчку в параметры скрипта (таблица Masks) в случае новой кодовой страницы или просто отредактировать маску в случае уже обрабатываемой.
- После первого просмотра/редактирования кодовая страница сохраняется для каждого файла персонально (бывает, что конкретный файл записан не в той же кодовой странице, что и остальные того же типа). Данные хранятся до перезагрузки макросов/LuaMacro или выключения Far. Единственное обнаруженное исключение - быстрый просмотр: в текущей версии Far на момент закрытия быстрого просмотра информация о файле уже недоступна.
- Attachments
-
- AutoSetCodePage.lua.0.9.0.7z
- (1.57 KiB) Downloaded 67 times
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
IgorZ, ну, раз уж пошла такая пьянка...
Вот скрипт, который сейчас стоит у меня. В нём реализована настройка с диалогом. Настройка, кроме связи маски файла с кодовой с страницей, предусматривает указание, надо ли применять к редактору/вюеру; для редактора - только для нового файла, или при любом открытии.
P/S.
1. Не сразу выложил этот вариант, т.к. поначалу работал странно. Потом, вроде, моим требованиям стал удовлетворять в полной мере.
2. Полного тестирования не проводил. Если есть желающие - буду благодарен.
Вот скрипт, который сейчас стоит у меня. В нём реализована настройка с диалогом. Настройка, кроме связи маски файла с кодовой с страницей, предусматривает указание, надо ли применять к редактору/вюеру; для редактора - только для нового файла, или при любом открытии.
P/S.
1. Не сразу выложил этот вариант, т.к. поначалу работал странно. Потом, вроде, моим требованиям стал удовлетворять в полной мере.
2. Полного тестирования не проводил. Если есть желающие - буду благодарен.
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Вдогонку.
Я совсем забыл, в версии 1.1.4 используются мои модули. Можно взять отсюда:
Я совсем забыл, в версии 1.1.4 используются мои модули. Можно взять отсюда:
Выбор кодировки по маске файла
Не вижу смысла. Это не те настройки, которые меняются в зависимости от условий. Они делаются раз и навсегда.buniak_a_h wrote: ↑Mon 14 Jan, 2019 18:12 IgorZ, ну, раз уж пошла такая пьянка...
Вот скрипт, который сейчас стоит у меня. В нём реализована настройка с диалогом.
А смысл? Кодовая страница файла при просмотре и редактировании различается? Или есть смысл просматривать/редактировать файл в заведомо неверной кодировке?buniak_a_h wrote: ↑Mon 14 Jan, 2019 18:12 Настройка, кроме связи маски файла с кодовой с страницей, предусматривает указание, надо ли применять к редактору/вюеру; для редактора - только для нового файла, или при любом открытии.
Полного тестирования также не проводил, но при попытке вызвать диалог настройки подвешивает Far. Где-то что-то криво.buniak_a_h wrote: ↑Mon 14 Jan, 2019 18:12 2. Полного тестирования не проводил. Если есть желающие - буду благодарен.
- buniak_a_h
- Posts: 4259
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Делал в основном для связи расширения с кодовой страницей. Остальное "родилось" по мере замечаний в этом обсуждении
- Как перспектива для добавления во вьюере параметров для установки WrapMode (Wrap/WWrap/Unwrap) и ViewMode (Text/Hex/Dump)
- Когда делалось, установка кодовой страницы вьюера была "экспериментальной" (собственно, она и появилась по результатам обсуждения в этой теме). Поэтому я просто побоялся включать перманентно (тем более, что там используется
far.MacroPost
, а это у меня, например, не всегда работает.
Жаль, у меня не повторяется. Есть подозрение, что проблема в составлении списка доступных кодовых страниц. Попробуйте заменить строки, начиная с 55-й по 7-ю (с
Keys"ShiftF4 AltC CtrlShiftC"
поKeys"Esc Esc"
) на следующее:Если не влом...Code: Select all
for _,v in ipairs(win.EnumSystemCodePages()) do tin(CpList, {text=v; Text=v;}) end