Co-gerenciadores são ótimos. Eles permitem que funcionalidades sejam adicionadas ao Linuxconf no exato lugar a que elas pertencem, ao invés de se adicionar novos sub-menus.
Um co-gerenciador é um componente que participa de um diálogo. Ele pode adicionar campos e validação. O caso mais comum é o diálogo de conta de usuário, onde vários co-gerenciadores participam. O mais visível deles é o módulo mailconf, que insere uma seção completa para manipular aliases de email. Um outro é o módulo pppdialin, o qual adiciona uma seção para lidar com parâmetros PPP.
Um co-gerenciador deve fornecer 4 funções:
Observe que os co-gerenciadores foram criados com contas de usuário em mente, mas o conceito é mais geral que isso. Troque "conta de usuário" acima por "registro" e você terá um retrato mais geral.
Linuxconf deve ser notificado que um co-gerenciador existe paa um determinado diálogo. Diálogos são identificados por uma pequena chave. Por exemplo, a chave para a conta do usuário é "user".
Um co-gerenciador shellmod deve fornecer quatro funções, utilizando o mesmo prefixo. Quando você registra o co-gerenciador, você deve fornecer o prefixo da função e a chave de diálogo. Isto é feito com a função register. Segue abaixo um exemplo:
# Registra como um co-gerenciador no diálogo de conta de usuário
echo comanager ufct user
O prefixo da função é ufct. Deve-se criar quatro funções de acordo com este prefixo:
Esta função é chamada durante a construção do diálogo. Você pode usar qualquer código de operação normalmente para definir um diálogo. Você não precisa definir o diálogo por você próprio (echo DIALOG) já que ele está definido implicitamente.
Enquanto você pode simplesmente adicionar campos no diálogo, algum geralmente definirá uma nova seção do diálogo. A menos que você faça isso, seu novo campo será anexado à seção atual, a qual pode ser qualquer seção.
Você define uma seção com o código de operação newf_title.
qecho newf_title "Listas de postagem" 1 - "Listas de postagem"
Esta função recebe todo o valor do campo (digitado pelo usuário). Cada campo corresponde a uma variável shell, de forma que você pode testar diretamente os valores delas. Você deve utilizar o código "retcode" para verificar se a validação foi bem-sucedida. Veja o exemplo a seguir:
echo retcode 0
Qualquer valor diferente de 0 é tomado como uma falha na validação. Qualquer erro deve ser reportado com o código de operação "error". Você também pode usar "setcurfield" para saltar a um campo específico.
if [ "$a1" = "válida" ] ; then
echo retcode 0
else
echo setcurfield a1
echo retcode -1
echo error \"sample.sh: Valor inválido, entre com a palavra válida\"
fi
Todos os valores dos campos são retornados ao seu script como variáveis shell. A função save deve fazer várias coisas com as informações. Ela pode tanto salvar em um arquivo, ou executar algumas ações (enviar um mail a um administrador sobre as mudanças necessárias, por exemplo).
Outras variáveis shell também contém informações relacionadas a este diálogo (veja abaixo o contexto do diálogo).
O nome desta função é um tanto ambígüo. Significa que o registro deve ser apagado (em geral, uma conta de usuário). Você deve usar a informação a partir do contexto do diálogo (veja abaixo) para executar o apagamento desejado.
Um co-gerenciador manipula uma parte de um grande diálogo. Para gerenciar propriamente sua parte, o co-gerenciador deve conhecer outras informações sobre o diálogo atual. Por exemplo, para aprimorar o diálogo de conta de usuário, deve-se conhecer a conta do usuário (identificação do usuário) sendo editada bem como o domínio (é uma conta de usuário de domínio virtual de mail?).
Esta informação extra é passada como variáveis shell, prontamente utilizáveis. A informação disponível é dependente de diálogos. Para co-gerenciadores de contas de usuários, as seguintes variáveis são fornecidas:
É passado o domínio de mail virtual. Para o domínio principal, esta variável é configurada para /.
Isto é um flag que mostra a você se esta é uma nova conta (o nome está vazio) ou não.
Esta é a identificação de usuário.
Uma forma de aprender as informações disponíveis para seu script é executá-lo em modo de depuração sob o Linuxconf. Você pode ativar este modo a partir da interface de usuário do Linuxconf, no controle de sistema e arquivos/gerenciamento de módulos shell/configuração do shellmod.