Хочу поделиться удобным (для меня, во всяком случае) скриптом, выбирающим кодировку в редакторе в зависимости от расширения файла. Причина: автоматическое определение не всегда срабатывает (особенно на коротких файлах); в то же время бывают предопределённые случаи. В предлагаемом скрипте заложено:
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. Соответственно в архив вложены два "специализированных" модуля вместо одной кучи всего, что я написал
buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17
автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Возможно есть определёные типы файлов, с которыми автоопределение плохо работает. Лично я бы ограничил список масок ими.
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.
buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17
нужная кодировка должна быть видна в меню выбора кодировок.
Необходимые функции есть в АПИ, нет нужды использовать меню.
Выбор кодировки по маске файла
Posted: Mon 07 Jan, 2019 11:28
by buniak_a_h
John Doe wrote: ↑Mon 07 Jan, 2019 10:57
Необходимые функции есть в АПИ, нет нужды использовать меню.
Когда я писал этот скрипт, в параметрах кодовой страницы было только автоопределение, 866, 1251 и, по-моему, 1200 и 1201 . Т.е. не удалось даже задать 65001! Сейчас поискал по тем же темам, там написано для ESPT_CODEPAGE «iParam - номер устанавливаемой кодовой страницы». Так не было - точно. Сейчас проверю и если можно задать произвольную КС, скрипт исправлю.
buniak_a_h wrote: ↑Mon 07 Jan, 2019 10:17
автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Возможно есть определённые типы файлов, с которыми автоопределение плохо работает. Лично я бы ограничил список масок ими.
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.
При создании нового файла хочется сразу задать кодировку. Особенно это относится к *.bat или *.cmd и *.lua : зачастую приходится писать разовый мелкий скрипт для выполнения конкретной задачи (ну, например, поиска по сложному условию по взаимозависимым строкам, которые не реализовать регэкспом). Это при том, что в основном у меня кодировка 1251 (пишу на Delphi), а читать, или тем более распространять cmd-файлы с кракозябрами как-то неэстетично. Забудешь указать КС при сохранении - вот и беда.
Выбор кодировки по маске файла
Posted: Mon 07 Jan, 2019 13:12
by John Doe
buniak_a_h wrote: ↑Mon 07 Jan, 2019 11:56
При создании нового файла хочется сразу задать кодировку
Верно.
И в идеале скрипт только на новые файлы и должен действовать.
И кстати задача вовсе не новая, свои решения есть в [ESC], fl_scripts, и LuaEditorSettingsCore (вроде бы).
John Doe wrote: ↑Mon 07 Jan, 2019 13:12
И в идеале скрипт только на новые файлы и должен действовать.
Я сначала так и сделал. Но потом неоднократно сталкивался, что ФАР запомнил в истории неправильную кодировку (я в предыдущем сеансе не исправлял, т.к. не было кириллицы, а потом она появилась). В результате мне удобнее было назначать КС ВСЕГДА.
John Doe wrote: ↑Mon 07 Jan, 2019 13:12
задача вовсе не новая
Я был уверен, что это уже делалось. Но как искать - для меня загадка.
Я писал, что очень хочется некий тематический каталог, и там, например, была бы строка "выбор кодовой страницы" с подстрокой "для редактора" и с ссылками на темы (или на посты), в которых данная задача решается. Просто полезность форума для поиска готовых решений конкретной задачи стремится к нулю с бешеной скоростью. Увы, ведение такого каталога требует от публикаторов доп. усилий. Да и от модераторов - следить, чтобы совпадающие темы не размножались, иначе этот каталог превратится в такую же heap, что и форум...
Короче, быстрее было своё написать.
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 07:21
by Garrett
buniak_a_h,
А что надо добавить, чтобы и во вьювере кодировка была верной?
Я добавил след.код, но Фар всё равно выставляет 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;
}
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 10:30
by 2useven10
как минимум заменить .EE_READ и editor. на .VE_READ и viewer.
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 11:02
by Garrett
2useven10, скрипт падает с вашими подсказками на
viewer.SetParam(nil, far.Flags.ESPT_CODEPAGE, 28595)
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 11:06
by Shmuel
Нет такой функции viewer.SetParam.
Я вьювером практически не пользуюсь, так что могу ошибаться, но похоже, что нет такой возможности в API.
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 11:15
by 2useven10
И я не нашёл установку кодовой страницы вьювера через api...
Может надо сделать?
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 11:18
by Garrett
ошибка, может поможет
Выбор кодировки по маске файла
Posted: Tue 08 Jan, 2019 11:22
by 2useven10
Не поможет. Ошибка показывает то что уже написал Shmuel - нет ф-ии viewer.SetParam().