美文网首页launchbar程序员MacTribe(如何优雅的使用Mac)
如何开发1个LaunchBar action-自己动手,丰衣足食

如何开发1个LaunchBar action-自己动手,丰衣足食

作者: 6593443e12c1 | 来源:发表于2017-04-13 23:41 被阅读576次

最近看到1个效率启动神器 LaunchBar
详细可以查看 LaunchBar,加速并简化 Mac 操作的必备利器 | Matrix 精选

在体验过程中,体会到Instant Send功能非常强大,可以把mac下各个独立的应用,脚本和服务无缝的连接起来提升mac使用体验。
随着深入使用发现launchBar无论是自带还是三方的action实在是太少了,远没有alfred那么多的可供选择,翻了下action的开发资料,开发1个action并不难。
本文写1个杀死进程的action抛砖引玉,希望能帮助大家快速上手,编写提高自己工作效率的插件

执行效果


准备工作

通读LaunchBar 6 Developer
主要了解action的

  1. 配置
  2. 支持的脚本和代码示例
  3. 脚本输出格式

脚本类型大家可以选择自己擅长的,我个人习惯ruby,所以示例选用的脚本是ruby

步骤

新建1个Action并配置

LaunchBar弹出菜单中选择 “Index” -> “Show Index”


按照图中标的打开Action Editor


按照文档和上面2张图,填写基本配置
这里需要特别标注,在开发过程中最好勾选Enable Debug Log,通过系统程序“控制台”查看输出日志

接下来看脚本配置页面


这里做一下说明

Live feedback enabled   # 立即执行,并返回
Keep window active      # 保持launchBar的输入框激活状态
Requires argument           # 需要参数 
Accepts string argument # 字符串类型
Returns result          # 返回类型,这里选择item,列表形式返回

默认执行的脚本为default.rb文件

编写代码

Action Editor左侧的列表中,右键 Kill Process action,执行“Show in Finder”功能,之后 右键 KillProecss.lbaction文件执行“显示包内容”

当然大家也可以在shell中执行

open ~/Library/Application\ Support/LaunchBar/Actions/KillProcess.lbaction/Contents/

编辑Scripts目录下的default.rb文件

#!/usr/bin/env ruby
#
# LaunchBar Action Script
#
require 'json'

items = []
# 进程名
process_name = ARGV.first
# 获取 ps -eo .... | grep -i 进程名 的返回值
results = IO.popen("ps -eo pid,ppid,%cpu,%mem,stat,start,ucomm,comm | grep -i #{process_name}").readlines

# 拆分返回值
results = results.map do |result|
  result.delete("\n").split(' ')
end

# 得到进程pid
pids = results.map { |res| res[0] }

# 过滤掉子进程,只保留父进程
results.delete_if { |res| pids.include? res[1] }

# 根据 action 需要格式 生成返回值
# 这里 需要注意的是 action 和 actionArgument 对应为后续执行的脚本和传递参数
results.each do |result|
  items << {
    title: result[6],
    subtitle: "cpu: #{result[2]}% mem: #{result[3]}% #{result[7]}",
    action: 'kill.rb',
    actionArgument: "#{result[0]},#{result[6]}"
  }
end
puts items.to_json

在default.rb同一目录中新建kill.rb文件,输入代码

require 'json'
pid, name = ARGV.first.split ','
`kill -9 #{pid}`
puts [{title: "#{name} killed"}].to_json

至此,1个杀死进程的action就完成了

说点什么

写完以后想和大家分享,看了下官方论坛的action板块,发帖量少的可怜,大都是很老版本的。
Google搜索,结果也不多。
估计还是LaunchBar上手有一定难度影响的。

我建了个launch bar action github仓库,欢迎大家在issue里留言自己希望开发的功能。大家多交流

相关文章

网友评论

    本文标题:如何开发1个LaunchBar action-自己动手,丰衣足食

    本文链接:https://www.haomeiwen.com/subject/jnviattx.html