11

Is there an easy way I can add custom icons to the menu bar status area? Ideally something like Growl (e.g., where you can just execute a command) but instead of notifications, just renders icons in the menu bar.

I'm mainly looking to draw numbers that I'd use to alert me of various things. For example, I can configure my email client to run a command/AppleScript to update the numbers when an certain kind of email arrives.

Something like this:

img

6 Answers 6

6
+25

I would suggest starting with this thread, which describes using Cocoa Objective-C calls from within AppleScript. There is an example Xcode project here.

And Launch is a complete application written in AppleScript that functionally does this. Its Xcode project file is here.

The basic premise is to generate NSMenuItem instances and add them to the system's NSStatusBar:

set statusMenu to (NSMenu's alloc)'s initWithTitle_("Launch")
-- (build and do stuff with the statusMenu here)
set sysStatusBar to NSStatusBar's systemStatusBar
set statusItem to sysStatusBar's statusItemWithLength_(32)
tell statusItem to setMenu_(statusMenu)
tell statusItem to setHighlightMode_(1)
set menuImage to NSImage's imageNamed_("icon.png")
tell statusItem to setImage_(menuImage)

AppleScript excerpt from Launch's source code, Copyright © Lee Hanken

1
  • Links are missing now in 2018 Jan 9, 2018 at 12:34
3

Okay, I have made an app for this. It is on GitHub: 0942v8653/ScriptableStatusBar. Just keep the app running and use the sbar tool to set and remove items.

As the readme says:

sbar set face 😃 'Bye!:sbar remove face'

Creates a face in the status bar. The menu will have an option Bye! that runs sbar remove face getting rid of the menu it creates.


You can download a compiled version from https://github.com/0942v8653/ScriptableStatusBar/releases.

4
  • Nice, but why do You register to all distributed notifications instead of the one with name: "io.github.0942v8653.ScriptableStatusBar"? Nov 4, 2014 at 14:45
  • @MateuszSzlosek Good question. Will fix later :P
    – 0942v8653
    Nov 4, 2014 at 14:58
  • 1
    @MateuszSzlosek Fixed.
    – 0942v8653
    Nov 4, 2014 at 17:33
  • Your app's functionality seems to be very similar to "BitBar" (mentioned above); while yours features an icon (not sure if BitBar does), the other allows nearly any scripting language (with std-out) to very easily display its output in the right-hand menu bar. I use that to "osascript" an apple script that "returns" the current number of workspace I'm on (like in former OS versions). Scripts are simply placed into a plugin folder & EXTRA! part of names (e.g. xx.3s.sh => 3 seconds) specifies repetition intervals. VERY useful for status displaying !!! Dec 4, 2018 at 8:51
2

You can also use RubyCocoa:

require "osx/cocoa"
include OSX

app = NSApplication.sharedApplication
statusitem = NSStatusBar.systemStatusBar().statusItemWithLength(NSVariableStatusItemLength)
statusitem.setTitle("aa")
app.run
1

Another option is to use Rumps, a Python library that uses the Obj-C classes and functions.

http://rumps.readthedocs.org/en/latest/

0

Yes, you can create a Cocoa app for this purpose in Xcode. No, you cannot do it with applescript.

0

xbar

xbar (download link) allows you to add a large number of plug-ins and menus to the macOS menu bar.

There are already pre-built plugins available, but you can also create your own if you want to.

For help with scripting plugins, have a look at the Writing plugins guide.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .