Até agora, presumimos que todos os plugins são sempre relevantes e estão localizados no menu principal. No entanto, alguns plugins só fazem sentido (ou adicionalmente) em um determinado contexto. Por exemplo, um plugin para exportar o conteúdo de um dispositivo gráfico X11 é obviamente mais útil quando localizado no menu de um dispositivo X11, e não na barra de menus principal. Além disso, esse plugin deve saber o número do dispositivo em que deve operar, sem precisar perguntar ao usuário sobre isso.
Chamamos esses plugins de dependentes de contexto. Consequentemente, no arquivo .pluginmap, eles não são (ou não apenas) colocados na <hierarchy> de comandos principal, mas sim em um elemento <context>. Até o momento, apenas dois contextos diferentes são suportados (mais serão adicionados posteriormente): x11 e importação de arquivos. Abordaremos esses contextos em sequência. Mesmo que você esteja interessado apenas no contexto de importação, leia também a seção sobre o contexto x11, pois este é um pouco mais detalhado.
Para usar um plugin no contexto de um dispositivo x11 - isto é, colocá-lo na barra de menus da janela que aparece quando você chama x11() no console, primeiro declare-o como de costume no arquivo .pluginmap:
<document [...]>
<components>
[...]
<component id="meu_plugin__x11" file="meu_plugin_x11.xml" label="Um plugin de contexto X11"/>
[...]
</components>
No entanto, você não precisa defini-lo na hierarquia (você pode, se também fizer sentido como um plugin de nível superior):
<hierarchy>
[...]
</hierarchy>
Em vez disso, adicione uma definição do contexto "x11" e adicione-a aos menus aqui:
<context id="x11">
[...]
<menu id="edit">
[...]
<entry id="meu_plugin_X11"/>
</menu>
</context>
</document>
Na seção logic do XML do plugin, você pode declarar duas propriedades <external>: devnum e context. context (se declarado) será definido como "x11" quando o plugin for invocado neste contexto. devnum será definido como o número do dispositivo gráfico no qual operar. E isso é tudo.
Antes de ler esta seção, certifique-se de ler a seção sobre o Contexto do dispositivo X11, pois ela explica os conceitos básicos.
O contexto "import" é usado para declarar plugins de filtro de importação de arquivos. Você simplesmente os coloca em um contexto com id=""import" no arquivo .pluginmap. No entanto, há um detalhe adicional ao declarar esses plugins: para oferecer uma caixa de diálogo de seleção de arquivos unificada para todos os tipos de arquivo suportados, você precisa declarar uma informação adicional em seu componente:
<document [...]>
<components>
[...]
<component id="meu_plugin_importar_xyz" file="meu_plugin_importar_xyz.xml" label="Importar arquivos XYZ">
<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>
A linha de atributo simplesmente diz que as extensões de nome de arquivo associadas para os arquivos XYZ são *.xyz ou *.zyx, e que o filtro deve ser rotulado como “Arquivos de dados XYZ” na caixa de diálogo de seleção de arquivos.
Você pode declarar duas propriedades <external> em seu plugin. filename será definido com o nome do arquivo selecionado e context será definido com "import".