Ruby OSX中作为守护进程运行的脚本的菜单栏图标?

Ruby OSX中作为守护进程运行的脚本的菜单栏图标?,ruby,macos,Ruby,Macos,我有一个ruby script(),它作为守护进程运行在我的macbook上,监视一堆目录中的文件更改,并同步任何发生的更改。我想知道我是否可以让它在顶部的菜单栏中创建一个图标?只是为了让我知道它实际上正在运行,而不必用ps检查它 也许以后如果需要的话,我可能希望能够从那里控制脚本,简单的下拉菜单,包含停止和状态条目,等等 从ObjectC看来,我可以调用NSStatusItem来获取图标,但我真的只想通过Ruby脚本轻松地实现。也许我可以做一些applescript调用?这个MacRuby脚本

我有一个ruby script(),它作为守护进程运行在我的macbook上,监视一堆目录中的文件更改,并同步任何发生的更改。我想知道我是否可以让它在顶部的菜单栏中创建一个图标?只是为了让我知道它实际上正在运行,而不必用ps检查它

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


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

这个MacRuby脚本创建了一个状态栏图标:

这个也是:

这里有一个要点,包括执行此操作的代码:


你可以看看。这是一种使用Ruby而不是Objective-C开发OSX应用程序的方法。它包括许多改进,例如去掉头文件,所以yu只使用Ruby中的“实现”文件。您也可以使用IB构建窗口

看看RubyCocoa。我从未使用过它,但我认为它在使用Ruby中的Cocoa时效果很好。@Linux\u iOS注意到RubyCocoa是过去,MacRuby是未来。Hm。我从未处理过,所以我不知道。感谢您的澄清。感谢您将查看链接$>macruby./mr_status\u bar\u app.rb(其中mr_status\u bar\u app.rb包含上述要点)在状态栏中没有显示任何内容。png图像是否需要具有特定的维度?它必须与.rb脚本位于同一目录中
# 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