id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking	branch_state	votes
2965	The ext.d/*sh construction to open a file from MC is overcomplicated	covex		"I am somehow missing the reasoning for the existing way of opening files from mc.

Now we do not have only mc.ext with the definitions of actions, which is system wide configurable in /etc/mc/mc.ext, but we also have a shell constructions in /usr/libexec/mc/ext.d, which is not configurable anymore. The purpose is probably only to select either some app or xdg-open for an open action. 

Setting the MC_XDG_OPEN=false makes no sense as the app to open the file is only present in ext.d/*.sh file, which you should not change, so you have to change the mc.ext anyway.

This makes the process of file opening slow as many shell script code needs to be interpreted to get as simple thing as file open in desired app and pain to understand what is going on as the xdg-open itself is quite complicated - it uses either /usr/share/application/default.list or ~/.local/share/applications/mimeapps.list


Let's see the mc.ext e.g. for images:

{{{
type/^PBM
        Include=image
        
type/^PGM
        Include=image
        
type/^PPM
        Include=image
        
type/^Netpbm
        Include=image
        
shell/.xcf
        Open=/usr/libexec/mc/ext.d/image.sh open xcf
        
shell/.xbm
        Open=/usr/libexec/mc/ext.d/image.sh open xbm
        
shell/i/.svg
        View=%view{ascii} /usr/libexec/mc/ext.d/image.sh view svg
        Open=/usr/libexec/mc/ext.d/image.sh open svg

include/image
        Open=/usr/libexec/mc/ext.d/image.sh open ALL_FORMATS
        View=%view{ascii} /usr/libexec/mc/ext.d/image.sh view ALL_FORMATS
}}}

here we see we can simply share the common app thru include, no need for another image.sh.

Now what is in image.sh?

{{{
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
            (gqview ""${MC_EXT_FILENAME}"" &)
        elif see >/dev/null 2>&1; then
            (see ""${MC_EXT_FILENAME}"" &)
        else
            zgv ""${MC_EXT_FILENAME}""
        fi
        ;;
    esac
}
}}}

It just acts on the same kind of file type but thru a shell case construction and hardcodes the apps that should be used. If xdg-open is used, then it starts another shell script, that based on the file type (again) uses the default app from either system wide unconfigurable setting or local user definition.


Overall this all is a mess. Please keep this as simple as possible. If you want to relay on xdg-open, just use xdg-open in the mc.ext and let user simply reconfigure it instead of digging around another shell scripts.

"	defect	closed	minor		mc-core	4.8.7	wontfix		gotar@…			no branch	
