Skip to content

Skrypty ​

openpencil eval wykonuje JavaScript dla dokumentu 4B Pen i udostępnia globalny obiekt figma zgodny z Figma Plugin API. Polecenie nadaje się do zmian zbiorczych, sprawdzania dokumentów, przygotowywania danych testowych i automatyzacji bez interfejsu edytora.

Pierwsze wywołanie ​

sh
openpencil eval design.fig -c "return figma.currentPage.children.length"

Opcja -c przyjmuje JavaScript. Jeśli kod nie zaczyna się od return, 4B Pen umieszcza go w funkcji asynchronicznej i zwraca jej wynik, jeśli istnieje.

Wyszukiwanie obiektów ​

sh
openpencil eval design.fig -c "
  return figma.currentPage
    .findAll((node) => node.type === 'FRAME' && node.name.includes('Button'))
    .map((button) => ({ id: button.id, name: button.name }))
"

Zmiana i zapis ​

--write albo -w zapisuje zmiany w pliku wejściowym. --output albo -o tworzy nowy plik.

Skrypt ze standardowego wejścia ​

sh
cat transform.js | openpencil eval design.fig --stdin --write

Otwarta aplikacja ​

Nie podawaj pliku, aby wykonać skrypt dla bieżącego dokumentu w aplikacji komputerowej.

Wyjście ​

Po przekierowaniu wyjścia domyślnie używany jest JSON. Opcja --json włącza go jawnie, a --quiet wyłącza wyjście.

Dostępne API ​

API jest celowo zbliżone do Figma Plugin API, ale pracuje z SceneGraph i formatami plików 4B Pen.

Dokument i strony ​

  • figma.root
  • figma.currentPage
  • figma.currentPage.selection
  • figma.getNodeById(id)
  • figma.createPage()

Tworzenie obiektów ​

  • figma.createFrame()
  • figma.createRectangle()
  • figma.createEllipse()
  • figma.createText()
  • figma.createLine()
  • figma.createPolygon()
  • figma.createStar()
  • figma.createVector()
  • figma.createNodeFromSvg(svg)
  • figma.createComponent()
  • figma.createSection()

Drzewo ​

  • node.children
  • node.parent
  • node.appendChild(child)
  • node.insertChild(index, child)
  • node.clone()
  • node.remove()
  • node.findAll(callback?)
  • node.findOne(callback)
  • figma.group(nodes, parent)
  • figma.ungroup(node)

Komponenty i zmienne ​

Nazwy metod, takie jak component.createInstance(), figma.getLocalVariables() i figma.bindVariable(), pozostają zgodne z Figma Plugin API.

Właściwości ​

Najczęściej używane właściwości można odczytywać i zapisywać przez pośrednika:

  • geometria: x, y, width, height, rotation, resize(width, height);
  • wygląd: fills, strokes, effects, opacity, visible, locked, blendMode, clipsContent;
  • tekst: characters, fontSize, fontName, fontWeight, wyrównanie, interlinia, odstęp między znakami i funkcje zakresów stylów;
  • automatyczny układ: layoutMode, primaryAxisAlignItems, counterAxisAlignItems, itemSpacing, wypełnienie, rozmiary i położenie;
  • obwiednia: strokeWeight, strokeAlign, dashPattern.

Narzędzia pomocnicze ​

  • figma.mixed
  • figma.createImage(data)
  • figma.loadFontAsync(fontName) niczego nie wykonuje, ponieważ 4B Pen nie blokuje zmiany tekstu do czasu załadowania czcionki przez wtyczkę
  • figma.listAvailableFontsAsync() zwraca dostępne czcionki systemowe
  • figma.notify(message) zapisuje ostrzeżenie w trybie bez interfejsu
  • figma.viewport

Brak pełnej zgodności z Figmą ​

Nie są jeszcze dostępne między innymi node.exportAsync(), node.setBoundVariable(), figma.combineAsVariants() i API stylów Figmy.

Zamiast nich używaj poleceń eksportu CLI, narzędzi głównego pakietu albo bezpośrednich funkcji pomocniczych SceneGraph.

Released under the MIT License.