Scripting🔗

Definição. Execução de código Groovy com acesso à estrutura do mapa e à interface do Freeplane.

Diferença para fórmulas🔗

FórmulaScript
Onde viveNo nóEm arquivo ou console
DevolveUm valor exibidoNada, ou efeitos
Pode alterar o mapaNãoSim
Reavaliada sozinhaSimNão
Aparece no menuNãoSim, se instalado

Objetos de entrada🔗

  • node — o nó selecionado
  • c — o controlador
  • config — preferências

Operações de leitura🔗

As mesmas propriedades de node disponíveis em fórmulas.

Operações de escrita🔗

node.text = 'Novo texto'
node.createChild('Filho')
node.createChild(0, 'Primeiro filho')       // em posição
node.moveTo(outroNo)
node.moveTo(outroNo, 2)                     // como filho na posição 2
node.delete()

node['chave'] = 'valor'
node.attributes.remove('chave')

node.icons.add('button_ok')
node.icons.remove(0)

node.note = 'Texto da nota'
node.detail = 'Texto do detalhe'
node.link.text = 'https://exemplo.org'
node.style.name = 'Bloqueado'
node.folded = true

node.style.backgroundColorCode = '#ffcccc'
node.style.font.bold = true

O controlador c🔗

c.selected                 // nó atual
c.selecteds                // lista selecionada
c.select(no)               // muda a seleção
c.selectMultipleNodes(lista)
c.statusInfo = 'mensagem'  // barra de status
c.find { it.text.startsWith('TODO') }   // busca no mapa
c.newMap()                 // cria mapa
c.setZoom(1.5)
c.undoableActionFactory    // agrupar operações num único desfazer

Onde guardar🔗

~/.config/freeplane/1.11.x/scripts/          # Linux
%APPDATA%\Freeplane\1.11.x\scripts\          # Windows

Arquivos .groovy ali viram itens de menu em Ferramentas → Scripts após reiniciar. Sufixos no nome do arquivo controlam quando o script fica disponível — _on_single_node, _on_selected_nodes e variantes.

Atalhos de teclado se atribuem em Preferências → Atalhos, seção de scripts.

Permissões🔗

Separadas e concedidas em Preferências → Scripts:

PermissãoHabilita
Scripts sem assinaturaRodar scripts locais
Ler arquivosnew File(...).text
Escrever arquivosnew File(...).text = ...
Executar programas"comando".execute()
Acesso à redeRequisições HTTP

Um script tem os mesmos poderes que você no sistema. Conceda o mínimo.

Documentação da API🔗

Ferramentas → Scripts → Ajuda da API de scripting abre um mapa navegável com todas as classes e métodos da versão instalada. É a única referência confiável — nomes de método mudam entre versões, e tutoriais antigos enganam.

Desfazer🔗

Operações de script podem ser desfeitas com Ctrl+Z, mas não de forma confiável para tudo. Para agrupar várias mudanças num único passo de desfazer, use a fábrica de ações desfazíveis do controlador.

Na prática: teste em cópia.

Depuração🔗

println "valor: ${x}"           // saída do console de scripts
c.statusInfo = "chegou aqui"    // barra de status
ui.informationMessage("texto")  // diálogo

Exceções aparecem num diálogo com a pilha completa.

Erros comuns

  • Rodar script de terceiros com permissões amplas sem ler o código
  • Alterar o mapa em massa sem backup e sem testar num mapa de cópia
  • Escrever script para o que uma fórmula resolveria, e perder a reavaliação automática
  • Depender de node num script chamado sem seleção — nem todo modo de execução o define

Perguntas para reflexão

  1. Qual é o critério que separa fórmula de script?
  2. Cite três operações que só um script consegue fazer.
  3. Por que permissões de script são uma decisão de segurança e não de conveniência?
  4. O que você faria antes de rodar um script que altera muitos nós?

Artigos relacionados

Referências🔗

  1. Freeplane — O que são scripts
  2. Freeplane — Scripting basics
  3. Freeplane — Scripting API
  4. Freeplane — Security considerations