#!/bin/bash #============================================================================== # Модуль интерфейса (TUI) на основе 'dialog' # ИСПРАВЛЕНА ВЫСОТА ДИНАМИЧЕСКОГО МЕНЮ #============================================================================== # Используем МАССИВ для опций, чтобы избежать проблем с кавычками и пробелами. DIALOG_OPTS=(--colors --backtitle "Универсальный обработчик медиа") # Функция-обертка для вызова dialog и корректного возврата результата. # ... (эта функция остается без изменений) _call_dialog() { local original_value="$1" shift local result result=$("$@" 2>&1 1>/dev/tty) local exit_status=$? if [ $exit_status -eq 0 ]; then echo "$result" else echo "$original_value" fi } # Показать начальное меню выбора действия # ... (эта функция остается без изменений) ui_select_initial_action() { _call_dialog "" \ dialog "${DIALOG_OPTS[@]}" --title "Выбор действия" \ --cancel-label "Выход" \ --menu "Выберите, что вы хотите сделать:" 15 70 2 \ "MERGE" "Склеить видео и аудио (mkvmerge)" \ "SYMLINK" "Создать симлинки с новыми именами" } # Показать главное меню ui_main_menu() { # --- КЛЮЧЕВОЕ ИЗМЕНЕНИЕ ЗДЕСЬ --- # Заменяем фиксированную высоту меню "15" на "0". # "0" говорит dialog автоматически рассчитать высоту на основе количества пунктов. _call_dialog "" \ dialog "${DIALOG_OPTS[@]}" --title "Главное меню" \ --cancel-label "Назад" \ --menu "Выберите опцию для редактирования или действия:" 20 85 0 "${@}" } # Получить путь к каталогу # ... (эта функция остается без изменений) ui_get_directory() { local title="$1" local current_path="$2" local default_path="$3" local start_path="${current_path:-$default_path}" [[ "$start_path" != */ ]] && start_path="$start_path/" _call_dialog "$current_path" \ dialog "${DIALOG_OPTS[@]}" --title "$title" --dselect "$start_path" 10 70 } # Получить текстовый ввод от пользователя # ... (остальные функции остаются без изменений) ui_get_input() { local title="$1" local current_value="$2" _call_dialog "$current_value" \ dialog "${DIALOG_OPTS[@]}" --title "$title" --inputbox "Введите новое значение:" 10 70 "$current_value" } ui_show_message() { local title="$1" local text="$2" dialog "${DIALOG_OPTS[@]}" --title "$title" --msgbox "$text" 20 70 } ui_confirm() { local title="$1" local text="$2" dialog "${DIALOG_OPTS[@]}" --title "$title" --yesno "$text" 10 70 return $? }