mdview2: чинить детект лимита строк + кламп файлов >256 КБ
1. Лимит строк не показывал предупреждение: g_trunc_cause=TRUNC_LINES ставился в emit_seg, но главный цикл выходит по n_lines<max_lines ДО вызова emit_seg в переполненном состоянии (для code-block — один emit_seg на строку). Теперь ловим после цикла по признаку p<file_size (остановились, файл не кончился). 2. Файл >256 КБ больше не отвергаем экраном ошибки, а КЛАМПим: читаем первые 256 КБ, индексатор дописывает строку TRUNC_FILE (File too large - truncated at 256 KB). Приоритет ниже content/lines. Текст ошибки -2 поправлен (был 'size > 128K'). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -973,6 +973,25 @@ void index_lines(void)
|
||||
* незафлашенной, её ячейки ещё в g_cells; коммитим здесь. */
|
||||
if (n_lines > 0) seg_commit_cells((uint16_t)(n_lines - 1));
|
||||
|
||||
/* Лимит строк ловим ЗДЕСЬ, а не в emit_seg: главный цикл выходит по
|
||||
* `n_lines < max_lines` ДО того, как emit_seg будет вызван в переполненном
|
||||
* состоянии (для code-block — один emit_seg на строку, эта ветка не
|
||||
* достигается). Признак — остановились, а файл не кончился; g_abort и
|
||||
* исчерпание контента (TRUNC_CONTENT) уже обработаны/исключены. */
|
||||
if (!g_trunc_cause && !g_abort && p < file_size) {
|
||||
g_trunc_cause = TRUNC_LINES;
|
||||
g_trunc_line = (uint16_t)(max_lines - 1);
|
||||
}
|
||||
|
||||
/* Файл был обрезан до 256 КБ при загрузке, а индексация дошла до конца
|
||||
* клампнутых данных без исчерпания контента/строк → ДОПИСЫВАЕМ строку
|
||||
* (место есть: n_lines < max_lines). Приоритет ниже content/lines —
|
||||
* те означают, что обрезали ещё раньше, их сообщение точнее. */
|
||||
if (!g_trunc_cause && !g_abort && g_file_clamped) {
|
||||
g_trunc_cause = TRUNC_FILE;
|
||||
g_trunc_line = n_lines;
|
||||
}
|
||||
|
||||
/* Обрыв по контенту/лимиту строк (не путать с пользовательским g_abort):
|
||||
* документ заканчиваем строкой-сообщением на g_trunc_line. Сообщение
|
||||
* рисуется вживую (IF_TRUNC_MSG) — место в контент-кэше ему не нужно, что
|
||||
|
||||
Reference in New Issue
Block a user