trayhost

Cross-platform Go library to place an icon in the host operating system's taskbar.

  • Owner: shurcooL/trayhost
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

trayhost

Build Status GoDoc

Package trayhost is a cross-platform Go library to place an icon
in the host operating system's taskbar.

Platform Support

  • macOS - Fully implemented and supported by @dmitshur.
  • Linux - Partially implemented, but unsupported (needs an owner/maintainer).
  • Windows - Partially implemented, but unsupported (needs an owner/maintainer).

Notes

On macOS, for Notification Center user notifications to work, your Go binary that
uses trayhost must be a part of a standard macOS app bundle.

Most other functionality of trayhost will be available if the binary is not a part
of app bundle, but you will get a terminal pop up, and you will not be able to
configure some aspects of the app.

Here's a minimal layout of an app bundle:

$ tree "Trayhost Example.app"
Trayhost\ Example.app
└── Contents
    ├── Info.plist
    ├── MacOS
    │   └── example
    └── Resources
        └── Icon.icns

Here's a minimal Info.plist file as reference (only the entries that are needed,
nothing extra):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleExecutable</key>
	<string>example</string>
	<key>CFBundleIconFile</key>
	<string>Icon</string>
	<key>CFBundleIdentifier</key>
	<string>ExampleApp</string>
	<key>NSHighResolutionCapable</key>
	<true/>
	<key>LSUIElement</key>
	<string>1</string>
</dict>
</plist>
  • CFBundleIdentifier needs to be set to some value for Notification Center to work.
  • The binary must be inside Contents/MacOS directory for Notification Center to work.
  • NSHighResolutionCapable to enable Retina mode.
  • LSUIElement is needed to make the app not appear in Cmd+Tab list and the dock
    while still being able to show a tooltip in the menu bar.

On macOS, when you run an app bundle, the working directory of the executed process
is the root directory (/), not the app bundle's Contents/Resources directory.
Change directory to Resources if you need to load resources from there.

ep, err := os.Executable()
if err != nil {
	log.Fatalln("os.Executable:", err)
}
err = os.Chdir(filepath.Join(filepath.Dir(ep), "..", "Resources"))
if err != nil {
	log.Fatalln("os.Chdir:", err)
}

Installation

go get -u github.com/shurcooL/trayhost

Main metrics

Overview
Name With OwnershurcooL/trayhost
Primary LanguageGo
Program languageC (Language Count: 3)
Platform
License:MIT License
所有者活动
Created At2014-04-25 04:02:30
Pushed At2023-11-26 23:18:30
Last Commit At
Release Count0
用户参与
Stargazers Count255
Watchers Count6
Fork Count19
Commits Count74
Has Issues Enabled
Issues Count12
Issue Open Count6
Pull Requests Count7
Pull Requests Open Count2
Pull Requests Close Count2
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private