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

Здесь можно сообщить о найденных багах в Far.
buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sat 06 Aug, 2016 11:48

Если прилагаемый файл (в кодировке 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 28 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
DrKnS
Posts: 4609
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 121 times
Contact:

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

Post by DrKnS » Sat 06 Aug, 2016 11:58

У меня не виснет, например.
Без плагинов и прочего зоопарка проверяли?

Shmuel
Posts: 5201
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Sat 06 Aug, 2016 11:59

У меня не зависает. Проверял на билдах 4743 и 4747. Windows XP SP3 x86.

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sat 06 Aug, 2016 12:02

DrKnS wrote: Без плагинов и прочего зоопарка проверяли?
Спасибо, будем искать, кто портит.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sat 06 Aug, 2016 12:46

Вычислил "террориста". Оказался LuaMacro . Он входит в комплект поставки. Что делать?
При всех остальных плугинах работает. Добавляю LuaMacro - виснет. Может, из-за макроса какого?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sat 06 Aug, 2016 13:04

Вот теперь точно вычислил. Макрос ClipBoard.lua . Был кем-то сделан для исправления ошибки (особенности) 3-го ФАРа, отсутствовавшей в 1-м: копирование текста через клипборд из других приложений приводило к абсолютно непредсказуемым результатам.
Эх, макрос - это "заплатка", исправлять надо! Чтоб было ка в первом. Возможно, сделать настройку.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by zg » Sun 07 Aug, 2016 00:08

buniak_a_h wrote:Был кем-то сделан для исправления ошибки (особенности) 3-го ФАРа, отсутствовавшей в 1-м
far3 — уникодный, far1 — нет. именно в силу этой фундаментальной причины у них разное поведение, а не в силу ошибки или особенности.
buniak_a_h wrote:копирование текста через клипборд из других приложений приводило к абсолютно непредсказуемым результатам.
это неправда. результат абсолютно предсказуем.

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sun 07 Aug, 2016 00:21

zg wrote: в силу этой фундаментальной причины у них разное поведение, а не в силу ошибки или особенности.
Это я прекрасно понимаю. Но, как писал Вирт, правильной считается программа, достигающая требуемого результата за удовлетворительное время (Структурное программирование, примерно 70-75 годы прошлого века). Увы, кракозябры - не тот результат, которого ожидаешь от копирования текста через буфер. Об этом много писано на этом форуме; видимо, авторам не до того. С кирилицей, видимо, дело не имеют... :-(
zg wrote: это неправда. результат абсолютно предсказуем.
Ну да. Всегда можно быть уверенным, что при копировании из, например, Delphi-7 вы получите кракозябры. Честно говоря, такая предсказуемость не радует.
P/S. У меня уже 2 предупреждения от Вас. Жду третьего - опять позволил себе покритиковать авторитетов...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
John Doe
Бюрократ
Posts: 11217
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 07 Aug, 2016 08:40

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

Я вижу тут только это, и не замечаю никакой критики авторитетов.

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

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

Post by zg » Sun 07 Aug, 2016 09:10

buniak_a_h wrote:Увы, кракозябры - не тот результат, которого ожидаешь от копирования текста через буфер. Об этом много писано на этом форуме; видимо, авторам не до того. С кирилицей, видимо, дело не имеют... :-(
авторы с кириллицей дело имеют. но не только с ней, поэтому мыслят чуть шире. фар получает содержимое буфера через GetClipboardData(CF_UNICODETEXT) и как есть вставляет его, куда просили. а вот в буфере он может появится условно тремя способами:
1. добавить корректный CF_UNICODETEXT. в фар вставится то, что добавили и обычно с этим всё в порядке.
2. добавить корректный CF_LOCALE. тут тоже, исключая совсем уж клинические случаи, тоже всё ок.
3. просто добавить CF_TEXT. это как раз ваш случай. тогда система сама преобразует текст в уникод в соответствии с локалью текущей раскладки клавиатуры. это документировано и результат абсолютно предсказуем. что здесь ещё может сделать фар — мне не понятно. если вам понятно — расскажите.
zg wrote:Всегда можно быть уверенным, что при копировании из, например, Delphi-7 вы получите кракозябры.
нет. если текущей будет русская раскладка, то вы получите русские буквы.

User avatar
DrKnS
Posts: 4609
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 121 times
Contact:

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

Post by DrKnS » Sun 07 Aug, 2016 10:35

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, но это уже ССЗБ.

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sun 07 Aug, 2016 14:38

John Doe wrote: На форуме подробно разбиралось почему так происходит, кто виноват (не фар), и что можно сделать (под фар 3 как минимум два скрипта есть).
Вот за упорное и методичное игнорирование этого легко получить предупреждение.
1. Знаю. Скачал один из таких макросов. Получил завис в файле (в первом сообщении темы).
2. В прикладном смысле поведение первого ФАРа более логично и полезно с практической точки зрения. Зачем делать более навороченной, но с практической точки зрения худшее? И я не утверждал, что это ошибка. Ошибка (точнее, недоделка) в Delphi7. Но есть способ исправлять такое, "заплатками" (макросами) - так зачем надо на заплатки полагаться?
3. А судя по тому, что тема многократно поднималась, игнорирую не я - игнорируют разработчики.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
John Doe
Бюрократ
Posts: 11217
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 07 Aug, 2016 14:51

buniak_a_h wrote: Знаю. Скачал один из таких макросов. Получил завис в файле (в первом сообщении темы).
Выводы из этого неправильные сделали.
Что вы там откуда скачали никто не знает.
DrKnS wrote: EnumClipboardFormats вернёт сначала реальный CF_TEXT, потом сгенерированный CF_UNICODETEXT. Когда более юникодное проиложение - наоборот.
Плагин, который именно на это ориентируется: https://github.com/Maximus5/FarPlugins/ ... ixer-1.1.3

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sun 07 Aug, 2016 15:32

John Doe wrote: Плагин, который именно на это ориентируется
Спасибо. Скачал на пларинге такой, но... Для 2-го ФАРа, третий не видит.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
John Doe
Бюрократ
Posts: 11217
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 07 Aug, 2016 15:33

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

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

buniak_a_h
Posts: 352
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Sun 07 Aug, 2016 15:41

John Doe wrote:Надо качать не с плагринга, я же не зря ссылку дал.
За это и спасибо. Как найти что-то, если ни на http://plugring.farmanager.com/, ни на http://www.dic.ru/plugring/plugins нету - я не знаю. Проект превращается в какого-то неуправляемого монстра, распределённого по всей сети :-(
Макросы тоже есть рабочие, если что.
Так ссылку получал с этого форума, из одной из тем, этому посвященной. К сожалению, в самом макросе не указаны выходные данные, а в истории загрузок уже не осталось. Знаю только, что макрос назывался ClipBoard.lua, и размером он был в 20 строчек. Увы, циклится не сабжовом файле.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

Post Reply

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