LINUX.ORG.RU

Форк Midnight Commander c поддержкой панельных плагинов

 , , , ,


4

2

https://www.opennet.ru/opennews/art.shtml?num=66018.

Выпущен консольный файловый менеджер Midnight Commander 6.0.3 (mc6), представляющий собой форк GNU Midnight Commander 4.8.33, расширенный поддержкой панельных плагинов и поставляемый со встроенным PTY-терминалом mcterm. Интегрированный в mc6 фреймворк панельных плагинов позволяет отображать в панелях не только файловые системы, но и контейнеры, Git-репозитории, базы данных и объекты удалённых хранилищ. Код проекта написан на языке Си и распространяется под лицензией GPLv3+. Готовые пакеты подготовлены для Debian и Ubuntu, Fedora и RHEL, а также Arch Linux в форматах DEB, RPM и pkg.tar.zst. Для Gentoo дополнительно предоставлен ebuild для установки через локальный overlay.

В состав выпуска вошли плагины для работы с архивами, FTP/SFTP/FTPS, Samba, Git, Docker, Kubernetes, MongoDB и S3-совместимыми хранилищами. Плагины поддерживают стандартные файловые операции, а переработанная поддержка архивов на базе libarchive заметно (в десятки или сотни раз) ускоряет обработку больших архивов.

Во встроенный текстовый редактор mcedit добавлены возможность сворачивания блоков кода, браузер истории Undo/Redo, средства управление макросами и поддержка сохранения файлов через sudo. В разы улучшена производительность при работе с очень длинными строками.

Просмотрщик mcview получил древовидное представление JSON, YAML и XML, интерактивную фильтрацию содержимого, базовую поддержку отображения разметки Markdown и режим воспроизведения файлов с ANSI-последовательностями.

В состав включён встроенный PTY-терминал mcterm с собственным эмулятором терминала, предназначенный для замены традиционного subshell-механизма.

★★★★★

Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

меньше же )

вот опишу сценарий: запустил make или что-то, что в консоль выдало много текста, я нажимаю поиск. Нашел и хочу в окрестностях посмотреть еще что-то, поискать глазами артефакты, но если я нажму еск то я потеряю позицию, верно? а как тогда быть?

angel_il ★★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от angel_il

проект переименован в mcommander.

там тоже смешная история получилась.

Может быть, хранить настройки и т. п. в */mcommander/* вместо */mc6/*? Ведь будет же версия 7 когда-нибудь, да? :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Ведь будет же версия 7 когда-нибудь, да?

не у меня точно )

angel_il ★★★★★
()
Ответ на: комментарий от dataman

Или случайно нажал Alt-S.

надо подумать.. сейчас таб зарешает но это не интуитивно..

angel_il ★★★★★
()
Ответ на: комментарий от dataman

Я тоже: хотел искать, но передумал. Или случайно нажал Alt-S.

я подумал и сделаю так мой сценарий бла-бла-бла - Enter остаемся на найденном твой сценарий бла-бла-бла - Esc улетаем обратно в промпт и позиция поиска сбрасывается. вроде логически не противоречиво и интуитивно

angel_il ★★★★★
()

@angel_il, нашёл, почему некоторые TUI-программы на Расте (gitui, например) не работают в mcterm — выходят с сообщением "The cursor position could not be read within a normal duration`.
Вот кусочек из crossterm-rs/cursor/sys/unix.rs:

fn read_position_raw() -> io::Result<(u16, u16)> {
    // Discard any buffered cursor-position replies from earlier `ESC[6n` requests so the
    // position returned below corresponds to the fresh request we are about to send.
    // Poll with a zero timeout to drain only already-available events without blocking.
    while let Ok(true) = internal::poll(Some(Duration::ZERO), &CursorPositionFilter) {
        let _ = internal::read(&CursorPositionFilter);
    }

    // Use `ESC [ 6 n` to and retrieve the cursor position.
    let mut stdout = io::stdout();
    stdout.write_all(b"\x1B[6n")?;
    stdout.flush()?;

    loop {
        match internal::poll(Some(Duration::from_millis(2000)), &CursorPositionFilter) {
            Ok(true) => {
                if let Ok(InternalEvent::CursorPosition(x, y)) =
                    internal::read(&CursorPositionFilter)
                {
                    return Ok((x, y));
                }
            }
            Ok(false) => {
                return Err(Error::other(
                    "The cursor position could not be read within a normal duration",
                ));
            }
            Err(_) => {}
        }
    }
}
dataman ★★★★★
() автор топика
Ответ на: комментарий от yars068

Тогда была бы уже куча жалоб в других проектах.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

нашёл, почему некоторые TUI-программы на Расте (gitui, например) не работают в mcterm — выходят с сообщением "The cursor position could not be read within a normal duration`.

Супер! Да, дело в этом. mcterm не отвечал на запрос позиции курсора ESC[6n (DSR). а crossterm отправляет этот запрос и ждёт ответ ESC[row;colR 2 секунды а дальше завершается с ошибкой. Я добавил ответы на ESC[6n (позиция курсора) и ESC[5n (статус, ESC[0n).

поправил тут https://github.com/blue-panels/mcommander/pull/342

angel_il ★★★★★
()
Ответ на: комментарий от Turbid

что за «slava team» ?

Там и славянская команда и команда Славы Занько. Игра слов

angel_il ★★★★★
()

Ещё вот такое недавно заметил.

Фалйы po/*.po есть в репозитории, но при этом они генерируются при сборке.

Заметил, когда делал «git pull» и увидел конфликты. Это для релизных срезов сделано?

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Ещё вот такое недавно заметил.Фалйы po/*.po есть в репозитории, но при этом они генерируются при сборке.Заметил, когда делал «git pull» и увидел конфликты. Это для релизных срезов сделано?

да, когда переводил оку на markdown где то накосячил, фиксану

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

просто удивила она меня

Тебя попросили убрать из названий «mc» и «Midnight Commander». В качестве альтернативы предложили «bp», раз уж ты назвал организацию «Blue Panels». А ты зачем-то в прения о лицензиях полез, мол, лицензия не запрещает.

Самым простым и логичным решением было бы полностью отойти от использования наименований Midnight Commander и mc, чтобы не было никаких шансов спутать форк с MC. «Blue Panels»/«bp» идеально бы подошло. Возможно, даже стоило бы упоминания об mc вычистить из кода, кроме шапок с копирайтами и лицензиями. Это бы полностью закрыло вопрос.

Текущее название, M-Commander, это какая-то игра в «засуди меня, если сможешь». В чём вообще смысл цепляться за аббревиатуру MC? Привычка набирать mc в терминале?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ну это таки mc, зачем прятать? Наоборот было бы странно полностью переименовывать, будет выглядеть как попытка выдать чужой форкнутый продукт за полностью свой.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ну, например, потому второй по количеству коммитов в репозиторий чел попросил поменять название, чтобы избежать путаницы? Обоснование там было в духе «багрепорты о форке могут начать слать в оригинальный проект». Там какая-то история с Midnight Commander for Windows, багрепорты к которому шлют в Midnight Commander, потому что сложно понять, что это уже разные проекты.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

А ты зачем-то в прения о лицензиях полез, мол, лицензия не запрещает.

потому что не запрещает, вроде очевидно.

M-Commander, это какая-то игра в «засуди меня, если сможешь»

примерно за что? за слово commander?

angel_il ★★★★★
()
Ответ на: комментарий от i-rinat

А вот был когда-то сайт mc.linuxinside.com, mc оттуда был в портах фрибсд как mc-light (а у меня и сейчас есть, я его забрал из старых ревизий портов и обновил под новые ветки). Был весьма популярен, и при этом в нём нигде не указано что это форк даже (кроме сайта, на который наверно никто не заходил) - по F1 показывается «GNU Midnight Commander 4.1.40pre9». Кто-то от этого страдал?

firkax ★★★★★
()
Ответ на: комментарий от angel_il

Ну ссылаться на лицензию там тоже было неуместно на мой взгляд, дело же не в ней, и не в судах (никто судиться не собирался, очевидно, просто просили). Вопрос был только в том как наиболее уместно всё назвать.

firkax ★★★★★
()
Ответ на: комментарий от i-rinat

Ну, например, потому второй по количеству коммитов в репозиторий чел

нет, второй же это я, а я не просил ) И Андрей не просил, и Слава не просил, я честно не очень понимаю сути претензий, в мире есть куча форков которые имеют общие буквы с оригиналом, какие то не имеют. Я ведь уже полностью переименовал проект, не должно остаться вопросов вроде.

angel_il ★★★★★
()
Ответ на: комментарий от firkax

Ну ссылаться на лицензию там тоже было неуместно на мой взгляд, дело же не в ней

а вроде больше и не на что было, Midnight commander это ведь не торговая марка, я проверял. Я ведь просто спросил на чем основано требование поменять имя. Ведь куча было форков mc и никто за ними не бегал и не требовал переименовывать, был 4.1.X-MP от Олега Коновалова, был mc^2 от муффи, был mc 5.0 забыл чей, ни от кого не требовалось переименовывать. Мне показалось что это двойные стандарты, но спорить не стал.

angel_il ★★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от angel_il

торговая марка

Разговор вообще был не про юриспруденцию, не знаю зачем было её приплетать.

Я так то тоже считаю что желание полного переименования странное, но вовсе не из-за нормативных документов (на которые в целом пофиг), а из здравого смысла. Показать что это не оригинал а форк - конечно желательно, но так же желательно и сохранить информацию о том, чей он, а не прятать её за полностью несвязанными названиями.

никто за ними не бегал и не требовал переименовывать

Ну за тобой, строго говоря, тоже никто не бегал. Увидели в багтрекере оригинала твоё же сообщение про форк и на него уже отвечали.

firkax ★★★★★
()
Ответ на: комментарий от angel_il

поправил тут

Спасибо, теперь gitui работает! Но у меня ещё «подарочки». :)
Вот что происходит с tig (из git) в mcterm: https://freeimage.host/i/nY156hX. Тут я нажимаю «d» на коммите, потом «End» и несколько раз стрелку вверх. Не в mcterm такое не повторяется.


Конечно, есть масса средств для тестирования возможностей ЭТ. Например, тесты из Contour: https://github.com/contour-terminal/contour/tree/master/test.
Вот как выглядит decoration.sh в WezTerm: https://freeimage.host/i/nY1e3Pf.
А вот как в mcterm: https://freeimage.host/i/nY18oNI.


Может быть, есть смысл инсталлировать свой terminfo?

dataman ★★★★★
() автор топика

@angel_il, пока собирал Stellarium для новости, подумалось, что неплохо бы подсчитывать размер директорий при включенной опции «Watch directories». Может быть, с добавлением соответствующей опции.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

О, круто! потестирую там.

Может быть, есть смысл инсталлировать свой terminfo?

есть сомнения, надо подумать

angel_il ★★★★★
()
Ответ на: комментарий от dataman

надо подумать про это, главное чтоб не сильно «дорого»

angel_il ★★★★★
()
Ответ на: комментарий от dataman

то что можно было сделать я фиксанул, но часть вещей не поддерживается slang такие как волнистые и двойные подчеркивания.

angel_il ★★★★★
()
Ответ на: комментарий от dataman

Вот что происходит с tig (из git) в mcterm:

да я экономлю перерисовки экрана, неприятная бага, думаю как фиксануть.

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

то что можно было сделать я фиксанул

Спасибо, пока годится! :)

не поддерживается slang такие как волнистые и двойные

Да и ладно. Я, в общем-то, и не знаю других TUI-библиотек для Си, которые их поддерживают.
Хотя я и делал их поддержку в termbox2 (PR#120), но прошёл уже почти год, и они хотят что-то более мудрёное и универсальное. :)
А для C++ их, пожалуй, поддерживает только core-cpp из того же Contour.

dataman ★★★★★
() автор топика

@angel_il, после каких-то последних коммитов перестали работать некоторые кнопки. Например Up, Down и все F*.
Так что пока отключил в WezTerm поддержку kitty keyboard protocol. Могу наделать скриншотов с Key sniffer, если нужно.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

@angel_il, после каких-то последних коммитов перестали работать некоторые кнопки. Например Up, Down и все F*.

Так что пока отключил в WezTerm поддержку kitty keyboard protocol. Могу наделать скриншотов с Key sniffer, если нужно.

я как раз добавляю поддержку kitty keyboard protocol. :) но кое что еще не влил а дальше буду вычищать косяки, потому что задача объемная, но там есть неплохие вещи типа ловли зажатия ctrl, alt, super. но вижу что уже где то зацепил старое поведение.

angel_il ★★★★★
()
Ответ на: комментарий от dataman

это я добавил для вставки нескольких строк через шифт-клик, видно спешить не стоило, буду тестить. так то у меня запускаются интеграционные тесты в докерах подо всё но видать нет покрытия такого кейса. Добавлю.

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

Честно говоря, не было времени сильно повозиться, может что и не заметил.

Из хелпа узнал, что нет условий видимости. Одно это ставило mc выше всех существующих файлменеджеров. Всё, что может быть ты сделаешь плагинами, делалось просто и на самом распространённом языке, а не на языке неведомых лунатиков.

Изменил синтаксис, ну ладно. Но экспорт, даже самый простой пункт меню приводит в состояние нечитаемой каши. А ручную правку он не понимает. Вот и полуается, ты почти его уничтожил. Нечто подобное в far2l. Всё приходится писать в одну строку. Но не всё возможно сделать одной строкой.

andytux ★★★★★
()
Ответ на: комментарий от andytux

про условия видимости я гляну, ухудшать в планах не было, хотел как раз улучшить UX чтобы можно было попроще добавлять в меню нужное прямо здесь и сейчас.

angel_il ★★★★★
()
Ответ на: комментарий от andytux

А ручную правку он не понимает.

можно отредактировать прямо из меню через f4 на нужном пункте

angel_il ★★★★★
()
Ответ на: комментарий от andytux

сделаю для однострочных вот такой формат

# One line: written right after "=", no quotes or escapes needed.
[Open in vim]
hotkey=v
on=file   <- показывать для тип "файл"
command=vim %f

для многострочных

# Several lines: put between ``` lines, the text stays as you typed it.
[Pack the directory into tar.gz]
hotkey=t
on=dir;file
command=```
echo -n "Archive name [%f]: "
read name
name=${name:-%f}
tar czf "$name.tar.gz" %f
echo "$name.tar.gz created"
angel_il ★★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от angel_il

На примере простейшего пункта.

В «старом стиле»:

+ x /usr/bin/inputattach & f ^dev$ | d ^/dev
= f ^ttyS
Attach com-mouse
  case %f in
    ttyS*) opt="%f";;
    *)	opt='ttyS0';;
  esac
  inputattach -ms /dev/${opt} &

Результат экспорта в «новый стиль»:

[ttach com-mouse]
hotkey=A
command=case %f in\nttyS*) opt="%f";;\n*)	opt='ttyS0';;\nesac\ninputattach -ms /dev/${opt} &
view=false
silent=false
andytux ★★★★★
()
Ответ на: комментарий от andytux

так я это еще не успел пофиксить (: пока сломано

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

фиксанул

Ещё бы обработку backspace в mcedit, как в coole. ;)
Я про нажатие на нулевой колонке.

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.