Ввод спецсимволов в редакторе Far
Ввод спецсимволов в редакторе Far
Скрипт позволяет вводить символы через Alt+NNN в редакторе в его текущей кодировке.
Скрипт обрабатывает Event EditorInput, подменяя коды для диапазона [128, 255].
Без скрипта через Alt+NNN в редакторе вводятся коды символов в юникоде (UCS-2).
Также скрипт немного спрямляет самобытность (хаки) ConEmu и позволяет вводить такие коды
при запуске фар там, в том числе и в юникодных кодировках.
Скрипт обрабатывает Event EditorInput, подменяя коды для диапазона [128, 255].
Без скрипта через Alt+NNN в редакторе вводятся коды символов в юникоде (UCS-2).
Также скрипт немного спрямляет самобытность (хаки) ConEmu и позволяет вводить такие коды
при запуске фар там, в том числе и в юникодных кодировках.
Last edited by 2useven10 on Wed 30 Oct, 2019 19:56, edited 5 times in total.
Ввод спецсимволов в редактрое Far
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+(цифровая клавиатура)?
Imho там не 1251, а юникод, просто часть кодов у них совпадает.
Ввод спецсимволов в редактрое Far
Простите, но я не понял, при чем здесь юникод?
Настройки редактора:
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, а использовал ТОЛЬКО ТУ кодовую страницу, которую я установил.
Настройки редактора:
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, а использовал ТОЛЬКО ТУ кодовую страницу, которую я установил.
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Ввод спецсимволов в редактрое Far
потому что редактор редактирует текст в уникоде. кодовая страница влияет только на чтение файла при открытии, запись по умолчанию и код символа после слэша в статусной строке.
исходники доступны, делайте. и поменьше капса.
Ввод спецсимволов в редактрое Far
@Shmuel В обработчик EditorInput, при вводе кода через Alt NNN в Rec.UnicodeChar у меня всегда приходит не то что будет вставлено в редактор utf8(unicode.NNN) а utf8(multibytetowidechar(NNN, 866)) - 866 это видимо OEMCP.
Так и должно быть, или просто так получилось?
Так и должно быть, или просто так получилось?
Ввод спецсимволов в редактрое Far
Трудно сказать, не видя результата. Мне кажется, должно быть так: если в редакторе установлена кодировка 866 (или другая кроме UTF), то в файл должен вводиться 1 байт с кодом NNN. Если в редакторе установлена кодировка юникод, то может вводится и 2 байта. Другими словами - результат должен зависеть от текущей установленной кодировки редактора.
А можно хотя бы образец такого макроса, пусть и не работающего?
А можно хотя бы образец такого макроса, пусть и не работающего?
Last edited by Ivanov49 on Fri 25 Oct, 2019 10:08, edited 1 time in total.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ввод спецсимволов в редактрое Far
Сейчас пересмотрел соответствующий код в 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
Ivanov49,
Файл надо положить а %FARPROFILE%\Macros\scripts\
Работает только для кодировок 866 и 1251, и OEMCP = 866 (русская локаль windows).
Update: последняя версия скрипта в шапке.
Работает только для кодировок 866 и 1251, и OEMCP = 866 (русская локаль windows).
Update: последняя версия скрипта в шапке.
Last edited by 2useven10 on Wed 30 Oct, 2019 12:16, edited 1 time in total.