Выбор кодировки по маске файла

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 707
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Выбор кодировки по маске файла

Post by buniak_a_h » Mon 07 Jan, 2019 10:17

Хочу поделиться удобным (для меня, во всяком случае) скриптом, выбирающим кодировку в редакторе в зависимости от расширения файла. Причина: автоматическое определение не всегда срабатывает (особенно на коротких файлах); в то же время бывают предопределённые случаи. В предлагаемом скрипте заложено:
1. *.lua,*.fml,*.fmlua,*.lua.*,*.fb2 - всегда 65001
2. *.bat,*.cmd,*.prg,*.ch (программы на Харборе, командные файлы) - всегда 866
Расширять можно и дальше.

Условие выполнения скрипта: для вьюера требуется, чтобы нужная кодировка была видна в меню выбора кодировок. Т.е. это должна быть либо одна из основных (866, 1251), либо Unicode (65001, 1200, 1201)? либо помеченная как Favorite, либо должны быть видны ВСЕ кодировки (переключение по CtrlH)
CodePage.lua.7z
Версия 3
(1009 Bytes) Downloaded 21 times
Ниже версия 1.1.4 с настройкой. Не тестирована до конца...
Новые возможности:
  • включить связь для редактора и/или для вьюера
  • для редактора - только для нового файла либо для любого.
CodePage.1_1_4.lua.7z
Версия 4
(3.98 KiB) Downloaded 11 times
В версии 1.1.4 используются мои модули. Я уж не стал фильтровать, выложил все (в т.ч. и недоотлаженные)
BAX.Modules.7z
modules\BAX\*.lua
(13 KiB) Downloaded 12 times
Last edited by buniak_a_h on Mon 14 Jan, 2019 19:41, edited 6 times in total.

Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

Выбор кодировки по маске файла

Post by Garrett » Mon 07 Jan, 2019 10:56

buniak_a_h, спасибо!

User avatar
John Doe
Бюрократ
Posts: 12265
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 163 times

Выбор кодировки по маске файла

Post by John Doe » Mon 07 Jan, 2019 10:57

buniak_a_h wrote:
Mon 07 Jan, 2019 10:17
автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Возможно есть определёные типы файлов, с которыми автоопределение плохо работает. Лично я бы обраничил список масок ими.
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.
buniak_a_h wrote:
Mon 07 Jan, 2019 10:17
нужная кодировка должна быть видна в меню выбора кодировок.
Необходимые функции есть в АПИ, нет нужды использовать меню.

buniak_a_h
Posts: 707
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Выбор кодировки по маске файла

Post by buniak_a_h » Mon 07 Jan, 2019 11:28

John Doe wrote:
Mon 07 Jan, 2019 10:57
Необходимые функции есть в АПИ, нет нужды использовать меню.
Когда я писал этот скрипт, в параметрах кодовой страницы было только автоопределение, 866, 1251 и, по-моему, 1200 и 1201 . Т.е. не удалось даже задать 65001! Сейчас поискал по тем же темам, там написано для ESPT_CODEPAGE «iParam - номер устанавливаемой кодовой страницы». Так не было - точно. Сейчас проверю и если можно задать произвольную КС, скрипт исправлю.

buniak_a_h
Posts: 707
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Выбор кодировки по маске файла

Post by buniak_a_h » Mon 07 Jan, 2019 11:56

John Doe, Спасибо. Скрипт упростился. В первом посте темы версия 1.1.2...
Ещё:
John Doe wrote:
Mon 07 Jan, 2019 10:57
buniak_a_h wrote:
Mon 07 Jan, 2019 10:17
автоматическое определение не всегда срабатывает (особенно на коротких файлах)
Возможно есть определённые типы файлов, с которыми автоопределение плохо работает. Лично я бы ограничил список масок ими.
Если же такое происходит у вас со многоми типами, то возможно автоопределение настроено неоптимально. Или же нуждается в доработке.

User avatar
John Doe
Бюрократ
Posts: 12265
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 163 times

Выбор кодировки по маске файла

Post by John Doe » Mon 07 Jan, 2019 13:12

buniak_a_h wrote:
Mon 07 Jan, 2019 11:56
При создании нового файла хочется сразу задать кодировку
Верно.
И в идеале скрипт только на новые файлы и должен действовать.

И кстати задача вовсе не новая, свои решения есть в [ESC], fl_scripts, и LuaEditorSettingsCore (вроде бы).

User avatar
zg
zero-gravity
Posts: 5542
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Выбор кодировки по маске файла

Post by zg » Mon 07 Jan, 2019 15:29

John Doe wrote:
Mon 07 Jan, 2019 13:12
LuaEditorSettingsCore (вроде бы).
так и есть, без всяких вроде.

buniak_a_h
Posts: 707
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Выбор кодировки по маске файла

Post by buniak_a_h » Mon 07 Jan, 2019 20:21

John Doe wrote:
Mon 07 Jan, 2019 13:12
И в идеале скрипт только на новые файлы и должен действовать.
Я сначала так и сделал. Но потом неоднократно сталкивался, что ФАР запомнил в истории неправильную кодировку (я в предыдущем сеансе не исправлял, т.к. не было кириллицы, а потом она появилась). В результате мне удобнее было назначать КС ВСЕГДА.
John Doe wrote:
Mon 07 Jan, 2019 13:12
задача вовсе не новая
Я был уверен, что это уже делалось. Но как искать - для меня загадка. Короче, быстрее было своё написать.

Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

Выбор кодировки по маске файла

Post by Garrett » Tue 08 Jan, 2019 07:21

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;
}

2useven10
Posts: 3817
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 157 times

Выбор кодировки по маске файла

Post by 2useven10 » Tue 08 Jan, 2019 10:30

как минимум заменить .EE_READ и editor. на .VE_READ и viewer.

Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

Выбор кодировки по маске файла

Post by Garrett » Tue 08 Jan, 2019 11:02

2useven10, скрипт падает с вашими подсказками на
viewer.SetParam(nil, far.Flags.ESPT_CODEPAGE, 28595)

Shmuel
Posts: 5751
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 205 times

Выбор кодировки по маске файла

Post by Shmuel » Tue 08 Jan, 2019 11:06

Нет такой функции viewer.SetParam.
Я вьювером практически не пользуюсь, так что могу ошибаться, но похоже, что нет такой возможности в API.

2useven10
Posts: 3817
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 157 times

Выбор кодировки по маске файла

Post by 2useven10 » Tue 08 Jan, 2019 11:15

И я не нашёл установку кодовой страницы вьювера через api...
Может надо сделать?

Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

Выбор кодировки по маске файла

Post by Garrett » Tue 08 Jan, 2019 11:18

ошибка, может поможет
Attachments
error.jpg

2useven10
Posts: 3817
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 157 times

Выбор кодировки по маске файла

Post by 2useven10 » Tue 08 Jan, 2019 11:22

Не поможет. Ошибка показывает то что уже написал Shmuel - нет ф-ии viewer.SetParam().

User avatar
John Doe
Бюрократ
Posts: 12265
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 163 times

Выбор кодировки по маске файла

Post by John Doe » Tue 08 Jan, 2019 15:58

2useven10 wrote:
Tue 08 Jan, 2019 11:15
И я не нашёл установку кодовой страницы вьювера через api...
Workaround (для немодального вьювера): переоткрыть с нужной кодировкой.

Post Reply

Return to “Обсуждение макросов”