Repository navigation
MTN2 v0.3.16
Что нового в v0.3.16
Новое
-
Ctrl+Shift+N: у профилей консоли есть номера для быстрого запуска (1–9, 0, затем A–Z), Ins делает копию профиля с отдельными настройками, Del удаляет копию, Ctrl+Вверх и Ctrl+Вниз меняют порядок (он запоминается в файле
shellprofiles.jsonв папке настроек), F4 переключает режим клавиш профиля: «авто» (программа получает все клавиши, пока в консоли работает полноэкранное приложение, напримерmc), «терминал» (все клавиши программе) или «хост» (клавиши окна первые). Консоли передаются F1–F12, Alt- и Ctrl-сочетания; окну остаются F11, Ctrl+O, переключение вкладок и Ctrl+Shift+N (#51). -
F11 разворачивает окно на весь экран и возвращает обратно (действие
ToggleFullscreenв раскладке клавиш; кто использовал F11 в своёмkeymap.json, переназначает его там). -
Плагин на весь экран заполняет окно целиком: картинка, окно плагина и фон вокруг доходят до краёв, а справа и снизу больше нет синей полосы, которую оставляли неполные ячейки сетки. Плагин может узнать, включён ли полный экран, вызовом
surface_get_fullscreen. -
Открытие файла из плагина, которое ещё не закончилось (копирование из архива или с sftp), можно отменить вызовом
vfs_cancel;vfs_openтеперь возвращает номер задания. -
Плагины могут читать файл по частям, без предела в 64 МБ:
vfs_open,vfs_size,vfs_read_atиvfs_close(правоvfs.read; в WASM-плагинах те же импорты). Чтение, размер и закрытие вызываются из любого потока, поэтому декодер видео не зависит от главного потока. Файл из архива, с sftp или из схемы другого плагина сначала копируется во временный файл, а при долгом копировании показывается уведомление с ходом; копия удаляется при закрытии, а незакрытые файлы – при выгрузке плагина. -
Плагины могут читать файловую систему: просматривать папки, проверять существование и читать файлы через любые схемы программы (диски, архивы, sftp, схемы других плагинов). Для этого плагин называет право
vfs.readв манифесте (полеpermissions), а пользователь разрешает его в Параметры → Плагины... кнопкой «Разрешения...»; разрешение запоминается (plugin-permissions.jsonв папке настроек), состояние видно в строке плагина и в «Сведениях». Образецmtn.demo.panelkit: Ctrl+Shift+L показывает размер и первую строку файла под курсором. -
Плагин может показывать картинки и видео не только во вкладке, но и на весь экран и в панели напротив активной (как Quick View), получать мышь (нажатия, перетаскивание, колесо, двойной щелчок, размер области) и вместо кадров занять область своим окном (проигрыватель, веб-вид). Просмотр картинок из образцов теперь масштабируется колесом, перетаскивается, поворачивается и открывается на весь экран; Ctrl+Shift+V показывает картинку под курсором в соседней панели.
-
Плагины могут читать строки панели и ставить курсор, выбирать и снимать выбор файлов по маске, подписываться на события
panel.dir,panel.cursorиdoc.changed, задавать выделение и читать строки документа, выполнять работу в фоновом потоке с передачей результата в главный поток и показывать уведомление с ходом выполнения. Образцы: выбор файлов с тем же расширением и подсчёт размера папки в фоне. -
Плагин может раскрашивать текст файлов нужных расширений в просмотрщике и редакторе (образец – подсветка JSON и INI); цвета подбираются под фон темы.
-
Плагины получили доступ к документу в просмотрщике и редакторе (описание, выделение, строка, весь текст, замена одним шагом отмены, курсор), к панелям (папки, строка под курсором, выбранные строки, показ папки в панели, обновление), к буферу обмена и уведомлениям, а также к событиям
doc.opened,doc.saved,doc.closed. Перехватчик встроенной команды редактора (например, сохранения) может менять текст до выполнения команды. В образцы добавлены инструменты для текста (регистр, сортировка, повторы строк, «прибрать при сохранении»), инструменты панелей и счётчик слов на WASM. -
Параметры → Плагины...: Ctrl+Вверх и Ctrl+Вниз на строке списка меняют порядок загрузки плагинов; порядок запоминается (файл
plugin-order.jsonв папке настроек) и действует со следующего запуска. Он решает, чей перехватчик, провайдер открытия или обработчик схемы спрашивается первым, если приоритеты плагинов равны. -
Плагин может показывать картинки и видео внутри программы: открывается вкладка просмотра, как у текстового файла, а плагин отдаёт кадры, которые рисует MTN2 (нажатия клавиш и таймер приходят плагину). В образцы добавлены просмотр картинок (JPEG, PNG, BMP, GIF, TIFF, WebP; стрелки листают папку) и видеопроигрыватель со звуком (пауза, перемотка).
-
В списке плагинов (Параметры – Плагины...) появилась кнопка «Сведения»: описание плагина, автор, сайт и перечень того, что он добавил (команды и клавиши, типы файлов, схемы, пункты меню, текст в строке состояния), а кнопка «Справка» открывает страницу справки плагина. Описание, автор, сайт и справка задаются в
plugin.json(поляdescription,author,homepage,help). -
Плагин может заменить встроенный обработчик: схему (например,
sftp://) или расширение архива (например,.zip, тогда Enter на таком файле открывает архив через схему плагина). Замена включается только явно: плагин перечисляет её вplugin.json(полеoverrides), а пользователь вносит идентификатор плагина вplugins\overrides.json({"allow": ["id"]}). Такой плагин загружается при запуске. Схемыfile,sys,recycle,findиwsзаменить нельзя. -
Плагины могут перехватывать встроенные команды (Copy, View, Edit, Delete, Move и другие имена действий раскладки): перехватчик срабатывает при нажатии клавиши на панелях и при выборе пункта меню до самой команды и может её отменить. Плагин также может добавить свою команду и привязать к ней сочетание клавиш, если оно не занято встроенным действием. Плагин, которому нужны перехватчики или сочетания клавиш, указывает в
plugin.json"startup": trueи загружается при запуске. Перехватчики видят команды панелей, верхнего меню, просмотрщика и редактора (например,DocViewEdit,EditorSave,DocClose). -
Плагины могут брать на себя открытие файлов по типу: для расширений, которые они объявили, плагин вызывается при F3 и F4 до встроенного просмотрщика и редактора. Он может открыть файл сам (в своём окне или внешней программой), либо подсунуть встроенному окну другой файл (например, текст, полученный из исходного формата), либо оставить открытие встроенному окну. Для F3 и F4 можно выбрать разные плагины.
-
Плагины могут показывать диалоги: плагин описывает диалог тем же JSON, что и встроенные, хост показывает его поверх панелей и возвращает плагину нажатую кнопку и значения полей. Диалог одноразовый (любая кнопка закрывает его) и не открывается внутри редактора, просмотрщика или терминала.
-
Плагин может обрабатывать Enter и двойной щелчок по строке панели с его схемой (в том числе
fileдля локальных папок), задавать подпись своей команды в нижней строке клавиш (если её сочетание лежит на свободной F-клавише с модификаторами) и выводить свой текст в строке состояния панелей. -
В сочетании с разрешением замены (
plugins\overrides.json) плагинmtn.7zможет взять на себя открытие.zipпо Enter: для этого вoverrides.jsonуказывается{"allow": ["mtn.7z"]}. Без этого файла.zipоткрывается встроенным модулем, как раньше. -
Параметры → Плагины...: список всех установленных плагинов с отметкой
[x]/[ ]и Пробел на строке для включения и выключения. Выбор применяется по кнопке «ОК» (Отмена, Esc и закрытие окна его отбрасывают): выключенный плагин выгружается и больше не загружается, включённый загружается; выбор запоминается между запусками (файлdisabled-plugins.jsonв папке настроек). Кнопка «Разрешения...» открывает диалог с флажками: заменять ли встроенные обработчики, которые плагин назвал в манифесте (строка помечена[replaces .zip: on]; разрешение запоминается вplugins\overrides.json, плагин перезагружается сразу), и какие права ему даны (vfs.read); править файлы вручную не нужно. -
Параметры → Плагины...: кнопка «Настройки» открывает диалог настройки выбранного плагина, если он его предоставляет (такая строка помечена
[settings]). Когда диалог настроек закрывается, список плагинов открывается снова; если у плагина нет настроек, показывается сообщение об этом. Значения хранятся в папке настроек (plugin-settings-<id>.json). Плагины mtn.demo.pas (файл заметок) и mtn.demo.go (отступ JSON) показывают это на примере. -
WASM-плагин может использовать WASI (Go, Rust): в
plugin.jsonуказывается"wasi": true. Модуль получает пустой WASI без доступа к файлам, окружению и сети; без этого поля модуль, импортирующий WASI, по-прежнему не загружается. В WASM добавлен импортregister_key_binding(сочетания клавиш для команд плагина). Нативной DLL с неостанавливаемой средой выполнения (Go) в манифесте задаётся"keepLoaded": true.
Изменено
- Окно истории переходов (Alt+Влево / Alt+Вправо) занимает ширину панели без трёх ячеек с каждой стороны; длинные пути в списке сокращаются.
- При первом запуске (в папке настроек ещё нет ни списка выключенных плагинов, ни сессии) все плагины выключены; нужные включаются в Параметры → Плагины... (Пробел на строке, затем ОК). Установки, которые уже использовались, сохраняют прежнее состояние плагинов. Пока выключены все плагины, при запуске показывается подсказка «Плагины выключены» с флажком «Больше не показывать» (вернуть её можно в Параметры → Показать скрытые диалоги). Предупреждение об отсутствующем
7z.dllне показывается, если плагинmtn.7zвыключен. - Диалоги поиска и замены в редакторе: поля ввода и флажки доходят до правого края без лишнего отступа, а ряд кнопок отделён от параметров линией, как в остальных диалогах (#27).
- Плагин без такого разрешения не может занять схему, которую уже обслуживает встроенный обработчик, и не получает приоритет выше встроенных, даже если запросил его при регистрации. Нативный плагин, пытающийся зарегистрировать зарезервированную схему, получает отказ.
Исправлено
- В запросе на удаление одного файла или папки имя показано отдельной строкой контрастным цветом между словами вопроса («Переместить файл», «имя», «в корзину?»); ширина окна подбирается под имя.
- В диалогах с одной строкой сообщения (удаление, подтверждение, сохранение изменённого файла) нет разделителя: над сообщением и под ним по пустой строке.
- Файлы из ZIP-архива, зашифрованного паролем (AES), открываются в просмотрщике и редакторе и копируются или переносятся по F5 и F6: запрашивается пароль, а записи читаются через плагин 7z, вместо сообщения «Support for decompression method not registered».
- Полноэкранные программы в консоли (Midnight Commander в WSL и подобные) больше не рисуются с пустой строкой после каждой строки: перенос на следующую строку происходит только при выводе следующего символа, а не сразу после записи в последнюю колонку (#51).
- Стрелки, Home и End в полноэкранных программах консоли (Midnight Commander) работают: клавиши шлются в виде, который программа запросила для прикладного режима курсора (#51).
- Диалог хода копирования, перемещения и удаления: Enter на кнопке «В фоне» отправляет задание в фон (раньше работала только мышь); Enter на «Отмена» по-прежнему ничего не делает, чтобы не прервать задание случайно.
- Тема Far Classic: кнопки диалогов вне фокуса стали тёмно-серыми с белым текстом и больше не сливаются с полями ввода; кнопка в фокусе по-прежнему голубая.
- Диалог «Тема»: кнопки «ОК» и «Отмена» стоят внизу, под кнопками «Настроить...», «Создать...» и «Удалить».
- Единый вид диалогов: содержимое начинается сразу под заголовком (без пустой строки), над рядом кнопок стоят разделитель и одна пустая строка, под кнопками остаётся только строка тени, затем рамка. Блок из двух рядов кнопок (диалог «Тема») отделён пустой строкой сверху. Пояснения под полями (подсказки по клавишам и форматам) зажаты между двумя разделителями, без пустых строк.
- Выход из Корзины и системных папок по «..» больше не открывает окно истории поверх панели: панель просто возвращается туда, откуда пришла (#41).
- Одиночное нажатие Alt открывает главное меню (раньше не работало): меню открывается при отпускании Alt, если между нажатием и отпусканием не было других клавиш и мыши; Alt+клавиша и AltGr меню не открывают.
- F9 и одиночный Alt открывают меню активной панели («Слева» или «Справа»), а не всегда «Слева» (#42).
- В главном меню работают Home, End, PgUp и PgDn: первый и последний пункт открытого списка, а на панели меню – первая и последняя группа (#42).
- Пункт главного меню выполняется при отпускании кнопки мыши, а не при нажатии: можно нажать на заголовок или пункт, протянуть до нужного пункта и отпустить, как в Far. Раньше такое движение начинало перетаскивание файла, и при отпускании над панелью открывался диалог копирования (#42).
- Двойной щелчок по строке списка в диалоге работает как Enter на ней (#43).
- Del в списке диалога нажимает кнопку «Удалить», если она есть (например, в диалоге тем) (#43).
- Перетаскивание файлов стало менее чувствительным: оно начинается, когда указатель ушёл от места нажатия не меньше чем на две ячейки, и только если нажатие пришлось на строку файла (щелчок по крестику диалога, по меню или по пустому месту больше не взводит его). В Параметры → Дисплей появился флажок «Перетаскивать файлы мышью», его можно выключить совсем (#44).
- Курсив в Markdown, просмотрщике и других окнах: наклонные буквы больше не обрезаются справа по границе ячейки, выступающая часть рисуется поверх соседней.
Все изменения по версиям: CHANGELOG.md
Установка
Распакуйте архив в любую папку и запустите MTN2.exe (Windows x64). Инсталлятор не нужен. Архивов два, программа в них одна и та же:
| Архив | Где хранятся настройки, история, раскладка клавиш |
|---|---|
MTN2-v0.3.16-win64.zip |
%APPDATA%\MTN2 – у каждого пользователя Windows свои |
MTN2-v0.3.16-win64-portable.zip |
рядом с MTN2.exe – для флешки или папки, которую носите с собой |
Переносной режим включает файл portable.dat рядом с MTN2.exe: удалите его, чтобы перейти на %APPDATA%\MTN2, или создайте, чтобы перейти обратно (настройки при этом не переносятся). Для переносной копии папка должна быть доступна на запись. Встроенное обновление работает в обоих вариантах и сохраняет portable.dat и настройки.
Поддержка 7z-архивов (7z.dll)
В архив входит 7z.dll из 7-Zip (x64): с ней плагин mtn.7z открывает .7z и другие архивы.
7-Zip распространяется под GNU LGPL (с частями под BSD и ограничением unRAR); тексты лицензий лежат в
plugins\mtn.7z\license.txt, сведения о сторонних компонентах – в THIRD-PARTY.md. Библиотеку можно заменить своей:
положите x64-версию 7z.dll в plugins\mtn.7z\.
Full Changelog: v0.3.15...v0.3.16