使用Platypus.app创建状态栏菜单应用的问题咨询
解决Platypus.app状态栏菜单的两个问题
1. 自定义菜单项名称并关联目标文件夹
要将菜单项改为「打开桌面」这类友好名称,同时保证点击后打开正确路径,需要在脚本中建立名称与路径的映射关系,替代原来直接用路径当显示文本的逻辑:
- 定义哈希表存储自定义名称到目标路径的对应规则
- 输出菜单时使用自定义名称作为菜单项显示文本
- 用户点击菜单项后,通过映射表找到对应的实际路径再执行打开操作
2. 给子菜单项添加图标
Platypus支持为子菜单项添加图标,只需在SUBMENU的参数列表中,为每个子菜单项使用MENUITEMICON|图标路径|菜单项文本的格式,代替原来的纯文本项。
修改后的完整代码
#!/usr/bin/perl # 定义自定义菜单项名称与目标文件夹的映射 my %menu_map = ( '打开桌面' => '~/Desktop', '打开3DProjects' => '~/Desktop/3DProjects', '打开2DProjects' => '~/Desktop/2DProjects', '子菜单项目1' => '~/路径/到/项目1', '子菜单项目2' => '~/路径/到/项目2', '子菜单项目3' => '~/路径/到/项目3' ); # 无参数时输出菜单结构 if (!scalar(@ARGV)) { # 主菜单项(带图标+自定义名称) print "MENUITEMICON|AppIcon.icns|打开桌面\n"; print "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns|打开3DProjects\n"; print "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ImageIcon.icns|打开2DProjects\n"; # 带图标的子菜单:每个子项用MENUITEMICON指定图标和名称 print "SUBMENU|我的子菜单|" . "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/FolderIcon.icns|子菜单项目1|" . "MENUITEMICON|/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertNoteIcon.icns|子菜单项目2|" . "MENUITEMICON|AppIcon.icns|子菜单项目3\n"; } else { # 获取用户点击的菜单项名称,通过映射表找到对应路径 my $selected_item = $ARGV[0]; if (exists $menu_map{$selected_item}) { my $target_path = $menu_map{$selected_item}; # 替换路径中的~为当前用户主目录 $target_path =~ s/^~/$ENV{HOME}/; system("open '$target_path'"); } }
关键改动说明
- 映射表
%menu_map:集中管理所有菜单项名称与目标路径的对应关系,方便后续修改维护。 - 主菜单项输出:将原来的路径文本替换为自定义名称,图标保留原设置(替换了外链图标为系统内置图标)。
- 子菜单结构:将每个子菜单项改为
MENUITEMICON|图标路径|名称的格式,实现子项带图标效果。 - 路径解析:增加
~到用户主目录的替换逻辑,确保相对路径能正确识别。
内容的提问来源于stack exchange,提问作者Kuzey 3D
相关产品推荐
相关产品推荐

