介绍
MeowTool.ahk
是一个简洁小巧的、用于快速执行一系列命令的工具。
通过输入自定义命令,传递给自定义处理器来执行一些繁琐的事情。
比如:输入run c:
,可以打开c盘。
本质上都是对AHK的API的封装。
包结构:
│ .gitignore
│ MeowTool.ahk 启动脚本
│ README.md
│
├─cfg 配置文件
├─core
| alias.ahk 命令别名
│ handleMgr.ahk 处理器管理
│ historyMgr.ahk 历史记录管理
│ keywords.ahk 关键字替换
│ parse.ahk 解析命令
│
├─handle 处理器
│ │ baseHandle.ahk
│ └─buildIn 内置处理器
└─ui 图形界面
main.ahk
它的工作流程如下:
- 接收输入
- 替换关键字
- 检查输入是否合法
- 调用处理器
- 回显结果
接下来,我将以这几个步骤来介绍此工具。
接受输入
ui/main.ahk
显示一个输入框,用于接受输入。
它是唯一的ui界面。
脚本启动时便会显示此ui界面,其中有一些热键:
^Right
展开额外区域^Left
关闭额外区域Up
上条历史记录Down
下一条历史记录(如果没有则是;
,以此符号开头的命令不会记录到历史中)
同时,有一些内置命令(即不需要解析即可执行的命令):
cls
清除输出expand
展开界面
具体的可以自己试试。
小知识:输入框右侧的小点用于指示加载状态。
输入命令__tl
可以测试效果。
关键字替换
core/keywords.ahk
用于替换关键字。
在输入框中输入命令后,便会做此处理。这是正式解析前的一个步骤。
在替换前,会做别名处理:如果输入的命令是别名,则先扩展成完整命令。
替换规则:
对于$$
内的字符串会被当作关键字(用于缩短命令长度),可以使用转义符(\
)转移$
。
一个示例如:code $desktop$/a`$.ahk
,它将desktop
替换为桌面路径,并将$
符转义。
自定义关键字:
可以在cfg/keywords.txt
中添加自定义关键字,如:
typora : G:\\typora.exe
那么就可以在命令中使用:
run $typora$
命令规范
core/parse.ahk
用于解析输入的命令。
在别名扩展和关键字替换后,就是命令的解析了。它接受以下形式的命令:
命令 -标志 -键=值 目标 额外信息
注意:脚本只负责解析,将解析结果传给处理器,具体命令如何处理由处理器决定。
其中,如果有多个重复键,会合并成一个对象;额外信息始终是个数组。
一个例子:
echo -n -a=b -a=c t e1 e2
实际解析的结果是:
{
extra:[
e1,
e2
],
kvparams:{
a:[
b,
c
]
},
params:[
n
],
raw:echo -n -a=b -a=c t e1 e2,
target:t,
which:echo
}
处理器则可以根据此结果来做对应的处理。
处理器
handle
目录下包含所有处理器。
在解析完命令后,脚本会将解析结果传给对应的处理器(which字段)。
而处理器分为内置处理器、自定义处理器,以及父类处理器。
baseHandle.ahk
它是所有处理器的父类,包含Handle
和两个返回值方法Fail,Succ
,以及Echo
用于提供帮助文档,静态变量nullable
指定是否接受空执行目标(默认为false
)。
后续迭代中又添加了
conf
方法,用于处理器回显使用到的配置文件信息。
内置处理器
脚本提供了一些核心的处理器,都十分简单同时很有用,具体的请看handle
下的文档。
自定义处理器
所有的处理器都需要继承自baseHandle,它帮助在注册时检查是否为合法的处理器;
在处理命令时,会自动调用对应处理器的handle方法(这使得不用再关心应该如何调用处理器)。
在处理器中,大量使用了配置文件的形式,由
MeowConf.ahk
提供读取功能。
因为所有的配置文件都是git忽略的,一个示例配置文件如下:
# for [code] command
remote : g:\AHK\
this : $remote$MeowTool
main : $remote$scripts\main.ahk
test : $remote$_DEV\Test\_.ahk
调用命令:code this
,使用vscode打开此工具目录。
具体的使用规则,看MeowConf
的描述(另一个仓库)。
创建自定义处理器的流程
创建并使用一个自定义处理器只需要两步:
- 创建
- 注册
以code.ahk为例子:
-
创建脚本
- 在handle下创建code.ahk
- 继承于baseHandle
- 实现Handle方法,它接受一个parsed命令解析对象
- 根据自己定义的规则返回
this.Succ()
或this.Fail()
-
注册命令
- 在
handle\index.ahk
中导入脚本,并写入:Mgr.register('code', Code)
- 在
异步处理器
可以随时且简单的创建、或将一个同步处理器转换为异步处理器;
具体步骤请参考test/testAsync.ahk
。
使用建议
创建新处理器时,参数最好最简化;如果无法避免,可以使用别名
或自定义关键字
功能缩短长度。
结语
现在,启动MeowTool.ahk
,键入echo hello $_$!
吧~