本文为Anchor专业版的使用手册。专业版需要一定的代码基础,通过阅读本篇文档你将会学到使用Anchor,在状态栏、通知中心、Widget中,添加你想看到的内容、你需要的操作的一键按钮。

正如在展示视频中看到的那样,专业版提供了完全自定义的命令和完全自定义的界面。

另外,非常感谢你对于Anchor的认可与支持!

添加一个自定义控件

路径:单击状态栏Anchor图标 -> 新增 -> 添加自定义组件。

组件可以设定四种自动运行模式,分别是:

运行模式 含义
手动运行 将不会自动运行,需要通过点击”开始”运行
开启视窗时运行 将在点开状态栏、划出通知中心时运行
程序启动时运行 将会在主程序启动时自动运行一次
固定间隔自动运行 将根据间隔不断自动运行

正如你所看到的,自定义组件的程序与代码都可以自定义。

这里做一个最简单的测试,将程序更改为:

1
python

将代码更改为:

1
print("Greeting from Anchor")

你就会获得一个”结果”固定的组件,这里建议使用左侧彩蛋第二位的测试窗口,测试窗口提供了一个简单方便的测试环境。

自定义界面

自定义状态栏按钮

状态栏除了默认的启动、隐藏、设置等,还支持添加其他的按钮。

支持的按钮有以下几类,添加多个按钮以”;”(英文分号)分隔:

种类 设定值 返回值
目前结果值 $文本一 结果值
固定值 文本二 文本二
输入值 @文本三 输入值

那么以番茄钟为例,如果需要三个自定义按钮,分别为:30、目前剩余的时间、自定义时间。

那么”状态栏自定义按钮”就设定为:

1
30;$目前剩余时间;@自定义时间

这里可以添加一个自定义任务进行尝试,测试代码使用/bin/bash的情况下可以使用:

1
echo $1

建议将结果拖入状态栏内容,这样可以方便的在状态栏看到按钮点击的结果。

自定义视窗界面

视窗界面将根据程序运行的结果自动生成,目前支持四种自定义视窗以及四种视窗的任意组合。

四种视窗分别为:终端富文本、HTML、控件以及文件。

首先介绍一下运行结果的控制。程序重新运行后运行结果将重新产生,或者通过清屏的控制字符也可以清空已有的运行结果,例如下面的bash程序演示了如何控制运行结果。

1
2
3
4
5
6
7
echo -e "first line"
sleep 1
echo -e "second line"
sleep 1
echo -e "\033[2Jthird line"
sleep 1
echo -e "forth line"

终端富文本

终端通过控制字符可以生成富文本,Anchor支持相关的大部分控制字符,但不支持光标移动类的控制字符。

所有正常输出内容将默认作为终端富文本处理。

例如下面的bash程序演示了生成一个字符日历:

1
cal | head -n 1; cal -h | tail -n +2 | grep --before-context 6 --after-context 6 --color=always -e " $(date +%e)" -e "^$(date +%e)"

可以看到当日的日期如终端中一样进行了标红。

HTML

Anchor支持HTML,要求的输出格式为:

1
{ "type": "html", "data": "<div>body</div>" }

由于自动计算高度的问题,HTML要求去除最外层的<html>标签,直接使用<head> / <body>标签。

例如下面的bash程序演示了一个简单的HTML视窗:

1
2
3
4
echo '{
"type": "html",
"data": "<body><script>function s(){document.getElementById(\"p\").innerHTML=\"greeting from anchor\"}</script><p id=\"p\" style=\"background: gray\">aaa</p><button onclick=s()>Click</button></body>"
}'

控件

Anchor提供四种视窗中可以使用的控件:

种类 关键词
滑块 slider
文本输入 textfield
开关 toggle
文本显示 text

与HTML类似,使用控件的关键词为tools,数据栏需要填入的内容为:

1
2
3
4
[
["id", "type", "hint", "default"],
["id", "type", "hint", "default"]
]

例如下面的bash程序展示了一个简单的控件视窗:

1
2
3
4
5
6
7
8
9
echo '{
"type":"tools",
"data":[
["id1","slider","first control","10"],
["id2","textfield","second control","text"],
["id3","toggle","third control","true"],
["id4","text","fourth control","content"]
]
}'

操作控件后,控件的属性将作为程序的参数传给程序并再次运行。

文件

文件视窗提供一个接收文件拖曳的窗口,Json格式为:

1
{ "type": "file", "data": "" }

收到文件拖曳后,文件名将作为参数传给程序并再次运行。

多个视窗组合

组合视窗的关键词为multi,所以Json格式为:

1
{ "type": "multi", "data": [] }

例如下面的bash程序演示了一个简单的组合视窗:

1
2
3
4
5
6
7
8
echo '{
"type": "multi",
"data": [
{"type": "html", "data": "<div>html</html>"},
{"type": "tools", "data": [["id1","slider","first control","10"]]},
"plain text",
{"type": "file", "data": ""}
]}'

自定义程序

添加文件访问权限

由于Apple的沙盒策略,Anchor所有访问的文件都需要用户明确授权。

你可以在设置页添加可访问的文件夹,这里给出建议的操作:

  1. 创建~/.anchor文件夹,并将需要访问的资源加入该文件夹
  2. 将该文件夹在设置页中添加可访问
  3. 在测试页通过测试代码ls /Users/name/.anchor确认可以访问

更改使用的程序

这里以Python为例演示使用其他程序。

在程序栏,更改为python

在代码栏,输入如下代码:

1
2
import sys
print(sys.version)

将显示Python的系统信息。

这里另外演示通过osascript进行弹窗的操作。

在程序栏,更改为bash

在代码栏,输入如下代码:

1
osascript -e 'display notification "hello world!" with title "Greeting" subtitle "More text" sound name "Submarine"'

调用其他可执行文件

由于沙盒策略,软件即使可以访问也无法运行系统自带以外的可执行文件。

所以需要通过一个代理完成可执行文件的访问,也就是Anchor访问代理软件,代理软件运行可执行文件。

通过代理软件的中转,Anchor就可以完成可执行文件的调用。

按照我的使用习惯(虽然我也可以使用本地的非沙盒版本),我会将代理软件与Anchor设置开机自动运行。

代理软件非常简单,只需要一个本地的HTTP服务器以及一些调用可执行文件的命令,如果你想要使用我已经写好的软件,可以直接到我的Github中进行下载。

FAQ

Q: 后续是否会支持Widget以及桌面小组件。

A: 在Big Sur正式更新后就会更新Widget,后续也将增加桌面小组件的功能。这些功能都将在普通版中提供,专业版与普通版的区别将保持仅有自定义界面与自定义代码。

Q: 通知中心的内容没有更新。

A: 只有在主程序启动的情况下组件的任务才会运行,所以请检查主程序是否已经运行。

Q: 是否有一些常用的功能组件提供?

A: 目前这些内容都放在Github上,后续如果用户量需要一个专门的网站了,届时会更新独立的网站。根据用户反馈非常常用的功能,将会更新到预定义组件里。当然有一些例如“显示隐藏文件”等系统已经有非常便捷的解决方案的功能(快捷键为:Command+Shift+.)将不会更新。