8

我有一个 ruby​​ 脚本(https://github.com/daemonza/MacBak),它作为守护进程在我的 macbook 上运行,并监视一堆目录的文件更改并同步发生的任何更改。我想知道我是否可以让它在顶部的菜单栏中创建一个图标?只是为了让我知道它实际上正在运行,而无需使用 ps 检查它。

也许稍后如果需要,我可能希望能够从那里控制脚本,简单的下拉菜单,停止和状态条目等。

从 ObjectC 看来,我可以调用 NSStatusItem 来获取图标,但我真的只想从我的 Ruby 脚本中轻松完成。也许我可以做一些applescript调用?

4

2 回答 2

6

这个 MacRuby 脚本创建一个状态栏图标:
https ://github.com/ashchan/gmail-notifr

这个也是:
https ://github.com/isaac/Stopwatch

这是一个要点,包括执行此操作的代码:
https ://gist.github.com/1480884

# We build the status bar item menu
def setupMenu
  menu = NSMenu.new
  menu.initWithTitle 'FooApp'
  mi = NSMenuItem.new
  mi.title = 'Hellow from MacRuby!'
  mi.action = 'sayHello:'
  mi.target = self
  menu.addItem mi

  mi = NSMenuItem.new
  mi.title = 'Quit'
  mi.action = 'quit:'
  mi.target = self
  menu.addItem mi

  menu
end

# Init the status bar
def initStatusBar(menu)
  status_bar = NSStatusBar.systemStatusBar
  status_item = status_bar.statusItemWithLength(NSVariableStatusItemLength)
  status_item.setMenu menu 
  img = NSImage.new.initWithContentsOfFile 'macruby_logo.png'
  status_item.setImage(img)
end

# Menu Item Actions
def sayHello(sender)
    alert = NSAlert.new
    alert.messageText = 'This is MacRuby Status Bar Application'
    alert.informativeText = 'Cool, huh?'
    alert.alertStyle = NSInformationalAlertStyle
    alert.addButtonWithTitle("Yeah!")
    response = alert.runModal
end

def quit(sender)
  app = NSApplication.sharedApplication
  app.terminate(self)
end

app = NSApplication.sharedApplication
initStatusBar(setupMenu)
app.run
于 2012-04-19T15:39:46.133 回答
1

你可以看看MacRuby。这是一种使用 Ruby 而不是 Objective-C 开发 OS X 应用程序的方法。它包括许多改进,例如摆脱头文件,因此您只需在 Ruby 中拥有“实现”文件。您也可以使用 IB 来构建窗口

于 2012-04-19T15:40:17.003 回答