Đây là điều mà tôi đã tìm kiếm trong một thời gian dài trước đây và không tìm thấy một giải pháp thỏa đáng. Câu hỏi của bạn đã truyền cảm hứng cho tôi để hoàn thành dự án mà tôi bắt đầu trở lại khi tôi đang tìm kiếm một giải pháp cho vấn đề này.
Kiểm tra menubarnotifier trên GitHub. Bạn có thể hiển thị thông báo trong thanh thực đơn bằng cách chuyển một chuỗi tới tập lệnh:
./menubarnotifier.py "Notification Text Here"
... và nó sẽ hiển thị trong thanh thực đơn OS X. Nhấp vào thông báo sẽ thoát khỏi ứng dụng.
Thêm vị trí của tập lệnh vào đường dẫn của bạn (hoặc chỉ cần tạo bí danh cho chính tập lệnh) và bạn sẽ có thể sử dụng tập lệnh đó từ bất kỳ đâu trong Terminal.
Vấn đề với việc triển khai hiện có là nó ghi nhật ký bằng NSLog, ghi vào stderr theo mặc định. Bạn sẽ cần phải loại bỏ các thông điệp NSLog để sử dụng tập lệnh thực sự.
Cách tiếp cận của tôi là thêm chức năng sau vào chức năng của bạn ~/.bash_profile
và sau đó gọi hàm khi bạn muốn thêm thông báo vào thanh thực đơn:
# menubarnotifier.py function
mn () {
/path/to/menubarnotifier.py "$1" 2>/dev/null &
}
Vì vậy, bạn có thể sử dụng nó chỉ với:
mn "Notification Text Here"
Và nó sẽ không đăng nhập vào thiết bị xuất chuẩn. Nó cũng sẽ chạy trong nền để không yêu cầu Ctrl + C.
Kịch bản sử dụng PyObjC, vì vậy bạn sẽ cần cài đặt nó nếu bạn chưa có nó. Tôi đã cài đặt nó bằng MacPorts một cách dễ dàng sudo port install py27-pyobjc*
nhưng tôi nghĩ bạn có thể thoát khỏi chỉ với sudo port install py27-pyobjc py27-pyobjc-cocoa
.
Ý tưởng là sử dụng NSStatusBar.systemStatusBar().statusItemWithLength_()
để tạo một mục mới trong thanh thực đơn OS X.
self.statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
self.statusItem.setTitle_(display_text)
Tôi sẽ thêm nhiều chức năng sau (chẳng hạn như hình ảnh như bạn đã đề cập trong câu hỏi của bạn). Tôi cũng cần tìm ra một cơ chế ghi nhật ký tốt hơn để bạn có thể chạy nó và không thấy đầu ra NSLog. Hiện tại, hãy sử dụng hàm bash mà tôi đã viết ở trên để có được điều này để vận hành theo cách bạn muốn.