LINUX.ORG.RU

Не понимаю формата файла расширений MC

 , , ,


0

2

Имеется следующий общесистемный файл: /etc/mc/mc.ext

В нем есть такие строки:

### Images ###

type/^GIF
<------>Include=image

type/^JPEG
<------>View=%view{ascii} /usr/lib/mc/ext.d/image.sh view jpeg
<------>Include=image

type/^PC\ bitmap
<------>Include=image

type/^PNG
<------>Include=image

type/^JNG
<------>Include=image

type/^MNG
<------>Include=image

type/^TIFF
<------>Include=image

type/^PBM
<------>Include=image

type/^PGM
<------>Include=image

type/^PPM
<------>Include=image

type/^Netpbm
<------>Include=image

shell/.xcf
<------>Open=/usr/lib/mc/ext.d/image.sh open xcf

shell/.xbm
<------>Open=/usr/lib/mc/ext.d/image.sh open xbm

shell/.xpm
<------>Include=image
<------>View=/usr/lib/mc/ext.d/image.sh view xpm %f

shell/.ico
<------>Include=image

shell/i/.svg
<------>View=%view{ascii} /usr/lib/mc/ext.d/image.sh view svg
<------>Open=/usr/lib/mc/ext.d/image.sh open svg

Вопрос в том, что такое Include=image ? Как эта опция настраивает программу для просмотра и открытия картинки?

В самом файле есть ничего не говорящая подсказка:
keyword can be:
        include (matches an include directive)

Что такое include directive, откуда, куда, и что она подключает?

★★★★★

Ну вот у меня пример, только это в конце всей секции с include=video:

include/video
<------->Open=(mpv %f >/dev/null 2>&1 &)

И все видеоформаты смотрит через mpv.

Вам надо по типу этого создать, если хотите, для своего просмотровщика картинок. Понятно, что %f - это файл, по которому вы нажмёте «Enter».

Иначе будет смотреть тем, что по умолчанию в системе.

Mamluk
()
Последнее исправление: Mamluk (всего исправлений: 5)

На примере:

shell/.ico
<------>Include=image

Значит, включить сюда секцию «image». Эта секция почти в конце файла:

include/image
	Open=/usr/lib/mc/ext.d/image.sh open ALL_FORMATS
	View=%view{ascii} /usr/lib/mc/ext.d/image.sh view ALL_FORMATS

Open - команда выполняющаяся по нажатию «Enter».

View - команда выполняющаяся по нажатию «F3».

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

Ага, понятно.

Вот только кастомный include/image не работает для /etc/mc/mc.ext и MC запущенного под рутом. Для обычного пользователя работает. А под рутом показывает такое:

Error: no "view" rule for type "image/jpeg" passed its test case
(for more information, add "--debug=1" on the command line)

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

У меня тоже не работает под рутом.

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

Mamluk
()
Ответ на: комментарий от Xintrea

кастомный include/image не работает для /etc/mc/mc.ext и MC запущенного под рутом

У меня работает (под рутом, для /etc/mc/mc.ext), и Open, и View. Попробуй команду в суб-оболочку завернуть и/или в фон отправлять.

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

В справку загляни:

Файл расширений
Этот пункт меню "Команда" служит для вызова редактора и редактирования файла ~/.config/mc/mc.ext...

Как минимум понятно, что у каждого пользователя свой файл расширений. Смотри, что у тебя.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
7 августа 2022 г.
Ответ на: комментарий от andytux

Поскольку часто пользуюсь MC, надоело каждый раз запускать Иксовый файловый менеджер, чтобы посмотреть картинку, на которую «наступил» MC.

Поэтому тоже воспользовался здешними советами и добавил строки на открытие и просмотр для наиболее употребимых форматов изображения:

### Images ###

type/^GIF
        Include=image
        Open=/usr/lib/mc/ext.d/image.sh open ALL_FORMATS
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view ALL_FORMATS

type/^JPEG
        Include=image
        Open=/usr/lib/mc/ext.d/image.sh open ALL_FORMATS
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view ALL_FORMATS

type/^PNG
        Include=image
        Open=/usr/lib/mc/ext.d/image.sh open ALL_FORMATS
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view ALL_FORMATS
Результат получился более чем странным:
- файлы с расширения jpg, JPG, jpeg, JPEG по Enter открываются на ура, остальные - нет.
Зато иксовый ФМ, как и прежде, открывает все форматы.

Прям загадка какая-то :-o ... В чем же моя ошибка?
Просмотрщик GPicView, очень удобный.

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

добавил строки

Прально, давай всё в кучу валить. Авось заработает.

Либо Include (тогда команды надо писать в секции «Include/image»), либо Open/View. Поскольку Include идёт первым, то до этих Open/View дело не доходит.

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

Для обычного пользователя работает. А под рутом показывает такое

У каждого пользователя есть собственный mc.ext, который полностью перекрывает системный.

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

В общем, уже сказано. И подсказано еще раз.

«Include=image» - это вроде безусловного перехода на блок «image», который уже есть в конце файла. И если посмотреть его, то увидишь, что он делает абсолютно тоже, что ты добавил в свои «Open=…», «View=…» Нужно либо разбираться в скрипте «/usr/lib/mc/ext.d/image.sh». Например, там упоминаются «geeqie, gqview, zgv». Есть у тебя такие? А вот GPicView там нет. Либо правильно добавлять свою настройку, типа «Open=GPicView %f». Еще вариант, сделать через «user menu».

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

Нужно либо разбираться в скрипте «/usr/lib/mc/ext.d/image.sh». Например, там упоминаются «geeqie, gqview, zgv». Есть у тебя такие? А вот GPicView там нет.

Да, я смотрел этот скрипт, и в нем GPicView действительно отсутствует:

#!/bin/sh

# $1 - action
# $2 - type of file

action=$1
filetype=$2

[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"

do_view_action() {
    filetype=$1

    case "${filetype}" in
    jpeg)
        identify "${MC_EXT_FILENAME}"
        which exif >/dev/null 2>&1 && exif "${MC_EXT_FILENAME}" 2>/dev/null
        ;;
    xpm)
        sxpm "${MC_EXT_FILENAME}"
        ;;
    *)
        identify "${MC_EXT_FILENAME}"
        ;;
    esac
}

do_open_action() {
    filetype=$1

    case "${filetype}" in
    xbm)
        (bitmap "${MC_EXT_FILENAME}" &)
        ;;
    xcf)
        (gimp "${MC_EXT_FILENAME}" &)
        ;;
    svg)
        (inkscape "${MC_EXT_FILENAME}" &)
        ;;
    *)
        if [ -n "$DISPLAY" ]; then
            (see "${MC_EXT_FILENAME}" &)
        else
            (zgv "${MC_EXT_FILENAME}" &)
        fi
        ;;
    esac
}

case "${action}" in
view)
    do_view_action "${filetype}"
    ;;
open)
    ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
        do_open_action "${filetype}"
    ;;
*)
    ;;
esac


Но оказалось, что он и не нужен, потому что помог краткий, но эффективный совет от akk

У каждого пользователя есть собственный mc.ext, который полностью перекрывает системный.

Поэтому залез в пользовательский /home/user/.config/mc/chukcha и добавил к каждому блоку популярного расширения строку

        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view gif
Получился такой фрагмент конфига:
### Images ###

type/^GIF
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view gif

type/^JPEG
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view jpeg

type/^PNG
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view png

shell/.ico
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view ico

shell/i/.svg
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view svg
        Open=/usr/lib/mc/ext.d/image.sh open svg

type/^TIFF
        Include=image
        View=%view{ascii} /usr/lib/mc/ext.d/image.sh view png

Не знаю, насколько это правильно, но теперь под юзером при нажатии Enter все изображения открывается в просмотрщике, кроме *.ico , который открывается в GIMP'е.

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

Как обычно, не читая.

помог краткий, но эффективный совет от akk…

…который ровно через месяц повторил мой. И находится он в аккурат перед первым твоим сообщением, которое ссылается на него.

добавил к каждому блоку популярного расширения строку View=%view{ascii} /usr/lib/mc/ext.d/image.sh view gif…теперь под юзером при нажатии Enter…

Эта строка для «F3». Для «Enter» строка «Open=…». Про «Include=…» еще раз повторять не буду.

andytux ★★★★★
()