【小工具】一键隐藏/显示MacOS的应用图标

不知诸位有没有这样一个需求,当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='[email protected]',
    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

如果你喜欢且支持本篇文章,为什么不点好看且转发让更多的朋友看到呢?

点击阅读原文,就是项目地址了????

往期推荐:

不论微信钉钉还是什么软件,我写了个通用的消息监控处理机器人

【教程&工具】微信同步文章到Bear

程序员二手书交换计划

【小工具】极客时间&GitChat专栏下载脚本

我的Chrome浏览器插件

oh-my-zsh: 让终端飞

JupyterLab:程序员的笔记本神器

如何实现一个Python爬虫框架

[程序员福利] 获取Lynda视频课程免费账户

Sanic中文教程合集:免费下载

发布了34 篇原创文章 · 获赞 60 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/source_code13/article/details/102675157