image

介绍

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 $_$!吧~

posted on 2024-10-25 13:31  落寞的雪  阅读(11)  评论(0编辑  收藏  举报