当前位置: 首页 > 科技观察

使用ScriptKit优化日常工作流程

时间:2023-03-17 22:38:53 科技观察

code{font-size:0.75rem!important;宽度:100%;空白:预包装;}pre{显示:flex;}p{底部边距:1rem;我们的日常工作往往充满了各种琐碎的工作:打开项目、搜索资料、查看文档等。这些工作不断地侵蚀我们的注意力,降低我们的工作效率。ScriptKit[1]是一个功能强大、易于使用的启动器(如Mac上的Alfred启动器)。它可以帮助我们快速完成这些琐碎的工作。本文是实现以下任务的演示:文本搜索。打开网站。使用搜索引擎搜索信息。打开项目。查看代码参考。接下来开始搭建吧~Step1InstallScriptKit从官网[2]下载安装包并安装。打开ScriptKit后,ScriptKit被最小化。ScriptKit有两种展开方式:快捷键command+;。单击页眉状态栏中的图标。步骤2创建脚本进入ScriptKit,输入脚本名称,回车完成脚本创建。我们的Demo的名称是nav。ScriptKit创建以下脚本文件nav.js//Name:navimport"@johnlindquist/kit"其中://Name:nav:脚本的名称。import"@johnlindquist/kit":导入基础库。有必要。Step3运行脚本在上面的脚本中添加内容,div('HelloWorld!')://Name:navimport"@johnlindquist/kit"div('HelloWorld!')ExpandScriptKit(command+;),Enternav:回车运行,出现如下结果:Step4制作列表的实现代码如下:constselected=awaitarg('请选择',[//Text{name:'命令快速创建一个React项目',description:'createdwithcra',tag:'text',value:{type:'text',content:'npxcreate-react-appprojectname',}},//link{name:'Vue3文档',description:'Vue3官方文档地址',tag:'link',value:{type:'url',content:'https://cn.vuejs.org/guide/introduction.html'}},//搜索引擎{name:'Bing',description:'用Bing搜索信息',tag:'SearchEngine',value:{type:'search-engine',content:'https://cn.bing.com/search?q={q}'}},//Project{name:'JoJo石海官网项目',description:'用VSCode打开这个项目',tag:'Project',value:{type:'project',content:home('project/jojo/website')}},//代码参考{name:'React相关tstypewriting',tag:'代码参考',预览:async()=>{constcode=awaithighlightCode({contents:codeContent,language:'javascript'})returncode},value:{type:'search-engine',content:'https://cn.bing.com/search?q={q}'}},])列表中的每个选项对应上述数组中的一项内容,与代码的对应关系如下:value为用户选择后程序接收到的值。使用type来标识不同的项目类型。后面会根据不同的类型做不同的处理。item中的preview是设置选中时的预览内容。如下图所示:上图中用于代码预览的第三方包:highlight.js。实现代码如下:constwrapCode=(html)=>`code{font-size:0.75rem!important;宽度:100%;空白:预包装;}pre{显示:flex;}p{底部边距:1rem;${html.trim()}`;consthighlightCode=async({contents,language})=>{const{default:highlight}=awaitnpm(“突出显示.js”);让highlightedContents=语言?highlight.highlight(contents,{language}).value:高亮。highlightAuto(内容).value;返回wrapCode(highlightedContents);};如您所见,要在脚本中使用npm包,只需编写:awaitnpm("packagename")。Step5选择后处理不同类型的内容处理方式不同:选中文本:将文本复制到剪贴板。检查链接:在浏览器中打开链接。选择搜索引擎:输入关键词,使用搜索引擎进行搜索。所选项目:在VSCode中打开项目。代码如下:const{content,type,}=selectedswitch(type){//Textcase'text':copy(content)//将文本复制到剪贴板。break//linkcase'url':browse(content)//用浏览器打开。break//搜索引擎案例'search-engine':constquery=awaitarg('keyword:')consturl=content.replace('{q}',encodeURIComponent(query))browse(url)break//itemcase'project':exec(`code${content}`)//使用VSCode打开。break}上面的copy、browse、exec是ScriptKit的内置函数。ScriptKit有很多内置函数。Step6Details优化自定义脚本的名称,添加描述信息代码如下://名称:Navigation//描述:效果如下:设置启动脚本的快捷键//Shortcut:cmdshift0按住cmd+shift+0,可以直接运行脚本。添加交互反馈将文本内容复制到剪贴板,添加交互提示:copy(content)//将文本复制到剪贴板。newapplescript(`displayalert"Thecontenthasbeencopyedtotheclipboard"`)完整代码:这里[3]其他功能本文介绍的只是ScriptKit功能的冰山一角。它可以通过AppleScript[4]与本机应用程序交互。例如,以下脚本关闭所有Finder窗口:newapplescript(`tellapplication"Finder"settheWindowListtowindowsrepeatwithi从1到theWindowList中的项目数endrepeatendtell`)调用接口查询网上信息,生成摘要并展示。比如查询图书信息letquery=awaitarg('Searchforabooktitle:')//这个API可能有点慢。等待几秒钟letresponse=awaitget(`http://openlibrary.org/search.json?q=${query}`)lettransform=({title,author_name})=>`*"${title}"-${author_name?.length&&author_name[0]}`letmarkdown=response.data.docs.map(transform).join('\n')inspect(markdown,'md')使用计划任务来做需要定期做的事情。每天提醒每2小时喝一次水。FAQ如何调试?inspect(content)支持哪些全局对象?常用://显示内容div//渲染html内容md:Markdown//渲染markdown内容terminal:(script:string)=>Promise//打开命令行,执行脚本//接口调用。我使用Axios。get:AxiosInstance["get"]put:AxiosInstance["put"]post:AxiosInstance["post"]patch:AxiosInstance["patch"]//文件操作readFile:typeoffsPromises.readFilewriteFile:typeoffsPromises.writeFileappendFile:typeoffsPromises.appendFilecreateWriteStream:typeoffs.createWriteStreamreaddir:typeoffsPromises.readdircd:typeofshelljs.cdcp:typeofshelljs.cpchmod:typeofshelljs.chmodls:typeofshelljs.lsmkdir:typeofshelljs.mkdirmv:typeofshelljs.mv//访问数据db:all参见此处[5]。参考资料[1]ScriptKit:https://www.scriptkit.com/[2]官网:https://www.scriptkit.com/[3]这里:https://github.com/iamjoel/rocket/blob/main/code/glue/script-kit/intro/nav.js[4]AppleScript:https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html[5]此处:https://github.com/johnlindquist/kit/discussions/187