Завис при перекодировке

Здесь можно сообщить о найденных багах в Far.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

Если прилагаемый файл (в кодировке OEM-866) открыть в редакторе, отметить всё, вырезать в буфер, сменить кодировку на ANSI и вставить из буфера ( последовательность клавиш: CtrlA CtrlX F8 Ctrlv ), то ФАР виснет намертво. Повторяется на Windows XP Sp3 FAR 3.0.4748 и на Windows 7 x64 sp1 FAR 4700 x64. Ошибка старая, большая просьба заняться этим - сильно мешает работе!!!
866_1251.rar
Пример файла, приводящего к завису
(267.37 KiB) Downloaded 90 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Завис при перекодировке

Post by DrKnS »

У меня не виснет, например.
Без плагинов и прочего зоопарка проверяли?
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Завис при перекодировке

Post by Shmuel »

У меня не зависает. Проверял на билдах 4743 и 4747. Windows XP SP3 x86.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

DrKnS wrote: Без плагинов и прочего зоопарка проверяли?
Спасибо, будем искать, кто портит.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

Вычислил "террориста". Оказался LuaMacro . Он входит в комплект поставки. Что делать?
При всех остальных плугинах работает. Добавляю LuaMacro - виснет. Может, из-за макроса какого?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

Вот теперь точно вычислил. Макрос ClipBoard.lua . Был кем-то сделан для исправления ошибки (особенности) 3-го ФАРа, отсутствовавшей в 1-м: копирование текста через клипборд из других приложений приводило к абсолютно непредсказуемым результатам.
Эх, макрос - это "заплатка", исправлять надо! Чтоб было ка в первом. Возможно, сделать настройку.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Завис при перекодировке

Post by zg »

buniak_a_h wrote:Был кем-то сделан для исправления ошибки (особенности) 3-го ФАРа, отсутствовавшей в 1-м
far3 — уникодный, far1 — нет. именно в силу этой фундаментальной причины у них разное поведение, а не в силу ошибки или особенности.
buniak_a_h wrote:копирование текста через клипборд из других приложений приводило к абсолютно непредсказуемым результатам.
это неправда. результат абсолютно предсказуем.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

zg wrote: в силу этой фундаментальной причины у них разное поведение, а не в силу ошибки или особенности.
Это я прекрасно понимаю. Но, как писал Вирт, правильной считается программа, достигающая требуемого результата за удовлетворительное время (Структурное программирование, примерно 70-75 годы прошлого века). Увы, кракозябры - не тот результат, которого ожидаешь от копирования текста через буфер. Об этом много писано на этом форуме; видимо, авторам не до того. С кирилицей, видимо, дело не имеют... :-(
zg wrote: это неправда. результат абсолютно предсказуем.
Ну да. Всегда можно быть уверенным, что при копировании из, например, Delphi-7 вы получите кракозябры. Честно говоря, такая предсказуемость не радует.
P/S. У меня уже 2 предупреждения от Вас. Жду третьего - опять позволил себе покритиковать авторитетов...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Завис при перекодировке

Post by John Doe »

buniak_a_h wrote: Ну да. Всегда можно быть уверенным, что при копировании из, например, Delphi-7 вы получите кракозябры. Честно говоря, такая предсказуемость не радует.
На форуме подробно разбиралось почему так происходит, кто виноват (не фар), и что можно сделать (под фар 3 как минимум два скрипта есть).
Вот за упорное и методичное игнорирование этого легко получить предупреждение.

Я вижу тут только это, и не замечаю никакой критики авторитетов.
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Завис при перекодировке

Post by zg »

buniak_a_h wrote:Увы, кракозябры - не тот результат, которого ожидаешь от копирования текста через буфер. Об этом много писано на этом форуме; видимо, авторам не до того. С кирилицей, видимо, дело не имеют... :-(
авторы с кириллицей дело имеют. но не только с ней, поэтому мыслят чуть шире. фар получает содержимое буфера через GetClipboardData(CF_UNICODETEXT) и как есть вставляет его, куда просили. а вот в буфере он может появится условно тремя способами:
1. добавить корректный CF_UNICODETEXT. в фар вставится то, что добавили и обычно с этим всё в порядке.
2. добавить корректный CF_LOCALE. тут тоже, исключая совсем уж клинические случаи, тоже всё ок.
3. просто добавить CF_TEXT. это как раз ваш случай. тогда система сама преобразует текст в уникод в соответствии с локалью текущей раскладки клавиатуры. это документировано и результат абсолютно предсказуем. что здесь ещё может сделать фар — мне не понятно. если вам понятно — расскажите.
zg wrote:Всегда можно быть уверенным, что при копировании из, например, Delphi-7 вы получите кракозябры.
нет. если текущей будет русская раскладка, то вы получите русские буквы.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Завис при перекодировке

Post by DrKnS »

zg wrote: что здесь ещё может сделать фар — мне не понятно
Ну, формально, одна лазейка есть:
The EnumClipboardFormats function enumerates formats in the order that they were placed on the clipboard. If you are copying information to the clipboard, add clipboard objects in order from the most descriptive clipboard format to the least descriptive clipboard format. If you are pasting information from the clipboard, retrieve the first clipboard format that you can handle. That will be the most descriptive clipboard format that you can handle.

The system provides automatic type conversions for certain clipboard formats. In the case of such a format, this function enumerates the specified format, then enumerates the formats to which it can be converted.
Т. е. когда в буфер кладёт эта ваша Delphi 7, EnumClipboardFormats вернёт сначала реальный CF_TEXT, потом сгенерированный CF_UNICODETEXT. Когда более юникодное проиложение - наоборот.
Это официально документировано и не менее официально рекомендуется брать то, что лежит первым.

Да, теоретически возможна ситуация, когда приложение само засунуло в буфер сначала кривой CF_TEXT, а уже потом правильный CF_UNICODETEXT, но это уже ССЗБ.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

John Doe wrote: На форуме подробно разбиралось почему так происходит, кто виноват (не фар), и что можно сделать (под фар 3 как минимум два скрипта есть).
Вот за упорное и методичное игнорирование этого легко получить предупреждение.
1. Знаю. Скачал один из таких макросов. Получил завис в файле (в первом сообщении темы).
2. В прикладном смысле поведение первого ФАРа более логично и полезно с практической точки зрения. Зачем делать более навороченной, но с практической точки зрения худшее? И я не утверждал, что это ошибка. Ошибка (точнее, недоделка) в Delphi7. Но есть способ исправлять такое, "заплатками" (макросами) - так зачем надо на заплатки полагаться?
3. А судя по тому, что тема многократно поднималась, игнорирую не я - игнорируют разработчики.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Завис при перекодировке

Post by John Doe »

buniak_a_h wrote: Знаю. Скачал один из таких макросов. Получил завис в файле (в первом сообщении темы).
Выводы из этого неправильные сделали.
Что вы там откуда скачали никто не знает.
DrKnS wrote: EnumClipboardFormats вернёт сначала реальный CF_TEXT, потом сгенерированный CF_UNICODETEXT. Когда более юникодное проиложение - наоборот.
Плагин, который именно на это ориентируется: https://github.com/Maximus5/FarPlugins/ ... ixer-1.1.3
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Завис при перекодировке

Post by buniak_a_h »

John Doe wrote: Плагин, который именно на это ориентируется
Спасибо. Скачал на пларинге такой, но... Для 2-го ФАРа, третий не видит.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13848
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Завис при перекодировке

Post by John Doe »

Надо качать не с плагринга, я же не зря ссылку дал.

P.S.
Макросы тоже есть рабочие, если что.
Post Reply

Return to “Глюки и баги”