Alfred workflow - Browser Switcher

2016-03-09 05:26:50 +08:00
 dearrrfish

因为 https://www.v2ex.com/t/258892 请求的动机开始写的,这两天用 Javascript 重写了一下(因此只支持 OS X Yosemite+)。目前实现以下功能:

具体说明请移步 Github

Github: https://github.com/dearrrfish/browser-switcher-alfredworkflow
Packal: http://packal.org/workflow/browser-switcher

4014 次点击
所在节点    Alfred
16 条回复
allan888
2016-03-09 06:04:53 +08:00
bug 有点多的感觉,我反复 bss 几次,感觉有一半的概率会关掉当前的,但是没有打开另一个浏览器的新 tab
dearrrfish
2016-03-09 06:21:11 +08:00
r#1 @allan888 感谢反馈,貌似是没有判断目标 Safari window 是不是浏览器。
allan888
2016-03-09 07:37:00 +08:00
@dearrrfish 修好了 at 一下我呗,这个真心挺有用的。
elviscai
2016-03-09 09:33:10 +08:00
赞赞赞!!!

再搞搞就可以卸载掉 PopClip 了——所以这个 Workflow 可以考虑更名为「 PopFred 」?:p
dearrrfish
2016-03-09 09:59:54 +08:00
r#3 @
@allan888 已更新,欢迎继续帮忙抓虫:P
allan888
2016-03-09 10:33:03 +08:00
@dearrrfish 感觉好极了。
elviscai
2016-03-09 10:53:19 +08:00
报个 copy 的 bug :

在 Chrome 中进行 copy 时,拷贝出来的内容会带上前一条的剪贴板内容,如:

http://www.packal.org/workflow/browser-switcher # 当前 Chrome Tab 的 URL
Browser Switcher | Packal # 当前 Chrome Tab 的 Title
http://v2ex.com/t/262063%23reply4%0AAlfred%20workflow%20-%20Browser%20Switcher%20-%20V2EX%0A # 上一条的剪贴板内容(不一定是上一个 copy 的操作)
tmacshuai
2016-03-09 10:56:36 +08:00
不错,使用中。
elviscai
2016-03-09 11:01:16 +08:00
@elviscai 补充一句,如果当前有选中文字就不会出现这个情况,不选中文字即可复现。
atan
2016-03-09 11:08:48 +08:00
我这里好像不行:
[ERROR: alfred.workflow.action.script] [{"name":"switch","options":{"clone":false,"dedupe":false,"reverse":false,"clips":{}}}]
main.js:0:7230: execution error: Error on line 1: TypeError: undefined is not a function (evaluating 'Object.assign(o,{from:i,to:a})') (0)
dearrrfish
2016-03-09 12:45:54 +08:00
@elviscai
@atan
烦请更新到 v0.2.2
elviscai
2016-03-09 13:34:16 +08:00
@dearrrfish 一个小小小 bug :
1. 剪贴板为空时,进行选中文字的 copy 操作,会出现如下状况——剪贴板历史中(在最终结果之前)会多一条「选中文字」的拷贝记录。
2. 剪贴板不为空时,先 bss 一下,然后马上进行选中文字的 copy 操作,也会出现上述状况。
3. 剪贴板不为空且不进行 bss 操作的话,不会出现该状况。

我用的剪贴板历史工具是 Unclutter 和 Alfred-Features-Clipboard 。
dearrrfish
2016-03-09 14:18:15 +08:00
r#12 @elviscai
谢谢反馈,不知道你是在哪个当前 app 内进行拷贝操作?

关于「拷贝选中文字」这个操作,我是这样实现的:
- 如果当前 app 是 Safari/Chrome, 会执行 Javascript 语句 `"" + getSelection()` 来获取选中文字,这种情况应该不会出现重复的拷贝记录。
- 其他 app, 因为没有通用的 standard interface 来判定是否有 selection ,会强制调用一次 `SystemEvents.keystroke()` 发送 `cmd + c` 来尝试获取可能存在的 selection (我猜这应该就是那次多余的拷贝记录)。之后会比较拷贝前后剪贴板内容是否变化来判断是否存在;如果存在,在从当前剪贴板获得选中拷贝之后,还会再进行一次 copy(backupClipboard) 来恢复之前的内容。之所以要恢复是因为,除了 bsc 之外, bss 和 bso 也会用到同样的方法来获取 selection ,而这两个 action 用户是不希望当前剪贴板内容被更改的,例如你选中带 link 的文字用 bso 打开而不需要复制。因此在这种情况下可能会有一些重复拷贝的历史记录。

看看以后能不能找到通用的获取选中文字而不需要通过剪贴板来中转的接口吧……
elviscai
2016-03-09 14:30:57 +08:00
@dearrrfish 忘记说了,上述状况在我的 Safari 9.0.3 (11601.4.4) 和 Chrome 49.0.2623.75 beta (64-bit) 里都重现惹……
dearrrfish
2016-03-09 14:46:39 +08:00
r#14 @elviscai 那挺奇怪的,我清空剪贴板以后试了一下 Safari 和 Chrome ,并没有没有出现单独复制「选中文字」的记录。(没有 Unclutter ,只是从 alfred clipboard 里看)
elviscai
2016-03-09 15:30:34 +08:00
@dearrrfish 额……是我的软件环境问题……

「罪魁祸首」是 PopClip ,开启 PopClip 的话就会出现这个情况,关了就没事儿了…… Orz

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/262063

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX