Sammanhangsberoende insticksprogram

Hittills har vi antagit att alla insticksprogram alltid är meningsfulla, och alla placerade i huvudmenyn. Dock är vissa insticksprogram bara (eller mer) meningsfulla i vissa sammanhang. Exempelvis är ett insticksprogram för att exportera innehållet i en R X11-grafikenhet uppenbarligen mest användbar när den är placerad i menyn för en X11-enhet, inte i huvudmenyraden. Dessutom bör ett sådant insticksprogram känna till enhetsnumret som den ska arbeta med, utan att behöva fråga användaren om det.

Vi kallar sådana insticksprogram sammanhangsberoende. På motsvarande sätt är de inte (eller inte bara) placerade i huvudhierarkin i .pluginmap-filen med <hierarchy>, utan istället i elementet <context>. Hittills stöds bara två olika sammanhang (fler kommer senare): x11 och filimport. Vi hanterar dem i tur och ordning. Även om du bara är intresserad av importsammanhanget, läs också gärna avsnittet om x11-sammanhanget, eftersom det är något mer utvecklat.

X11-enhetssammanhang

För att använda ett insticksprogram i sammanhang med en x11-enhet, det vill säga placera det i menyraden för fönstret som man får när x11() anropas i terminalen, deklarera det först som vanligt i filen .pluginmap:

<document [...]>
        <components>
                [...]
                <component id="my_x11_plugin" file="my_x11_plugin.xml" label="An X11 context plugin"/>
                [...]
        </components>
                

Dock behövs det inte definieras i hierarkin (det går, om det också är meningsfullt som ett insticksprogram på toppnivå):

<hierarchy>
                [...]
        </hierarchy>
                

Lägg istället till en definition av sammanhanget "x11", och lägg till det i menyn där:

<context id="x11">
                [...]
                <menu id="edit">
                        [...]
                        <entry id="my_x11_plugin"/>
                </menu>
        </context>
</document>
                

I insticksprogrammets XML-sektion logic, kan nu två egenskaper deklareras med <external>: devnum och context (om deklarerad) sätts till "x11" när insticksprogrammet startas i det sammanhanget. devnum sätts till grafikenhetens nummer som ska arbetas med. Och det är allt.

Importdatasammanhang

Innan du läser det här avsnittet, se till att du har läst avsnittet om X11-enhetssammanhang, eftersom det förklarar grundkoncepten.

Sammanhanget "import" används för att deklarera filterinsticksprogram för importfiler. De placeras helt enkelt i ett sammanhang med id="import" i .pluginmap-filen. Dock finns det en extra knepighet när sådana insticksprogram deklareras: För att erbjuda en enhetlig filvalsdialogruta för alla filtyper som stöds, måste en del extra information deklareras för komponenten:

<document [...]>
        <components>
                [...]
                <component id="my_xyz_import_plugin" file="my_xyz_import_plugin.xml" label="Import XYZ files">
                        <attribute id="format" value="*.xyz *.zyx" label="XYZ data files"/>
                </component>
                [...]
        </components>
        <hierarchy>
                [...]
        </hierarchy>
        <context id="import">
                [...]
                <menu id="import">
                        [...]
                        <entry id="my_xyz_import_plugin"/>
                </menu>
        </context>
        [...]
</document>
                

Egenskapslinjen talar helt enkelt om att de tillhörande filnamnsändelserna för XYZ-filer är *.xyz eller *.zyx, och att filtret ska namnges XYZ data files i filvalsdialogrutan.

Du kan deklarerar två egenskaper med <external> i insticksprogrammet. filename sätts till den valda filens namn, och context sätts till "import".