O que você vai aprender

  • Executar um script no Freeplane e ver o resultado
  • Conhecer a API de nós, mapas e interface
  • Guardar scripts para aparecerem no menu, com atalho
  • Configurar permissões com segurança

Antes de começar

  • Fórmulas
  • Alguma familiaridade com programação; Groovy é próximo de Java e de Python em legibilidade

Scripting em Groovy🔗

Fórmulas calculam o conteúdo de um nó. Scripts fazem qualquer coisa: criar nós, reorganizar ramos, ler arquivos, gerar relatórios, falar com uma API.

O Freeplane roda em Java e embute o Groovy, uma linguagem que compila para a JVM e tem sintaxe leve. Você não precisa saber Java — só entender que o código tem acesso à mesma estrutura que a interface manipula.

Habilitando🔗

Ferramentas → Preferências → Scripts. Há um conjunto de permissões separadas:

PermissãoConcede
Executar scripts sem assinaturaRodar scripts que você mesmo escreveu
Ler arquivosAbrir arquivos do disco
Escrever arquivosGravar no disco
Executar outros aplicativosChamar programas do sistema
Acesso à redeFazer requisições HTTP

Conceda o mínimo de que precisa. Um script pode fazer tudo o que você pode fazer no computador, e mapas circulam.

Um .mm pode conter fórmulas e scripts que rodam ao abrir. Trate mapas de origem desconhecida com o mesmo cuidado que trataria uma planilha com macros.

Executando um script🔗

O caminho rápido é o console de scripts: Ferramentas → Scripts → Editor de scripts (ou o console interativo, conforme a versão). Escreva, execute, veja a saída.

Um primeiro script:

def total = node.map.root.branch.size()
c.statusInfo = "O mapa tem ${total} nós"

c é o objeto de controlador — ele fala com a interface. node é o nó selecionado. node.map é o mapa.

Os três objetos de entrada🔗

ObjetoÉ
nodeO nó selecionado (ou aquele em que a fórmula está)
cO controlador: seleção, mensagens, diálogos, zoom
configPreferências e propriedades do Freeplane

Com c você chega a:

c.selecteds          // lista dos nós selecionados
c.selected           // o nó atual
c.select(algumNo)    // muda a seleção
c.statusInfo = "..." // mensagem na barra de status
c.find { ... }       // busca no mapa

Manipulando nós🔗

Criar, mover, editar:

def novo = node.createChild('Nova tarefa')
novo['responsável'] = 'Ana'
novo['prazo'] = '2026-09-15'
novo.icons.add('button_cancel')
novo.note = 'Criado por script'
novo.style.name = 'Bloqueado'

Percorrer:

node.branch.each { n ->
    if (n.text.startsWith('TODO')) {
        n.icons.add('help')
    }
}

Apagar:

node.children.findAll { it.text.isEmpty() }*.delete()

Scripts úteis de verdade🔗

Marcar como concluído tudo que está selecionado:

c.selecteds.each {
    it.icons.add('button_ok')
    it.style.name = 'Concluído'
}

Numerar os filhos de um nó:

node.children.eachWithIndex { n, i ->
    n.text = "${i + 1}. ${n.text.replaceFirst(/^\d+\.\s*/, '')}"
}

Ordenar filhos alfabeticamente:

def ordenados = node.children.sort { it.text }
ordenados.each { it.moveTo(node, ordenados.indexOf(it)) }

Exportar o ramo para CSV:

def linhas = ['texto;responsável;prazo;custo']
node.branch.each { n ->
    linhas << "${n.text};${n['responsável']};${n['prazo']};${n['custo']}"
}
new File('/tmp/relatorio.csv').text = linhas.join('\n')
c.statusInfo = "${linhas.size() - 1} linhas gravadas"

Esse último exige a permissão de escrita em arquivos.

Criar nós a partir de um texto colado:

def texto = java.awt.Toolkit.defaultToolkit.systemClipboard
        .getData(java.awt.datatransfer.DataFlavor.stringFlavor)
texto.split('\n').findAll { it.trim() }.each {
    node.createChild(it.trim())
}

Guardando scripts no menu🔗

Scripts avulsos no console são bons para experimentar. Para uso repetido, grave-os como arquivos .groovy em:

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

Reinicie o Freeplane e eles aparecem em Ferramentas → Scripts. O nome do arquivo vira o nome do item de menu, com convenções:

  • MeuScript.groovy → item “Meu Script”
  • Um sufixo de modo (_on_single_node, _on_selected_nodes) controla quando o script fica disponível.

Atalhos de teclado podem ser atribuídos em Preferências → Atalhos, na seção de scripts.

Depurando🔗

  • c.statusInfo = "..." para mensagens rápidas na barra de status.
  • println escreve na saída do console de scripts.
  • Exceções aparecem num diálogo com a pilha completa.
  • Rode em um mapa de teste antes de soltar num mapa de verdade. Scripts não têm desfazer confiável em todas as operações — Ctrl+Z funciona para muitas, mas não conte com isso.

Onde aprender mais🔗

  • A API do Freeplane está documentada em Ferramentas → Scripts → Ajuda da API de scripts, que abre um mapa navegável com todas as classes e métodos.
  • O wiki oficial mantém uma coleção de scripts prontos.
  • Add-ons são, em boa medida, scripts empacotados — ler o código de um add-on é uma boa forma de aprender.

Erros comuns

  • Conceder todas as permissões e depois abrir mapas de origem desconhecida
  • Rodar um script destrutivo no mapa real sem ter testado numa cópia
  • Contar com Ctrl+Z para desfazer o que um script fez em massa
  • Escrever fórmulas gigantes nos nós em vez de scripts guardados e reutilizáveis

Na prática🔗

  1. Habilite scripts sem assinatura, e só isso.
  2. No console, rode o script que conta os nós do mapa.
  3. Escreva um script que marque com ícone todo nó cujo texto comece com TODO.
  4. Salve-o como MarcarTodos.groovy no diretório de scripts.
  5. Reinicie e confirme que ele aparece no menu.
  6. Atribua um atalho de teclado.

Você aprendeu

  • node, c e config são os pontos de entrada da API
  • Permissões são separadas; conceda o mínimo necessário
  • Scripts em ~/.config/freeplane/&lt;versão&gt;/scripts/ viram itens de menu com atalho
  • Teste em cópia: o desfazer de operações em massa não é confiável

Perguntas para reflexão

  1. Quais são os três pontos de entrada da API, e o que cada um dá acesso?
  2. Por que as permissões são separadas, e qual é a política recomendada?
  3. Onde ficam os scripts que viram itens de menu?
  4. Por que testar em cópia é regra ao operar em massa?

Artigos relacionados

Referências🔗

  1. Freeplane — Scripting: start here
  2. Freeplane — Scripting basics
  3. Freeplane — Scripting API
  4. Freeplane — Scripting cheatsheet
  5. Apache Groovy — documentação