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

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

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

Post by 2useven10 »

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

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

Post by 2useven10 »

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 »

Простите, но я не понял, при чем здесь юникод?
Настройки редактора:
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: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

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

Post by zg »

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 »

Резюме: Нет, нельзя.
2useven10
Posts: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

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

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

Post by Ivanov49 »

Не сталкивался с таким. Подскажите, пожалуйста, как это выглядит.
2useven10
Posts: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

Ivanov49, это макросы обработчики событий. попробую сделать, если получится - выложу...
2useven10
Posts: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

@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 »

Трудно сказать, не видя результата. Мне кажется, должно быть так: если в редакторе установлена кодировка 866 (или другая кроме UTF), то в файл должен вводиться 1 байт с кодом NNN. Если в редакторе установлена кодировка юникод, то может вводится и 2 байта. Другими словами - результат должен зависеть от текущей установленной кодировки редактора.
А можно хотя бы образец такого макроса, пусть и не работающего?
Last edited by Ivanov49 on Fri 25 Oct, 2019 10:08, edited 1 time in total.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

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

Post by Shmuel »

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: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

Shmuel, Да похоже фар отдаёт такой код...
В общем не принципиально, макрос при этом даже проще, но неожиданно.
2useven10
Posts: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

Вопрос только по диапазону 128..255
2useven10
Posts: 4074
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

Ivanov49,
Editor_AltNumpad.lua
(1.33 KiB) Downloaded 37 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 »

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

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