Skip to content

Прогресс-бар не падает на Linux и macOS - #3

Open
nixel2007 wants to merge 5 commits into
masterfrom
fix/cursor-visibility-on-unix
Open

Прогресс-бар не падает на Linux и macOS#3
nixel2007 wants to merge 5 commits into
masterfrom
fix/cursor-visibility-on-unix

Conversation

@nixel2007

Copy link
Copy Markdown
Member

На Linux и macOS прогресс-бар падает на первом же СделатьШаг:

{Модуль .../progbar/src/ПрогрессБар.os / Ошибка в строке: 98 /
 Внешнее исключение (System.PlatformNotSupportedException): Operation is not supported on this platform.}
 Консоль.ВидимостьКурсора(Ложь);

Причина в самом методе OneScript: ВидимостьКурсора возвращает прежнее значение и ради этого читает Console.CursorVisible, а чтение этого свойства в .NET поддерживается только на Windows.

[ContextMethod("ВидимостьКурсора", "CursorVisible")]
public bool CursorVisible(bool visible)
{
    bool oldVal = Console.CursorVisible;   // на Linux и macOS выбрасывает исключение
    Console.CursorVisible = visible;
    return oldVal;
}

Установка видимости там работает, а вот чтение - нет, поэтому воспользоваться методом на этих платформах нельзя вовсе.

В этом PR вызовы вынесены в СкрытьКурсор: если платформа управление курсором не поддерживает, признак снимается после первой же неудачи и дальше бар про курсор не вспоминает. Курсор остаётся видимым - на фоне неработающего бара это мелочь.

Проверено на Linux: до правки Начать + СделатьШаг падают, после - бар рисуется и доходит до 100%.

Версия поднята до 1.4.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN

nixel2007 and others added 5 commits August 27, 2026 18:29
Консоль.ВидимостьКурсора возвращает прежнее значение курсора и для этого читает
Console.CursorVisible - свойство, чтение которого поддерживается только на Windows.
На остальных платформах вызов выбрасывает PlatformNotSupportedException, поэтому
прогресс-бар падал на первом же СделатьШаг.

Теперь видимость курсора устанавливается там, где это поддерживается, а где нет -
курсор просто остаётся видимым, и бар работает как обычно.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN
Тесты на OneUnit проверяют поведение до инициализации, длительность выполнения
и то, что бар доходит до конца - на этом падала прежняя версия вне Windows.

Тестовый рабочий процесс гоняет их на трёх операционных системах и на stable
и dev движка, релизный публикует пакет на хаб по выпуску релиза.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN
OneUnit порождает прогон отдельным процессом и собирает ему конфигурацию из
oscript.cfg проекта. Без него дочерний процесс не видел локальный каталог
библиотек и падал на поиске annotations.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN
Корневой oscript.cfg для этого не нужен: OneUnit собирает конфигурацию дочернего
прогона из каталогов тестов, туда её и кладём.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN
Управление курсором работает только в живой консоли: при перенаправленном выводе
позиция курсора недоступна (на Windows - "The handle is invalid"), а в сборке окна
нет вовсе и его ширина равна нулю - установка позиции падает с выходом за границы.
Прогресс-бар - украшение, и работа из-за него падать не должна: если рисовать
нельзя, бар замолкает до конца прогона, а шаги и длительность продолжают считаться.

Версия среды поднята до 2.0.0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpvuJYLbttUBC1ufRmU1JN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant