Page 1 of 5

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

Posted: Thu 24 Oct, 2019 09:46
by 2useven10
Скрипт позволяет вводить символы через Alt+NNN в редакторе в его текущей кодировке.
Скрипт обрабатывает Event EditorInput, подменяя коды для диапазона [128, 255].
Без скрипта через Alt+NNN в редакторе вводятся коды символов в юникоде (UCS-2).
Также скрипт немного спрямляет самобытность (хаки) ConEmu и позволяет вводить такие коды
при запуске фар там, в том числе и в юникодных кодировках.
Editor_AltNumpad.lua
(6.67 KiB) Downloaded 252 times

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

Posted: Thu 24 Oct, 2019 12:40
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, а юникод, просто часть кодов у них совпадает.

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

Posted: Thu 24 Oct, 2019 13:51
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, а использовал ТОЛЬКО ТУ кодовую страницу, которую я установил.

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

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

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

Posted: Thu 24 Oct, 2019 14:12
by Ivanov49
Резюме: Нет, нельзя.

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

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

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

Posted: Thu 24 Oct, 2019 18:48
by Ivanov49
Не сталкивался с таким. Подскажите, пожалуйста, как это выглядит.

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

Posted: Thu 24 Oct, 2019 23:28
by 2useven10
Ivanov49, это макросы обработчики событий. попробую сделать, если получится - выложу...

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

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

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

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

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

Posted: Fri 25 Oct, 2019 10:48
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.

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

Posted: Fri 25 Oct, 2019 11:01
by 2useven10
Shmuel, Да похоже фар отдаёт такой код...
В общем не принципиально, макрос при этом даже проще, но неожиданно.

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

Posted: Fri 25 Oct, 2019 11:02
by 2useven10
Вопрос только по диапазону 128..255

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

Posted: Fri 25 Oct, 2019 11:08
by 2useven10
Ivanov49,
Editor_AltNumpad.lua
(1.33 KiB) Downloaded 153 times
Файл надо положить а %FARPROFILE%\Macros\scripts\
Работает только для кодировок 866 и 1251, и OEMCP = 866 (русская локаль windows).

Update: последняя версия скрипта в шапке.

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

Posted: Fri 25 Oct, 2019 11:23
by Ivanov49
Блеск!!!
Огромное спасибо!!!