惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
IT之家
IT之家
Last Week in AI
Last Week in AI
J
Java Code Geeks
L
LangChain Blog
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
博客园 - Franky
博客园 - 司徒正美
月光博客
月光博客
博客园 - 叶小钗
Vercel News
Vercel News
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
H
Help Net Security
G
Google Developers Blog
D
DataBreaches.Net

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
用JS制作你的第一个PopClip插件 - 少数派
2022-05-24 · via 少数派

序言

PopClip是Mac平台上的一款文本增强软件,可以与用户光标所勾选的文本进行交互,实现很多复杂的文本处理功能,并与其他软件进行联动。

PopClip本身只是一个提供文本交互接口的平台,其主要文本处理功能是通过安装各种插件进行实现。官方插件市场上已经提供了大量精心挑选的插件,能够满足基本的文本处理需求,同时也提供了插件开发文档,供用户根据自己独特的需求进行客制化插件开发。

鉴于平时从PDF文档中复制代码经常会出现多余的空行,官方插件市场上又没有去除空行的插件,于是决定自己开发一个,顺便也练练手,为以后更复杂需求的插件开发进行技术积累。

目前PopClip插件的可以通过Snippets、快捷指令、AppleScript、JavaScript、Shell等方式进行开发。本来想使用自己最顺手的python,但是经过初步尝试以后发现,python脚本想要与PopClip进行交互只能通过环境变量的方式,很不方便且功能受限。最终还是通过接口更为丰富的JavaScript脚本。

文件结构

插件的文件结构如下:

RemoveNoneLine
├── Config.json       # 插件的配置文件
├── README.md         # 插件的说明文档
├── icon.png          # 插件的图标
└── removeNoneLine.js # 实际运行代码的脚本文件

配置文件

{
  "popclip version": 3785,
  "identifier": "cn.siriyang.popclip.extension.removeNoneLine",
  "name": "去除空行",  
  "icon": "icon.png",
  "javascript file": "removeNoneLine.js"
}

按照官方开发文档的要求,配置文件是PopClip插件必备的文件,其文件格式有多种,这里我选择个人比较喜欢的json格式进行编写。

在配置文件中我仅填写了几个关键字段,并选择以外部文件的方式运行JavaScript代码,这样将代码与配置文件分离,代码编写起来要清晰很多。

脚本文件

//文本输入
const lines = popclip.input.text.match(/[^\r\n]+/g) // 按行读取

//文本转换
var res=[]

for( var i=0; i<lines.length;i++){ //遍历所有行
    if(lines[i].replace(/^\s+|\s+$/g,"").length>0){ // 判断是否是空行
        res.push(lines[i]) // 保留非空行
    }
}

//文本输出
popclip.pasteText(res.join('\n')) // 将所有行拼接并粘贴

虽然整个去除空行的代码很简单,但却具备文本输入、文本转换、文本输出的完整流程:

  1. 先将光标勾选的文本按行一行行读入;
  2. 然后对每一行去除空格后再判断其长度是否大于0,将非空的行保留下来;
  3. 在最后使用换行符进行拼接,再将修改好的文本粘贴替换光标勾选的文本。

打包安装

当代码编写完毕以后就可以开始打包安装了。PopClip插件的打包安装方法很简单,只需要修改文件夹后缀为.popclipext 即可将其转换为一个插件安装包,然后双击进行安装。

打包安装演示

在安装自制或第三方插件的时候PopClip默认会弹出警告窗口,以防止安装未知的插件造成系统安全问题。由于在开发过程中会反复安装测试,官方提供了关闭警告窗口的方法,需要在终端中运行下面的命令,然后重启PopClip。

defaults write com.pilotmoon.popclip LoadUnsignedExtensions -bool YES

同理,当你在网上下载一个PopClip插件以后,只需要将.popclipext后缀去掉即可转换为文件夹查看其中的源码进行学习改造。对于在官网下载的插件后缀为.popclipextz ,需要先将其改为.zip在解压得到.popclipext

效果测试

插件使用演示

结语

通过本次去除空行插件的简单案例尝试,完成了PopClip插件完整的开发流程。文本输入、文本转换、文本输出的基本范式确定下来以后,之后开发新的插件只需要调整相应模块即可。当然PopClip插件还有过滤器、参数设置等更为复杂的功能,等以后有需求的时候再针对性查询文档学习。

这是我在少数派上发布的第二篇文章,距离第一篇文章已经过去了快一年的时间,这一年内一直在忙于论文和求职上面,现在总算是赢来了一个短暂的空档期,可以抽点时间专心写作了。虽然中途也有写过几篇文章发在自己的博客上,但都不适合少数派平台,之后的话准备多写一些自动化、效率工具以及数据管理方向的文章。

原文链接