write_file#
[CN]
该 Script Filter 的功能是让用户将文本写入特定文件. 该例子用来展示如何实现按下回车后执行任意 Python 逻辑. 该技巧可以用来实现按下回车后做到任何事情, 因为底层就是一个 Python 脚本.
其原理如下:
我们这里多了一个 WriteRequestHandler 的 handler. 这个 handler 并不会跟任何
Script Filter 所对应, 而是仅仅作为一个 CLI 命令行接口而存在. 这样我们在其他的 handler 中
只要将 item 之后的 action 定义为 Run Script, 那么就可以按下回车后用 bash 来执行任何
Python 逻辑. 而这个 bash command 就是 item 的 argument. 这个 WriteRequestHandler
则是实现了 bash command 所对应的功能.
WriteRequestHandler 实现了将任意 content 写入 file.txt 的功能. 并且在
encode_query() 中实现了如何将 main 中的参数编码成字符串的函数.
Handler 则实现了 Script Filter 的功能.
在 Alfred Workflow 的 Canvas 界面中 Script Filter 的设置如下:
Keyword: afwf-example-write-file, Argument Required
Language: /bin/bash
Script: python main.py ‘write_file {query}’
连接一个 Utilities - Conditional 的控件, 条件是
{var:run_script}is equal toy.连接一个 Actions - Run Script 的控件, Script 的参数是
{query}.连接一个 Utilities - Conditional 的控件, 条件是
{var:send_notification}is equal toy.- 连接一个 Outputs - Post Notification 的控件, Title 的参数是
{var:send_notification_title} Subtitle 的参数是
{var:send_notification_subtitle}.
- 连接一个 Outputs - Post Notification 的控件, Title 的参数是
- class afwf_example.handlers.write_file.WriteRequestHandler(id)[source]#
- main(content: str) ScriptFilter[source]#
[CN]
用来处理 Script Filter 的具体业务逻辑的主方法. 是一个抽象方法. 你需要 override 这个方法 并给予具体的实现.
该方法可以接收任何自定义的参数, 并必须返回一个
ScriptFilter对象, 里面包含了Alfred 对话框里的 Drop Down Menu 中的Item对象.在设计上, 这个方法应该着眼于核心业务逻辑, 并且可以被单元测试充分覆盖. 在单元测试中, 你可以调用这个方法传入各种可能得参数组合, 并返回一个
ScriptFilter, 然后检查里面的 items 是否符合预期.
- class afwf_example.handlers.write_file.Handler(id)[source]#
- main(content: str) ScriptFilter[source]#
[CN]
用来处理 Script Filter 的具体业务逻辑的主方法. 是一个抽象方法. 你需要 override 这个方法 并给予具体的实现.
该方法可以接收任何自定义的参数, 并必须返回一个
ScriptFilter对象, 里面包含了Alfred 对话框里的 Drop Down Menu 中的Item对象.在设计上, 这个方法应该着眼于核心业务逻辑, 并且可以被单元测试充分覆盖. 在单元测试中, 你可以调用这个方法传入各种可能得参数组合, 并返回一个
ScriptFilter, 然后检查里面的 items 是否符合预期.