基础

AkiChase大约 3 分钟

插件智能项的功能非常强大,可以通过自定义匹配函数,根据当前输入内容的类型,具体内容,工作窗口等信息判断是否匹配当前插件智能项。

具体来说,比如,将图片粘贴到智能模式搜索框中,就可以根据输入内容的类型是图片,而匹配到OCR图片识别插件添加的智能项。

比如,将单个文件夹粘贴到搜索框中,就可以根据输入内容的类型是文件,再根据当前文件是文件夹,而匹配到通过文件搜索插件添加的智能项。

而其他方面的操作类似于插件启动项,在此不多赘述。

提示

插件启动项不同,智能启动项没有 doubleRightHandler 参数,其他用法类似。

主要内容集中在自定义匹配函数

API

添加插件智能项需要使用 PluginHelper.addPluginToIntelligentMode() API

参数及说明:PluginHelper.addPluginToIntelligentMode

简单应用

自定义匹配函数的应用,即 matchHandler 参数

1. 文本匹配

自由组合文本匹配,matchHandler返回0则不匹配,返回非0则匹配

; 添加插件智能项
static addIntelligentItem() {
    ; 自定义匹配函数
    matchHandler(obj, searchText, pastedContentType, *) { ; 使用*忽略多余参数
        ; 带有非文本类型的都不匹配
        if (pastedContentType != 'text')
            return 0
        ; 若searchText为"PPWB"开头部分
        if (PluginHelper.Utils.strStartWith("PPWB", searchText)
            || searchText == '1234' ;或者searchText为1234
            || InStr(searchText, "6") ; 或者searchText包含6
        )
            return 1 ;则匹配

        return 0 ; 其他情况也不匹配
    }

    PluginHelper.addPluginToIntelligentMode(this.name,
        "匹配文本",
        matchHandler,
        (obj, *) => PluginHelper.Utils.tip(this.name, obj.title)
    )
}

如图,符合InStr(searchText, "6")而匹配

文本匹配

2. 输入类型匹配

; 添加插件智能项
static addIntelligentItem() {
    ; 自定义匹配函数
    matchHandler(obj, searchText, pastedContentType, pastedContent, *) { ; 使用*忽略多余参数
        if (pastedContentType == 'file' && ; 文件类型 且
            pastedContent.Length == 1 &&      ; 文件数量为1 且
            InStr(FileExist(pastedContent[1]), "D") ; 文件为文件夹
        )
            return 1 ; 符合则匹配
        return 0 ; 否则不匹配
    }

    PluginHelper.addPluginToIntelligentMode(this.name,
        "匹配单个文件夹",
        matchHandler,
        (obj, *) => PluginHelper.Utils.tip(this.name, obj.title)
    )
}

如图,符合单个文件夹而匹配

单文件夹匹配

3. 工作窗口匹配

提示

工作窗口模式是按下智能搜索快捷键时,若当前没有选中任何内容,则Starter将获取工作窗口信息,进入工作窗口模式下的智能模式搜索框。

搜索框会短暂显示工作窗口的信息,插件可以根据此时的工作窗口信息进行匹配

通过工作窗口信息,匹配资源管理器

static addIntelligentItem() {
    ; 自定义匹配函数
    matchHandler(obj, searchText, pastedContentType, pastedContent, workWinInfo, winInfoMatchFlag) {
        ; 非工作窗口模式不匹配
        ; 只有工作窗口模式下,窗口信息才是有效的
        ; 否则可能是上次工作窗口模式的信息
        if (!winInfoMatchFlag)
            return 0
        
        pName := workWinInfo.processName
        cName := workWinInfo.class
        ; 返回是否满足资源管理器窗口特征 (用或连接)
        return (pName == 'explorer.exe' || cName == "CabinetWClass" || cName == "ExploreWClass")
    }

    PluginHelper.addPluginToIntelligentMode(this.name,
        "匹配资源管理器",
        matchHandler,
        (obj, *) => PluginHelper.Utils.tip(this.name, obj.title)
    )
}

匹配资源管理器