英文:
Trying to create a Status Menu app with Platypus.app
问题
我正在尝试创建一个基本的状态菜单应用程序,使用 Platypus.app。
我觉得我快要成功了,但我却无法实现,并且这已经困扰我一个星期了。
#!/usr/bin/perl
# 如果没有参数,显示菜单
if (!scalar(@ARGV)) {
print "MENUITEMICON|AppIcon.icns|~/Desktop\n";
print "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns|~/Desktop/3DProjects\n";
print "MENUITEMICON|https://sveinbjorn.org/images/andlat.png|~/Desktop/2DProjects\n";
print "SUBMENU|子菜单|项目1|项目2|项目3\n";
} else {
# 我们将菜单标题作为参数
system("open $ARGV[0]");
}
如果我使用相对路径作为菜单名称,这可以工作,但看起来不太好。如何使用 "Open Desktop"、"Open 3DProjects" 等作为菜单,并使其打开正确的文件夹呢?
另外,是否可以为子菜单项添加图标?
英文:
I'm trying to create a basic status menu app with Platypus.app
I feel I'm almost there but I can't get there and it's been puzzling for a week now.
#!/usr/bin/perl
# If 0 arguments, we show menu
if (!scalar(@ARGV)) {
print "MENUITEMICON|AppIcon.icns|~/Desktop\n";
print "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns|~/Desktop/3DProjects\n";
print "MENUITEMICON|https://sveinbjorn.org/images/andlat.png|~/Desktop/2DProjects\n";
print "SUBMENU|Submenu|Item 1|Item 2|Item 3\n";
} else {
# We get the menu title as an argument
system("open $ARGV[0]");
}
This works if I use the relative path as the menu name, but that doesn't look good. How do I use Open Desktop, Open 3DProjects etc as the menu and have it open the correct folder?
Also, is it possible to add an icon to the submenu items?
答案1
得分: 1
> 我如何使用"Open Desktop"、"Open 2DProjects" 等菜单并打开正确的文件夹?
你可以尝试在脚本中保存绝对路径,像这样:
#!/usr/bin/perl
my @menu = (
{
icon => 'AppIcon.icns',
path => '~/Desktop',
text => '打开桌面'
},
{
icon => '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns',
path => '~/Desktop/2DProjects',
text => '打开2D项目'
}
);
# 如果没有参数,我们显示菜单
if (!scalar(@ARGV)) {
for my $item (@menu) {
print "MENUITEMICON|" . $item->{icon} . "|" . $item->{text} . "\n";
}
}
else {
# 我们将菜单标题作为参数传递
my $path;
my $text = $ARGV[0];
for my $item (@menu) {
if ($item->{text} eq $text){
$path = $item->{path};
last;
}
}
system("open $path");
}
请注意,我已经将菜单文本从英文翻译成了中文,以便更好地理解。
英文:
> How do I use Open Desktop, Open 3DProjects etc as the menu and have it open the correct folder?
Can you try save the absolute path in the script like this:
#!/usr/bin/perl
my @menu = (
{
icon => 'AppIcon.icns',
path => '~/Desktop',
text => 'Open Desktop'
},
{
icon => '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns',
path => '~/Desktop/2DProjects',
text => 'Open 2DProjects'
}
);
# If 0 arguments, we show menu
if (!scalar(@ARGV)) {
for my $item (@menu) {
print "MENUITEMICON|" . $item->{icon} . "|" . $item->{text} . "\n";
}
}
else {
# We get the menu title as an argument
my $path;
my $text = $ARGV[0];
for my $item (@menu) {
if ($item->{text} eq $text){
$path = $item->{path};
last;
}
}
system("open $path");
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论