【问题标题】:Menu bar icon in OS X for script running as daemon?OS X中作为守护进程运行的脚本的菜单栏图标?
【发布时间】:2012-04-19 23:40:17
【问题描述】:

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

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

似乎从 ObjectC 中我可以调用 NSStatusItem 来获取图标,但我真的只想从我的 Ruby 脚本中轻松地做到这一点。也许我可以做一些applescript调用?

【问题讨论】:

  • 看看 RubyCocoa。我从未使用过它,但我认为它在使用 Ruby 中的 Cocoa 时效果很好。
  • @Linux_iOS 请参阅this answer,注意 RubyCocoa 已成为过去,而 MacRuby 已成为未来。
  • 嗯。我从来没有处理过,所以我不知道。感谢您的澄清。

标签: ruby macos


【解决方案1】:

这个 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

【讨论】:

  • 谢谢会看链接
  • $> macruby ./mr_status_bar_app.rb (其中 mr_status_bar_app.rb 包含上述要点)在状态栏中不显示任何内容。 png 图像是否需要具有一定的尺寸?
  • 它必须与 .rb 脚本在同一目录中
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 2013-06-14
    • 2011-01-03
    • 2013-10-14
    • 1970-01-01
    • 2023-03-02
    • 2015-11-07
    相关资源
    最近更新 更多