Alfred 中如何做自定义搜索?

感谢这篇文章 https://www.evanlovely.com/utilities/alfred/snippets/ 给了我基本的框架

背景


我想让 DailyNotes 支持笔记搜索,但是不希望把搜索功能耦合到 DailyNotes 代码中。使用第三方搜索工具是最好的,比如 grep 命令其实就很够用了。为了能够调用 grep 命令,并能方便地显示搜索结果,使用 Alfred 是个不错的主意。之前折腾了几次,没有成功,昨晚突然又想尝试下,终于找到了方法。其实,方法就藏在 Alfred 的文档中,只不过没心思细看。

过程


Alfred 中调用脚本处理数据并输出结果的工作原理为:

  1. 通过命令激活处理程序。下例中,是呼唤出Alfred 框后使用 s 命令。为了更方便,还可以定义 Hotkey,比如双击Ctrl,就可以把选中的文字作为关键词,输入到 Script Filter 中进行搜索。
    在这里插入图片描述
  2. 处理程序中调用脚本。调用脚本时可以向脚本传递参数。
    在这里插入图片描述
    {query} 指的是查询参数,例如下图中 s 是激活命令,Snowflake 就是查询参数。
    在这里插入图片描述
  3. 在脚本里, 可以做任意的处理,输出一个 <items> 结构。例如:
export dir="$1/"

echo "<items>"

if [ "$2" ] 
  then
    export QUERY="$2"
    find "$1" -maxdepth 1  -type f -exec grep -i -l "$2" {} + | sort -r | xargs -I {} \
      sh -c 'echo "<item arg=\"$1\" type=\"file\" uid=\"$1\"><title>$(echo "${1/$dir/}")</title><subtitle>$(grep -i "${QUERY}" "$1" | head -n 1)</subtitle><icon type=\"fileicon\">$1</icon></item>"' -- {}

  else
    # No argument provided, list all
    echo '<item arg="$dir/PeopleSoft.md" type="file" uid="$dir/PeopleSoft.md"><title>PeopleSoft.md</title><subtitle><![CDATA[人是最重要的!]]></subtitle><icon type="fileicon">$dir/PeopleSoft.md</icon></item>'
fi

echo "</items>"

这里的处理关键就是构造 <items>,里面的每一个 <item> 就是显示在 Alfred 结果中的一个条目。例如下图中,就包含了 4 个 <item>

在这里插入图片描述
上面的脚本有个细节:里面有个逻辑判断 if [ "$2" ] ,这是因为当我们输入 s 后,Alfred 就会被立即激活,并且立即开始以空参数的方式调用脚本,此时建议用一个轻量的 <item> 响应一下查询即可,否则可能会导致响应很慢。

为了避免每输入一个字符就触发一次脚本,可以双击 Script Filter,然后编辑触发行为(Run Behavior),触发下一个脚本时杀掉上一个脚本,等待输入完成后再触发脚本等。这么做,响应速度回差一些,但是够用。
在这里插入图片描述

  1. 就这么简单。为了能够打开搜索到的文件,在 Alfred 中建立一个工作流即可:
    在这里插入图片描述
    完工。

Extension


假设我实现了一个搜索引擎,那么我可以用脚本调用搜索引擎获得结果,然后把结果组织成 <items>,最后在 Alfred 中对接一个 Open URL 的工作流即可。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,设置Alfred文翻译功能需要进行以下步骤: 1. 打开Alfred设置界面,可以通过点击帽子图标右上角的齿轮标识来打开。 2. 在设置界面,找到翻译功能相关的选项。 3. 在步骤4,填写Google翻译的网址,将网址修改为https://translate.google.com/?hl=zh-CN&sl=en&tl=zh-CN&text={query}&op=translate。这样就可以实现将英文翻译为文的功能。 4. 保存设置并关闭设置界面。 这样,你就可以在Alfred使用文翻译功能了。使用方法是在Alfred输入自定义的翻译命令关键词,然后输入需要翻译的内容,即可进行文翻译。例如,输入"tren apple"就可以将单词"apple"翻译为文。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [Alfred 配置google翻译](https://blog.csdn.net/zxcasd11/article/details/115180298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [苹果电脑提高工作效率alfred 5文](https://blog.csdn.net/m0_72498124/article/details/127731895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值