Сдвигается строка (и рамки) в панелях при наличии некоторых (многих) символов в имени файла

Здесь можно сообщить о найденных багах в Far.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe »

Latest post of the previous page:

Я вполне определён.
А вот юникод не настолько, и несколько элементов могут объединяться, образуя один символ.
Могу предположить, что функции форматирования строк, используемые фаром, этого не учитывают (не факт, что должны, я только лишь говорю, что вопрос неоднозначный)
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg »

John Doe wrote: Wed 25 Oct, 2017 13:17я только лишь говорю, что вопрос неоднозначный
фигню вы говорите. вопрос однозначный. в апи ширины в пикселях нет. да можно использовать полулегальные методы, но консоль обновилась или появились масштабы отличные от 100% или просто другие настройки по подстановке отсутствующих глифов или ещё что — работать уже не будет.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe »

zg wrote: Wed 25 Oct, 2017 13:24в апи ширины в пикселях нет
Про пиксели я ничего вроде там не говорил, как и про ширину, а лишь о том, что есть проблема композиции.
"Проблема" в том смысле, что поведение не закреплено ни в какой документации по консоли.

Если считать, что консоль не должна заниматься композицией, тогда вопрос однозначный.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg »

John Doe wrote: Wed 25 Oct, 2017 13:34Если считать, что консоль не должна заниматься композицией, тогда вопрос однозначный.
WriteConsoleOutput treats the source buffer and the destination screen buffer as two-dimensional arrays (columns and rows of character cells). The rectangle pointed to by the lpWriteRegion parameter specifies the size and location of the block to be written to in the console screen buffer. A rectangle of the same size is located with its upper-left cell at the coordinates of the dwBufferCoord parameter in the lpBuffer array. Data from the cells that are in the intersection of this rectangle and the source buffer rectangle (whose dimensions are specified by the dwBufferSize parameter) is written to the destination rectangle.
и в целом там очень сложно представить схему, отличную от один CHAR_INFO — один символ на экране.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Сдвигается строка (и рамки) в панелях при наличии некоторых (многих) символов в имени файла

Post by zg »

и чтобы закрыть тему окончательно:

Code: Select all

#include <stdio.h>
#include <windows.h>

int main(int argc,char *argv[])
{
  CHAR_INFO buffer[2]={{0x200e,0x17},{0x2013,0x17}};
  SMALL_RECT result={0,10,1,10};
  WriteConsoleOutputW(GetStdHandle(STD_OUTPUT_HANDLE),buffer,{2,1},{0,0},&result);
  printf("%d %d %d %d\n",result.Left,result.Top,result.Right,result.Bottom);
  return 0;
}
закрашивается два знакоместа. текст затирается тоже под два знакоместа. возвращается информация о выводе прямоугольника 2x1 знакомест. реально на экране текст в одно знакоместо.
теперь меняем атрибут второго символа на любой другой. всё остаётся по прежнему, кроме того, символы попадают в разные знакоместа. это, кстати, возможная причина, почему у 2useven10 ничего не съезжает. режим, где разделитель другого цвета.

выводы:
1. всё консольное апи заточено под то, что один CHAR_INFO занимает одно знакоместо на экране. т.е. исторически один ucs-2 символ на одно знакоместо. даже не utf-16. то что в msdn сделали глобальную замену ucs-2 на utf-16 — по факту для консоли ничего не поменяло.
2. для оптимизации скорости последовательность символов с одинаковыми отрибутами выводится за раз одним PolyTextOutW со всеми вытекающими отсюда проблемами.
3. майкрософт об этом в курсе, но творят какую-то странную фигню. вместо того, чтобы оставить старое апи для совместимости и добавить новых функций, городят всевозможную эвристику.
Attachments
console.png
console.png (620 Bytes) Viewed 11670 times
Last edited by HaRT on Sat 02 Jul, 2022 23:38, edited 2 times in total.
Reason: Улучшен заголовок Темы
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

какието проблемы при выводе в списке файлов какого-то символа

Post by 2useven10 »

zg wrote: Wed 25 Oct, 2017 15:12возможная причина, почему у 2useven10 ничего не съезжает.
Нет цвет там одинаковый.
Причина скорее в том, что улучшили эвристику, потому что с [x] Legacy console - съезжает (у меня Win10 FCU).
Last edited by 2useven10 on Wed 25 Oct, 2017 15:29, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by zg »

John Doe wrote: Wed 25 Oct, 2017 11:332. Выводить каждую колонку отдельно, честно задавая координаты её начала.
а в редакторе что делать?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

какието проблемы при выводе в списке файлов какого-то символа

Post by John Doe »

Смириться.
Впрочем, на редактор и жалоб меньше.
Iwan
Posts: 22
Joined: Mon 12 Apr, 2010 00:35
Been thanked: 1 time

Китайские символы в именах файлов сносят строки в FAR.

Post by Iwan »

Кракозябры в названиях файлов (это м.б., например, китайские иероглифы в названиях файлов и папок, не отображаемые правильно) коверкают вывод панелей: идут жуткие сдвиги вправо, появляются лишние строки (несуществующие файлы или папки), в диалоговых окнах ФАР плывут опции управления (в т.ч. "[x]", т.е., например, "x" не попадает в "[ ]"), и т.д. Уже давно наблюдаю подобные глюки в ФАР. Скачиваю, например, драйвера с сайтов китайских производителей железа, вывожу папку в панель ФАР - и поехало все криво-косо. Понятное дело, после переименования файлов в латинские буквы и арабские цифры глюки отображения пропадают. Можно в таких случаях, например, отсекать выводимые символы имени по размеру отображаемой панели или хотя бы выполнять вывод первых 8 символов имени файла (а расширение, как правило, и так стандартное). Такая же проблема - с показом панели ФАР с описаниями файлов (например, Descript.ion), если в них содержатся кракозябры (те же китайские иероглифы).
Last edited by Iwan on Thu 08 Aug, 2019 18:26, edited 2 times in total.
nimdamsk
Posts: 19
Joined: Thu 22 Oct, 2009 12:10
Has thanked: 1 time

Некорректно показываются файлы с китайскими символами в имени

Post by nimdamsk »

Собственно, проблема на скриншоте.
Far_with_chinese_name.png
Far_with_chinese_name.png (47.45 KiB) Viewed 3446 times

В Проводнике видно, что там за имена.
Explorer.png
Explorer.png (37.85 KiB) Viewed 3446 times

Проверял на ночной сборке Far30b5547.x64.20200123.

Проблему заметил давно.
Поиском ничего похожего не нашёл.
Пробовал и растровые шрифты, и Юникод.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Некорректно показываются файлы с китайскими символами в имени

Post by 2useven10 »

nimdamsk wrote: Sat 25 Jan, 2020 16:05 Поиском ничего похожего не нашёл.
Обсуждалось неоднократно, например.
Это скорее проблема виндовой консоли.
nimdamsk
Posts: 19
Joined: Thu 22 Oct, 2009 12:10
Has thanked: 1 time

Некорректно показываются файлы с китайскими символами в имени

Post by nimdamsk »

2useven10 wrote: Sat 25 Jan, 2020 23:13 Обсуждалось неоднократно, например.
Это скорее проблема виндовой консоли.
Спасибо за ссылку, почему-то она не нашлась, искал по шрифтам в основном.
Вместе с тем нормального решения так и нет, переключаться в legacy режим я не хочу.
И надо понять - это баг Far, или можно на MS Terminal открывать.
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 »

nimdamsk wrote: Sun 26 Jan, 2020 09:46 можно на MS Terminal открывать
Нужно!
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Некорректно показываются файлы с китайскими символами в имени

Post by 2useven10 »

Ну это даже не баг, а идеологическое противоречие.
Консольное api оперирует двумерной матрицей - одна ячейка на символ.
Символы двойной, полуторной или нулевой ширины в эту модель не вписываются.
User avatar
Rubidy
Posts: 19
Joined: Sun 18 Nov, 2007 18:54

Юникод-картинки в именах файлов искажают отрисовку панелей

Post by Rubidy »

Обнаружил, что после сохранения файла с именем, содержащем юникод-картинку ("⚡ Автономный способ.mhtml") при отрисовке обе панели окна при прокрутке или пролистывании смещаются вправо на символ, причём полоса прокрутки правой панели становится первым столбцом символов левой панели. Обнаружил в Far30b5963.x64, но баг остался и при обновлении до Far30b5988.x64. При выходе из каталога с таким именем, отображение панелей восстанавливается после пролистывания.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Сдвигается строка (и рамки) в панелях при наличии некоторых (многих) символов в имени файла

Post by HaRT »

 ! Message from: HaRT
Rubidy, я подклеил к правильной теме — читайте. И впредь не пренебрегайте поиском.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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