不知诸位有没有这样一个需求,当MacOS打开应用多的时候,Dock栏可能会很拥挤:
那么需求就产生了,能不能将某些软件的图标在Dock隐藏掉,同时也不影响日常使用呢?有的,接下来即将给出成熟的解决方案。
此篇文章的灵感来源于昨天的推文:微信钉钉消息监控处理机器人,因为其中有部分代码操作了应用的Info.plist
文件,所以便想到做这个小工具,本工具只支持MacOS。
开始
这个工具很简单,我会直接说明解决方案以及全部代码,同时也会说明一下如何编写一个第三方包并上传到pypi。
话说昨天需要提取应用包名的时候,研究了下每个应用下面的Info.plist
文件,不说其他的,发现其中的LSUIElement
可以控制软件的图标是否可以在Dock里面显示。
那么这就是上述问题的解决方案,只要修改LSUIElement
的值即可:
•如果需要隐藏图标:设置LSUIElement为1
•如果需要显示图标:去掉LSUIElement即可
因此核心逻辑还是很简单的,接下来开始编码。
编码
再写一个项目之前,我们需要想清楚手上做的项目最终目的是什么?然后再想想怎么优雅得实现:
•目的:一个终端工具,可以实现对软件进行图标显示与隐藏
•实现:用Python实现一个终端工具
好,第一步,建立项目:https://github.com/howie6879/leaf ,顺便附上说明:
A CLI tool for hiding the application’s icon in the Dock. (MacOS Dock栏软件图标隐藏终端工具)
构建项目目录结构:
├── LICENSE ├── Pipfile ├── README.md ├── leaf │ ├── __init__.py │ └── cli.py # 执行脚本 └── setup.py # 项目打包文件 1 directory, 6 files
一目了然,其中cli.py
核心代码如下:
def change_app_plist(app_name: str, status: bool = True): """ Used for hiding/displaying the application's icon eg: leaf WeChat --status=1 :param app_name: :param status: :return: """ info_plist = PLIST_PATH_TEM.format(app_name) if os.path.exists(info_plist): with open(info_plist, "rb") as fp: pl = plistlib.load(fp) if status: pl["LSUIElement"] = "1" else: pl.pop("LSUIElement", '') with open(info_plist, "wb") as fp: plistlib.dump(pl, fp) print(f"{app_name} icon is {'hidden' if status else 'shows'} successfully, Please restart it.") else: output = f"Please make sure the app_name is correct, {app_name} is not in /Applications." print("\033[1;31;40m" + output) def execute(): fire.Fire(change_app_plist)
还是一目了然,写完可以Debug下,测试功能是否完善,这里介绍一下用法:
隐藏微信图标:
leaf WeChat
重启微信,看看效果:
图标果然隐藏了,哈哈~
如果想恢复,执行显示微信图标:
leaf WeChat --status=0
开源
测试结束后,目前还是只能自己使用。
这不行,不符合我们程序员的开源精神,上传到 https://pypi.org/ 吧(没注册的要先注册才能上传),第一步就是建立setup.py
:
from setuptools import find_packages, setup setup( name='leaf-cli', version='0.0.1', description="A CLI tool for hiding the application's icon in the Dock. (MacOS Dock栏软件图标隐藏终端工具)", install_requires=['fire'], author='Howie Hu', author_email='xiaozizayang@gmail.com', url="https://github.com/howie6879/leaf", packages=find_packages(), entry_points={ 'console_scripts': [ 'leaf = leaf.cli:execute' ] }, )
上述起到一个项目注册的作用,比如申明项目名称等一系列基本信息、依赖包等。
setup.py
建立好之后,接下来就是上传了,我推荐使用 https://pypi.org/project/twine/ 包,简单易用:
# 打包 python setup.py sdist bdist_wheel # 上传 twine upload --repository-url https://test.pypi.org/legacy/ dist/*
传成功后,就可以看到你的项目了,接下来就是等着被别人使用,如果你能收获到成就感,那么你就明白程序员的乐趣了。
比如本项目就会出现在 https://pypi.org/project/leaf-cli/
最后
最后自然是总结,本篇推文比较基础,主要讲的是通过实现一键隐藏/显示MacOS的应用图标,演示一个Python第三方包从零到一的过程。
如果你有什么需求,欢迎提出来,一起写好玩的工具,最后附上本项目的傻瓜使用教程:
安装
pip install leaf-cli # New features pip install git+https://github.com/howie6879/leaf leaf-cli --help
隐藏
leaf WeChat
显示
leaf WeChat --status=0