Выбор кодировки по маске файла
- buniak_a_h
- Posts: 4262
- 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: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Выбор кодировки по маске файла
Возможно есть определёные типы файлов, с которыми автоопределение плохо работает. Лично я бы ограничил список масок ими.buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17 автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.
Необходимые функции есть в АПИ, нет нужды использовать меню.buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17 нужная кодировка должна быть видна в меню выбора кодировок.
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Когда я писал этот скрипт, в параметрах кодовой страницы было только автоопределение, 866, 1251 и, по-моему, 1200 и 1201 . Т.е. не удалось даже задать 65001! Сейчас поискал по тем же темам, там написано для ESPT_CODEPAGE «iParam - номер устанавливаемой кодовой страницы». Так не было - точно. Сейчас проверю и если можно задать произвольную КС, скрипт исправлю.
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
John Doe, Спасибо. Скрипт упростился. В первом посте темы версия 1.1.2...
Ещё:
Ещё:
John Doe wrote: ↑Mon 07 Jan, 2019 10:57Возможно есть определённые типы файлов, с которыми автоопределение плохо работает. Лично я бы ограничил список масок ими.buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17 автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Выбор кодировки по маске файла
Верно.
И в идеале скрипт только на новые файлы и должен действовать.
И кстати задача вовсе не новая, свои решения есть в [ESC], fl_scripts, и LuaEditorSettingsCore (вроде бы).
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Выбор кодировки по маске файла
Я сначала так и сделал. Но потом неоднократно сталкивался, что ФАР запомнил в истории неправильную кодировку (я в предыдущем сеансе не исправлял, т.к. не было кириллицы, а потом она появилась). В результате мне удобнее было назначать КС ВСЕГДА.
Я был уверен, что это уже делалось. Но как искать - для меня загадка. Короче, быстрее было своё написать.
Выбор кодировки по маске файла
buniak_a_h,
А что надо добавить, чтобы и во вьювере кодировка была верной?
Я добавил след.код, но Фар всё равно выставляет 1251
А что надо добавить, чтобы и во вьювере кодировка была верной?
Я добавил след.код, но Фар всё равно выставляет 1251
Event {
group="ViewerEvent"; filemask="*.cbl";
action=function(Id,Event,Param)
if Event == far.Flags.EE_READ then
editor.SetParam(nil, far.Flags.ESPT_CODEPAGE, 28595)
end
end;
}
Выбор кодировки по маске файла
2useven10, скрипт падает с вашими подсказками на
viewer.SetParam(nil, far.Flags.ESPT_CODEPAGE, 28595)
viewer.SetParam(nil, far.Flags.ESPT_CODEPAGE, 28595)