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)
Ответ на: комментарий от yars068

тут все просто

  1. You can set clipboard_store in ~/.config/mc/ini like this:

clipboard_store=perl -MMIME::Base64 -0777 -ne ‘print chr(27), «]52;c;», encode_base64($_, ""), chr(27), chr(92)’

it works well for me without X11

что там происходит, перл конвертит входящий поток строковый в base64 а дальше через ESC ] 5 2 ; c ; ESC оно направляется в клипборд.

реализация OCS52 есть почти везде кроме vte и гном терминала, который построен на vte.

clipboard_store это экшен который я делал в 2007 году как рад для передачи данных через xclip, но как оказалось оно работает и без Иксов.

  1. в mcedit есть меню Edit -> Copy to clipfile Ctrl-Ins который текущее выделение отправляет в ~/.local/share/mc/mcedit/mcedit.clip хоткей нужно повесить в mc.keymap на действие Store у меня это Ctrl-Ins

таким образом если извне я вставляю по Шифт+правая клавиша мыши а если нужно текст в общий клипборд то нажимаю Ctrl-Ins, оно вставляет в mcedit.clip + отправляет через clipboard_store в глобальный клипборд

про OCS52 можно глянуть тут https://github.com/MidnightCommander/mc/issues/4458

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

Добавить нужный код. :)

прикол в том что нет

angel_il ★★★★★
()

Добавлена поддержка Lua! LUA_PLUGINS.md:

Midnight Commander can load optional Lua 5.3+ support. Lua is not linked into the mc executable: mc-lua.so is a runtime extension loaded through dlopen only when it is available and enabled. That extension discovers and runs Lua scripts.

Build it with:

./configure --enable-lua-plugin=yes --with-lua=PREFIX
make

LUA_API_REFERENCE.md.

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

бага с отображением неюникодных символов в mcedit в mc6 исправлена, или как и было в оригинале?

Последний mc, где эта бага легко правится это 4.8.13, им и пользуюсь. Там:

--- a/lib/util.c        2014-09-04 11:39:18.000000000 +0400
+++ b/lib/util.c        2015-02-10 20:50:53.000000000 +0300
@@ -98,10 +98,11 @@
 is_8bit_printable (unsigned char c)
 {
     /* "Full 8 bits output" doesn't work on xterm */
-    if (mc_global.tty.xterm_flag)
+/*    if (mc_global.tty.xterm_flag)
         return is_iso_printable (c);
 
-    return (c > 31 && c != 127 && c != 155);
+        return (c > 31 && c != 127 && c != 155);*/
+    return (c > 31);
 }

Фраза про неработоспособность в xterm устарела где-то на четверть века. С правильной настройкой xterm всё показывает. В последующих версиях mc так усердно впихивали поддержку юникода что поломали отображение однобайтных кодировок и вот так просто его уже не починить, во всяком случае у меня не хватило терпения разобраться где надо править.

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

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

отображение mc в разных локалях с разными сочетаниями LANG и LC) я начинал свое активное участие в команде году в 2007

Большое вам спасибо за ваш труд! Много и активно использую эту возможность. К примеру при запуске mc внутри радиомодема (через ssh или telnet) естественно никакого юникода там нет, только однобайтная кодировка. И нет, про радиомодем это вовсе не шутка. Можно даже внутри huawei e3372 запустить, не говоря о более продвинутых. А более удобного способа ковыряться во внутренностях файловой системы модема я не знаю. К всяким другим одноплатным компам на линуксе всё сказанное тоже относится.

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

И ещё вопрос: бага с отображением неюникодных символов в mcedit в mc6 исправлена, или как и было в оригинале?

В mcedit сломались неюникодные кодировки

фиксанул вот тут https://github.com/ilia-maslakov/mcdev/pull/165

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

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

мой поинт выбрасывание всего без чего mc может обойтись в плагины, почти ничего из того что нужно на обычной машине на роутере нафиг не сдалось, поэтому, многие вещи ушли в плагины.

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

Последний mc, где эта бага легко правится это 4.8.13, им и пользуюсь.

Там:

фиксанул тут https://github.com/ilia-maslakov/mcdev/pull/166

основная правка это

static gboolean
mcview_isprint (const WView *view, int c)
{
    if (mc_global.utf8_display)
    {
        if (!view->utf8)
            c = convert_from_8bit_to_utf_c ((unsigned char) c, view->converter);
        return g_unichar_isprint (c);
    }

    if (view->utf8)
        return g_unichar_isprint (c);

    // On an 8-bit display, the conversion table returns a display byte, not a Unicode code point.
    return is_printable (convert_to_display_c (c));
}
angel_il ★★★★★
()
Ответ на: комментарий от angel_il

фиксанул тут

Вы круты однако! Всего за несколько часов найти и исправить нужное место. Я когда-то целый день потратил, правда я тогда первый раз вообще исходники mc увидел.

// On an 8-bit display, the conversion table returns a display byte, not a Unicode code point.
    return is_printable (convert_to_display_c (c));

То, что при запуске mc в «однобайтовой» локали он будет понимать что не надо юникод пытаться выводить - это безусловно хорошо. Отдельный вопрос - какие байты он будет считать printable. А то вон как выше я указывал на кусок кода - раньше он считал что в xterm невозможно вывести большую часть второй половины ascii таблицы и заменял эти символы на точки. Из-за чего невозможно было просматривать например текст в 866 кодировке, а набранных в MS DOS текстов еще очень много сохранилось. По факту на точки заменять надо только коды символов меньше «пробела» потому что попытка их вывода может «испортить» терминал. Всё остальное от 0х20 и до 0хFF вполне способно печататься при выборе соответствующего шрифта где эти символы на этих местах есть. В комплекте дебиана кстати такой шрифт есть -dosemu-vga-medium-r-normal-*-20-200-75-75-c-100-ibm-cp866 С ним реально можно запустить чуть исправленный (см.выше) mc 4.8.13 в досовской кодировке и он будет выглядеть малоотличимо от старого «нортона». Правда в terminfo надо коды рамок еще подправить чтобы они правильно рисовались.

Попробовать что ли собрать на своей машине минимальную конфигурацию вашего варианта mc и посмотреть как он в 866 кодировке [не]заработает? Даже интересно стало. Закончу заготовку дров на зиму - надо будет заняться.

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

буду признателен за тест, но если что я собирал и в докере проверил на русских 8-бит локалях. Но мог что то и пропустить

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

Несмотря на то что сегодня опять пол-дня махал электропилой заготавливая дрова на зиму, не поленился хотябы попробовать собрать https://github.com/ilia-maslakov/mcdev/

autogen и configure отработали, при компиляции было некоторое количество предупреждений, но не ошибки. А вот линкер выдал ошибку:

/usr/bin/ld: ./.libs/libinternal.a(runtime-host.o): in function `runtime_host_editor_edit':
/home/watchcat/src/mcdev/src/runtime-host.c:958: undefined reference to `g_memdup2'

При этом:

libglib2.0-dev is already the newest version (2.66.8-1+deb11u8)

Сейчас уже глаза закрываются, разбираться не в состоянии. Может надо было что-то из дополнительных возможностей в configure выключить? Я пока без параметров запускал, чисто попробовать соберется ли на Дебиан-11. Например после того как отработало configure заметил что включена ненужная мне поддержка спеллчекера в редакторе - я не собираюсь в нем высокохудожественные тексты писать:)

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

А нет в планах инкрементального фильтра в панелях?

Спасибо за фильтр, и как я раньше без него жил! :)

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

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

Пытаюсь к нему привыкнуть, но пока плохо получается.
Хотелось бы:

  • выделение слова по двойному клику мышью. Во многих ЭТ есть параметр границ слов. Например, в Wezterm это selection_word_boundary = " ><|$#@^&*!={}[]()\"'\\`,;". Вот типа такого.
  • очистка экрана по Ctrl-L во время выполнения программ, если это возможно.
dataman ★★★★★
() автор топика

переработанная поддержка архивов на базе libarchive

При входе в некоторые архивы с вложенными директориями курсор переходит не на «..», а на второй (или одноимённый?) файл.
Например в архиве tsetup.7.1.2.tar.xz при входе в директорию Telegram курсор переходит на бинарник Telegram.

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

чекну его , хотел как раз подчистить всякое перед релизом. собрал ферму докеров чтобы они все во всем погоняли.

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

/usr/bin/ld: ./.libs/libinternal.a(runtime-host.o): in function `runtime_host_editor_edit’:

/home/watchcat/src/mcdev/src/runtime-host.c:958: undefined reference to `g_memdup2

мой косяк, вечером фиксану, так то я заявляю GLib 2.58 а в src/lua/mc-lua.c есть вызов g_memdup2(), которая появилась только в 2.68.

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

Я пока без параметров запускал, чисто попробовать соберется ли на Дебиан-11. Например после того как отработало configure заметил что включена ненужная мне поддержка спеллчекера в редакторе - я не собираюсь в нем высокохудожественные тексты писать:)

даже если собралось со спелчекером, его можно отключить в меню плагином вырубить и он не будет подгружаться, у меня вот так

[x] │mcedit  │scripts       │Scripts
[x] │mcedit  │spell         │Spell
[x] │mcedit  │ctags         │&Ctags...
[ ] │mcedit  │mail          │(disabled, not loaded)
[ ] │mcedit  │etags         │(disabled, not loaded)
[ ] │panel   │hello         │(disabled, not loaded)
angel_il ★★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от dataman

очистка экрана по Ctrl-L во время выполнения программ, если это возможно.

Ctrl-L чистит только видимую часть или вообще весь вывод который выше за скролом?

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

Терминалы разные бывают, где-то 80-9F тоже спецсимволы. В опенбсд 10 лет назад столкнулся с такой проблемой в ядерной консоли, как сейчас не знаю.

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

Спасибо! (утром попробую, а то эл-ва уже час нет).

Пока основное неудобство mcterm в том, что в нём не работают утилиты показа изображений, использующие протоколы sixel/iterm2/kitty.

Кстати, а как теперь просматривать свойства изображений? Теперь же lua-скрипт их перехватывает и показывает, вызывая chafa.

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

Пока основное неудобство mcterm в том, что в нём не работают утилиты показа изображений, использующие протоколы sixel/iterm2/kitty.

вьювер их показывает

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

Когда я смотрел в последний раз, chafa в скрипте использовала символы, это ужасно выглядит.

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

Кстати, а как теперь просматривать свойства изображений?

могу поверх картинки напечатать свойства которые раньше показывались

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

и мало терминалов умеют sixel

По-моему, больше 10. :)
Кстати! Я когда-то предлагал добавить в MC поддержку termbox2, помимо slang и ncurses. Они отказались, мол, лучше будут использовать https://notcurses.com. Но вроде никаких шевелений на эту тему не было.
А было бы круто! :)

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

так то я заявляю GLib 2.58

А в mc есть что-то такое для чего критична именно эта версия GLib или это сделано ради одной единственной простой функции, аналог которой в GLib был и до этого только с немножко другими типами аргументов? Если только ради нее - то имеет смысл переделать так чтобы собиралось с возможно более широким диапазоном версий Glib.

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

А если в быстром просмотре по Ctrl-Q?

работает конечно

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

даже если собралось со спелчекером, его можно отключить

Это очень хорошо. Еще бы хорошо если они и при сборке по умолчанию не будет подключаться. Ибо mc собирают нередко в такие места где не то что спелчекера, там русского языка нет. Примерно все одноплатники и встроенные во всякие девайсы SoC, про mc внутри радиомодема я уже писал. Кстати, старый mc(до 4.8.13) если его собрать в статический бинарник под ARMv7 (armhf в дебиане) и скопировать внутрь андроидного планшета или смартфона с таким процом - потом можно запустить и пользоваться если зайти туда по сети через ssh. Сомневаюсь что авторы mc догадывались о возможности такого применения. А ковырять внутренности прошивки девайса резко становится очень намного удобнее чем постоянно дрочить ls и cd. Да, я понимаю что это применение незаконное так как прошивки проприетарные и реверсить их нельзя, но и я и некоторые другие люди это делают.

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

первое под что я пилил мс был роутер wl500 с прошивкой олега, как раз там и не будет грузится плагин если его не собрать или не поставить. но например sftp или ssh-link (fish) на таких шелезках удобно иметь.

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

Сомневаюсь что авторы mc догадывались о возможности такого применения.

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

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

Терминалы разные бывают, где-то 80-9F тоже спецсимволы.

Да, бывает, хотя и очень редко. Очевидно что на таких терминалах невозможно использовать русскую кодировку cp866, придется использовать какую-нибудь другую. Если там вообще будет нужен русский. Но тупо резать эти символы в прикладной софтине только потому что где-то когда-то они не выводились - это неправильно. Мы же не пишем транслитом только потому что где-то есть компы, не отображающие русский язык вообще. Хотя таких очень намного больше на этом глобусе чем тех которые русский понимают.

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

основное неудобство mcterm в том, что в нём не работают утилиты показа изображений

Чего только в жизни не бывает! Оказывается есть те кто смотрит изображения в текстовом терминале, а не GUI-программой-смотрелкой картинок. Я несмотря на 35 лет за компом - не додумался бы так делать. Уточню что именно «не додумался», а не осуждаю как-либо.

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

предлагал добавить в MC поддержку termbox2, помимо slang и ncurses.

да там и шлангу с курсами километр заморочек было, представь что сложность зоопарка всяких вариаций и так растет экспоненциально и плюсом добавляется еще одно изменение, это же все приходится оттестить перед выпуском, как ребята там сейчас тестят я не знаю но когда я был еще в команде, мне приходилось, проверять на фре, соляре разных фракций, arm и mips, убунту (и производные демьяна), слаку, еще пара дистров. это все умножаем на 2 т.к. шанг и курсы и еще умножаем на с сабшелом и без и еще с 8 бит кодировкой и utf-8. и это утомительно. сейчас кое что в докере можно чекнуть, а раньше все руками.

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

mc есть что-то такое для чего критична именно эта версия GLib или это сделано ради одной единственной простой функции, аналог которой в GLib

так ей 8 лет уже, как той что до нее была ей лет 12. зачем так жить?! )

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

Оказывается есть те кто смотрит изображения в текстовом терминале

Ну а где ещё? :)

Я несмотря на 35 лет за компом - не додумался бы так делать.

Sixel был придуман в конце 80-х. :)

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

первое под что я пилил мс был роутер wl500 с прошивкой олега,

Рад встретить понимающего единомышленника.

например sftp или ssh-link (fish) на таких шелезках удобно иметь

Сам я исторически привык с копированию через scp, но да, вы правы.

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

зачем так жить?!

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

ей лет 12

Это не много. Есть хороший софт из 90х который собирается по сей день даже почти без предупреждений. Кстати, mc тоже можно к нему отнести - кроме этого единственного ляпа всё ведь нормально собралось.

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

Ну а где ещё?

В программе-смотрелке картинок. Их много разных, сам я последние годы пользуюсь phototonic.

Sixel был придуман в конце 80-х.

Я был уверен что он как и прочие VT после VT100 там в тех железных терминалах и остались. Не подозревал что кто-то написал их эмуляцию для линукса.

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

Не подозревал что кто-то написал их эмуляцию для линукса.

Вот когда добавили в xterm:

Patch #294 - 2013/07/05
...
* add configure option --enable-sixel-graphics
* add experimental support for sixel graphics (Ross Combs).
dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Вот когда добавили в xterm:

Вот я и не понимаю зачем оно там вообще. xterm по определению запускается под иксами, под ними же можно запустить и любую смотрелку картинок. Единственное что приходит в голову что кто-то подключался к каким-то жутко древним компам, которые выдавали графику в этом формате, и потребовалось средство эмуляции таких терминалов. Зачем оно в отсутствии такой проблемы - лично мне так и не понятно. Буду продолжать использовать смотрелки картинок. На крайний случай, jpeg и png (и даже может быть что-то еще) может показать любой браузер который сейчас есть на почти каждом компе.

watchcat382 ★★
()

Такая неприятность:

  • [x] Auto save setup
  • [x] Auto save panels setup
  • на обеих панелях разные пути, активна левая
  • выходим по F10
  • запускаем mc
  • на обеих панелях — сохранённые пути, активна левая
  • два раза нажимаем Ctrl-O
  • теперь активна правая панель с тем же путём, что и на левой.
dataman ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

А можно вместо $HOME/.mc6 в $HOME/.config/mc6 ?

это наверное буде правильно, принято.

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

теперь активна правая панель с тем же путём, что и на левой.

фиксану

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

Уточню что именно «не додумался», а не осуждаю как-либо.

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

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