Coder Social home page Coder Social logo

emacsmirror / ob-swiftui Goto Github PK

View Code? Open in Web Editor NEW

This project forked from xenodium/ob-swiftui

0.0 2.0 0.0 404 KB

Org babel functions for SwiftUI evaluation

Home Page: https://github.com/xenodium/ob-swiftui

License: GNU General Public License v3.0

Emacs Lisp 100.00%

ob-swiftui's Introduction

ob-swiftui

Buy me a coffee ☕

Evaluate SwiftUI snippets using Emacs org babel.

Big thanks to Chris Eidhof, who tweeted a snippet to run any SwiftUI view as a macOS app. Much of ob-swiftui’s Swift code is based on that snippet as well as some additional tweaks he made (like writing to png).

ob-swiftui.gif

Install

(require 'ob-swiftui)
(ob-swiftui-setup)

Header arguments

:results window

Runs SwiftUI in a separate window (default and can be omitted).

Use a generated root view and render in external window (default):

#+begin_src swiftui
  Rectangle()
    .fill(Color.yellow)
    .frame(maxWidth: .infinity, maxHeight: .infinity)
#+end_src

is equivalent to:

#+begin_src swiftui :results window :view none
  Rectangle()
    .fill(Color.yellow)
    .frame(maxWidth: .infinity, maxHeight: .infinity)
#+end_src

:view FooView

If view: is given, use FooView as the root view. Otherwise, generate a root view and embed source block in view body.

#+begin_src swiftui :results window :view FooView
  struct FooView: View {
    var body: some View {
      VStack(spacing: 10) {
        BarView()
        BazView()
      }
    }
  }

  struct BarView: View {
    var body: some View {
      Rectangle()
        .fill(Color.yellow)
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
  }

  struct BazView: View {
    var body: some View {
      Rectangle()
        .fill(Color.blue)
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
  }
#+end_src

:results file

Runs SwiftUI in the background and saves an image snapshot to a file.

#+begin_src swiftui :results file
  Rectangle()
    .fill(Color.yellow)
    .frame(maxWidth: .infinity, maxHeight: .infinity)
#+end_src

Auto refresh :results file image

If executing the block does not refresh the inlined image, try adding org-redisplay-inline-images in a hook. org-babel-after-execute-hook

(add-hook 'org-babel-after-execute-hook (lambda ()
                                          (when org-inline-image-overlays
                                            (org-redisplay-inline-images))))

Buy me a coffee ☕

ob-swiftui's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.