Skip to content

Instantly share code, notes, and snippets.

@uchcode
Created March 13, 2016 18:57

Revisions

  1. uchcode created this gist Mar 13, 2016.
    57 changes: 57 additions & 0 deletions jxa_status_bar_app.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@
    #!/usr/bin/osascript -l JavaScript

    ObjC.import('Cocoa')

    app = Application.currentApplication()
    app.includeStandardAdditions = true

    ObjC.registerSubclass({
    name: 'MenuAction',
    methods: {
    'sayHello:': {
    types: ['void', ['id']],
    implementation: function(sender) {
    app.displayAlert('hello world')
    }
    },
    'quit:': {
    types: ['void', ['id']],
    implementation: function(sender) {
    $.NSApp.terminate(this)
    }
    }
    }
    })

    function Menu() {
    target = $.MenuAction.alloc.init

    menu = $.NSMenu.alloc.init

    miSayHello = $.NSMenuItem.alloc.init
    miSayHello.title = 'Hello from JXA!'
    miSayHello.target = target
    miSayHello.action = 'sayHello:'
    menu.addItem(miSayHello)

    miQuit = $.NSMenuItem.alloc.init
    miQuit.setTitle('Quit')
    miQuit.setTarget(target)
    miQuit.setAction('quit:')
    menu.addItem(miQuit)

    return menu
    }

    function StatusBar(title, menu) {
    statusBar = $.NSStatusBar.systemStatusBar
    statusItem = statusBar.statusItemWithLength($.NSVariableStatusItemLength)
    statusItem.title = title
    statusItem.menu = menu
    }

    nsapp = $.NSApplication.sharedApplication

    StatusBar('Statusbar App in JXA', Menu())

    nsapp.run