mdview2: вынести md_key() в mdview2_md.c (симметрия с raw_key)
MD-навигация после загрузки (стрелки/PgUp/PgDn/Home/End/←/→) вынесена из switch в main() в md_key(scan) — peer к raw_key(): возвращает 1/0, сама перерисовывает область+статус. main() теперь симметричен для обоих видов: F-клавиши (F1/F8/F10, для RAW ещё F2/F3) разбираются в цикле, навигация делегируется md_key()/raw_key(). HPAN_STEP вынесен в mdview2.h (был продублирован в ядре и raw). load_key() (навигация во время прогрессивной загрузки, bounded по drawable_lines) остаётся в ядре — у неё нет RAW-аналога. Поведение сохранено (F1 теперь без лишнего render_updated_status — show_help и так перерисовывает всё). Размер: exe 28115→28173 (+58 Б — стоимость границы функции, как у raw_key). Сборка чистая. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -252,8 +252,6 @@ static uint8_t g_disp_doc = DOC_8BIT; /* какой набор показа
|
|||||||
|
|
||||||
static void doc_switch(uint8_t target); /* forward (нужна в progress_tick) */
|
static void doc_switch(uint8_t target); /* forward (нужна в progress_tick) */
|
||||||
|
|
||||||
#define HPAN_STEP 8u
|
|
||||||
|
|
||||||
/* Спиннер в статус-баре (col=8,row=0).
|
/* Спиннер в статус-баре (col=8,row=0).
|
||||||
* Включается во время загрузки/индексации, чтобы показать,
|
* Включается во время загрузки/индексации, чтобы показать,
|
||||||
* что программа занята и не зависла. */
|
* что программа занята и не зависла. */
|
||||||
@@ -1020,9 +1018,10 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#endif /* WITH_RAW */
|
#endif /* WITH_RAW */
|
||||||
|
|
||||||
switch (scan) {
|
/* MD-режим: F1/F8/F10 здесь, навигация — в md_key() (peer к raw_key). */
|
||||||
case KEY_F1: show_help(); break;
|
if (scan == KEY_F10) goto exit_loop;
|
||||||
case KEY_F8: { /* цикл CP866→CP1251→KOI8R→UTF8→CP866; нужный набор дособерётся лениво */
|
if (scan == KEY_F1) { show_help(); continue; } /* show_help сам перерисует */
|
||||||
|
if (scan == KEY_F8) { /* цикл CP866→CP1251→KOI8R→UTF8→CP866; набор дособерётся лениво */
|
||||||
uint8_t next = (g_encoding == ENC_CP866) ? ENC_CP1251 :
|
uint8_t next = (g_encoding == ENC_CP866) ? ENC_CP1251 :
|
||||||
(g_encoding == ENC_CP1251) ? ENC_KOI8R :
|
(g_encoding == ENC_CP1251) ? ENC_KOI8R :
|
||||||
(g_encoding == ENC_KOI8R) ? ENC_UTF8 : ENC_CP866;
|
(g_encoding == ENC_KOI8R) ? ENC_UTF8 : ENC_CP866;
|
||||||
@@ -1033,23 +1032,7 @@ int main(int argc, char **argv)
|
|||||||
draw_viewport_from_cache();
|
draw_viewport_from_cache();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
case KEY_F10: goto exit_loop;
|
md_key(scan); /* навигация MD (сама рисует+статус); незнакомые игнорит */
|
||||||
case KEY_UP: scroll_up(1); break;
|
|
||||||
case KEY_DOWN: scroll_down(1); break;
|
|
||||||
case KEY_LEFT: scroll_h(-(int8_t)HPAN_STEP); break;
|
|
||||||
case KEY_RIGHT: scroll_h(+(int8_t)HPAN_STEP); break;
|
|
||||||
case KEY_PGUP: scroll_up(VIEW_H); break;
|
|
||||||
case KEY_PGDN: scroll_down(VIEW_H); break;
|
|
||||||
case KEY_HOME: top_line = 0;
|
|
||||||
viewport_x = 0;
|
|
||||||
draw_viewport_from_cache(); break;
|
|
||||||
case KEY_END: top_line = (n_lines > VIEW_H)
|
|
||||||
? (uint16_t)(n_lines - VIEW_H) : 0;
|
|
||||||
viewport_x = 0;
|
|
||||||
draw_viewport_from_cache(); break;
|
|
||||||
default: continue;
|
|
||||||
}
|
|
||||||
render_updated_status();
|
|
||||||
}
|
}
|
||||||
exit_loop:
|
exit_loop:
|
||||||
unload_file();
|
unload_file();
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#define VIEW_H 30 /* видимая область: строки 1..30 включительно */
|
#define VIEW_H 30 /* видимая область: строки 1..30 включительно */
|
||||||
#define MENU_ROW 31
|
#define MENU_ROW 31
|
||||||
#define TAB_STOP 4
|
#define TAB_STOP 4
|
||||||
|
#define HPAN_STEP 8u /* шаг горизонтального сдвига (←/→) */
|
||||||
|
|
||||||
/* ---- Параметры файла и памяти ------------------------------------ */
|
/* ---- Параметры файла и памяти ------------------------------------ */
|
||||||
#define PAGE_BITS 14u
|
#define PAGE_BITS 14u
|
||||||
@@ -174,6 +175,7 @@ void clamp_top(void); /* привести top_line к ди
|
|||||||
void scroll_up(uint16_t n);
|
void scroll_up(uint16_t n);
|
||||||
void scroll_down(uint16_t n);
|
void scroll_down(uint16_t n);
|
||||||
void scroll_h(int8_t delta); /* горизонтальный сдвиг nowrap-блоков */
|
void scroll_h(int8_t delta); /* горизонтальный сдвиг nowrap-блоков */
|
||||||
|
uint8_t md_key(uint8_t scan); /* навигация MD (после загрузки); 1 = обработано */
|
||||||
|
|
||||||
/* ================================================================== *
|
/* ================================================================== *
|
||||||
* API модуля справки (mdview2_help.c).
|
* API модуля справки (mdview2_help.c).
|
||||||
|
|||||||
@@ -246,3 +246,28 @@ void scroll_h(int8_t delta)
|
|||||||
if (new_vx != old_vx)
|
if (new_vx != old_vx)
|
||||||
draw_viewport_from_cache();
|
draw_viewport_from_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---- навигация MD после загрузки (peer к raw_key) ---------------- */
|
||||||
|
|
||||||
|
/* Обрабатывает навигационную клавишу в MD-режиме (вызывается из главного
|
||||||
|
* цикла). Сама перерисовывает область/статус. Возврат: 1 — обработано,
|
||||||
|
* 0 — не наша клавиша (F1/F8/F10 разбирает main). */
|
||||||
|
uint8_t md_key(uint8_t scan)
|
||||||
|
{
|
||||||
|
switch (scan) {
|
||||||
|
case KEY_UP: scroll_up(1); break;
|
||||||
|
case KEY_DOWN: scroll_down(1); break;
|
||||||
|
case KEY_LEFT: scroll_h(-(int8_t)HPAN_STEP); break;
|
||||||
|
case KEY_RIGHT: scroll_h(+(int8_t)HPAN_STEP); break;
|
||||||
|
case KEY_PGUP: scroll_up(VIEW_H); break;
|
||||||
|
case KEY_PGDN: scroll_down(VIEW_H); break;
|
||||||
|
case KEY_HOME: top_line = 0; viewport_x = 0;
|
||||||
|
draw_viewport_from_cache(); break;
|
||||||
|
case KEY_END: top_line = (n_lines > VIEW_H) ? (uint16_t)(n_lines - VIEW_H) : 0;
|
||||||
|
viewport_x = 0;
|
||||||
|
draw_viewport_from_cache(); break;
|
||||||
|
default: return 0; /* не наша клавиша */
|
||||||
|
}
|
||||||
|
render_updated_status();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,8 +22,6 @@
|
|||||||
static uint32_t raw_top = 0; /* байт-offset верхней строки экрана */
|
static uint32_t raw_top = 0; /* байт-offset верхней строки экрана */
|
||||||
static uint16_t raw_hpan = 0; /* гориз. сдвиг (только HSCROLL) */
|
static uint16_t raw_hpan = 0; /* гориз. сдвиг (только HSCROLL) */
|
||||||
|
|
||||||
#define HPAN_STEP 8u
|
|
||||||
|
|
||||||
/* ---- примитивы навигации по физическим строкам / переносам -------- */
|
/* ---- примитивы навигации по физическим строкам / переносам -------- */
|
||||||
|
|
||||||
static uint32_t raw_line_start(uint32_t off)
|
static uint32_t raw_line_start(uint32_t off)
|
||||||
|
|||||||
Reference in New Issue
Block a user