Ввод спецсимволов в редакторе Far

Здесь выкладываются готовые к использованию макросы и скрипты.
2useven10
Posts: 3985
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 175 times

Ввод спецсимволов в редакторе Far

Post by 2useven10 » Thu 24 Oct, 2019 09:46

Скрипт позволяет вводить символы через Alt+NNN в редакторе в его текущей кодировке.
Скрипт обрабатывает Event EditorInput, подменяя коды для диапазона [128, 255].
Без скрипта через Alt+NNN в редакторе вводятся коды символов в юникоде (UCS-2).
Также скрипт немного спрямляет самобытность (хаки) ConEmu и позволяет вводить такие коды
при запуске фар там, в том числе и в юникодных кодировках.
Editor_AltNumpad.lua
(6.67 KiB) Downloaded 21 times
Last edited by 2useven10 on Wed 30 Oct, 2019 19:56, edited 5 times in total.

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Thu 24 Oct, 2019 12:40

Ivanov49 wrote:
Thu 24 Oct, 2019 09:46
В редакторе Far 1.75 при переключении кодировок 866-1251 переключался ввод спецсимволов через Alt+(цифровая клавиатура). Пример: В кодировке 866 при вводе кода Alt+250 отображался символ "·". В кодировке 1251 при вводе кода Alt+250 отображался символ "ъ". В редакторе Far 3.0 при работе в кодировке 866 для ввода символа "·" необходимо нажать Alt+183 (т.е символ из таблицы 1251, а не 866). Есть ли возможность сделать так, чтобы при переключении кодировки в редакторе Far 3.0 одновременно переключалась кодировка для ввода спецсимволов через Alt+(цифровая клавиатура)?
Ivanov49 wrote:
Thu 24 Oct, 2019 09:46
т.е символ из таблицы 1251, а не 866
Imho там не 1251, а юникод, просто часть кодов у них совпадает.

Ivanov49
Posts: 13
Joined: Thu 01 Dec, 2011 13:35

Ввод спецсимволов в редактрое Far

Post by Ivanov49 » Thu 24 Oct, 2019 13:51

Простите, но я не понял, при чем здесь юникод?
Настройки редактора:
Autodetect code page Галочка снята
Default code page: 866 OEM-русская
Кодировка 866 подразумевает один байт на символ(или я что-то путаю?)
Создаю новый файл. Ввожу символ Alt-250. Отображается символ "ú". В информационной строке кодировка 866.
Пытаюсь сохранить. Пишет: "Editor contains characters thet cannot be correctly saved using selected code page" .
Если я открываю старый файл с кодировкой 866 в котором есть символы 250, то они отображаются совершенно верно "·".
Кстати, если в старом файле навести курсор на символ "·", то в информационной строке отображается код 183/250
При чем здесь код 183, если ПРИНУДИТЕЛЬНО установлена кодовая страница 866, а код байта 250(FA)?
Переформулирую вопрос: Можно ли сделать так, чтобы редактор по моему желанию НЕ использовал unicod, а использовал ТОЛЬКО ТУ кодовую страницу, которую я установил.

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

Ввод спецсимволов в редактрое Far

Post by zg » Thu 24 Oct, 2019 14:00

Ivanov49 wrote:
Thu 24 Oct, 2019 13:51
Простите, но я не понял, при чем здесь юникод?
потому что редактор редактирует текст в уникоде. кодовая страница влияет только на чтение файла при открытии, запись по умолчанию и код символа после слэша в статусной строке.
Ivanov49 wrote:
Thu 24 Oct, 2019 13:51
При чем здесь код 183, если ПРИНУДИТЕЛЬНО установлена кодовая страница 866, а код байта 250(FA)?
Переформулирую вопрос: Можно ли сделать так, чтобы редактор по моему желанию НЕ использовал unicod, а использовал ТОЛЬКО ТУ кодовую страницу, которую я установил.
исходники доступны, делайте. и поменьше капса.

Ivanov49
Posts: 13
Joined: Thu 01 Dec, 2011 13:35

Ввод спецсимволов в редактрое Far

Post by Ivanov49 » Thu 24 Oct, 2019 14:12

Резюме: Нет, нельзя.

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Thu 24 Oct, 2019 15:09

Ivanov49 wrote:
Thu 24 Oct, 2019 14:12
Резюме: Нет, нельзя.
Можно попробовать макрос на EditorInput event...

Ivanov49
Posts: 13
Joined: Thu 01 Dec, 2011 13:35

Ввод спецсимволов в редактрое Far

Post by Ivanov49 » Thu 24 Oct, 2019 18:48

Не сталкивался с таким. Подскажите, пожалуйста, как это выглядит.

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Thu 24 Oct, 2019 23:28

Ivanov49, это макросы обработчики событий. попробую сделать, если получится - выложу...

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Thu 24 Oct, 2019 23:35

@Shmuel В обработчик EditorInput, при вводе кода через Alt NNN в Rec.UnicodeChar у меня всегда приходит не то что будет вставлено в редактор utf8(unicode.NNN) а utf8(multibytetowidechar(NNN, 866)) - 866 это видимо OEMCP.
Так и должно быть, или просто так получилось?

Ivanov49
Posts: 13
Joined: Thu 01 Dec, 2011 13:35

Ввод спецсимволов в редактрое Far

Post by Ivanov49 » Fri 25 Oct, 2019 10:06

Трудно сказать, не видя результата. Мне кажется, должно быть так: если в редакторе установлена кодировка 866 (или другая кроме UTF), то в файл должен вводиться 1 байт с кодом NNN. Если в редакторе установлена кодировка юникод, то может вводится и 2 байта. Другими словами - результат должен зависеть от текущей установленной кодировки редактора.
А можно хотя бы образец такого макроса, пусть и не работающего?
Last edited by Ivanov49 on Fri 25 Oct, 2019 10:08, edited 1 time in total.

Shmuel
Posts: 5927
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 233 times

Ввод спецсимволов в редактрое Far

Post by Shmuel » Fri 25 Oct, 2019 10:48

2useven10 wrote:
Thu 24 Oct, 2019 23:35
В обработчик EditorInput, при вводе кода через Alt NNN в Rec.UnicodeChar у меня всегда приходит не то что будет вставлено в редактор
Сейчас пересмотрел соответствующий код в LuaFAR (упрощённо):

Code: Select all

LF_ProcessEditorInput() -> PushInputRecord() -> PutWStrToTable(Event.KeyEvent.uChar.UnicodeChar, 1) ->
push_utf8_string() -> push_multibyte_string()
Пока ничего предосудительного не нашёл.
Не исключаю, что из Фара приходит некорректное значение UnicodeChar.
Например, когда набираю Alt-1055, значение UnicodeChar в PushInputRecord == 9660.

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Fri 25 Oct, 2019 11:01

Shmuel, Да похоже фар отдаёт такой код...
В общем не принципиально, макрос при этом даже проще, но неожиданно.

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

Ввод спецсимволов в редактрое Far

Post by 2useven10 » Fri 25 Oct, 2019 11:02

Вопрос только по диапазону 128..255

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

Ввод спецсимволов в редакторе Far

Post by 2useven10 » Fri 25 Oct, 2019 11:08

Ivanov49,
Editor_AltNumpad.lua
(1.33 KiB) Downloaded 23 times
Файл надо положить а %FARPROFILE%\Macros\scripts\
Работает только для кодировок 866 и 1251, и OEMCP = 866 (русская локаль windows).

Update: последняя версия скрипта в шапке.
Last edited by 2useven10 on Wed 30 Oct, 2019 12:16, edited 1 time in total.

Ivanov49
Posts: 13
Joined: Thu 01 Dec, 2011 13:35

Ввод спецсимволов в редактрое Far

Post by Ivanov49 » Fri 25 Oct, 2019 11:23

Блеск!!!
Огромное спасибо!!!

User avatar
DrKnS
Posts: 5437
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 253 times

Ввод спецсимволов в редакторе Far

Post by DrKnS » Fri 25 Oct, 2019 13:25

Shmuel wrote:
Fri 25 Oct, 2019 10:48
из Фара приходит некорректное значение UnicodeChar
Из ОС - см. changelog к билду 1053.
В фар тогда был добавлен костыль, восстанавливающий введённый символ, однако, без правки исходного input record.

Post Reply

Return to “Полезные макросы и скрипты”