12月锁事

用的Todolist 奇妙清单里面有一个叫我慢的清单,里面记录了一些平时比较人肉没有自动化的场景。这个月完成了这个清单里面的几项任务:一键保存当前Chrome Tab打开的urlShadowsocksPAC中、运行脚本调整屏幕布局等。

ShadowsocksHostSaver

目前在Mac上经常使用Shadowsocks来,Shadowsocks通过PAC(Proxy auto-config)来判断哪些url需要使用代理。日常使用中偶尔会遇到这样的场景,有些域名在PAC中没有,需要手动添加。虽然这样的场景不多,但是老是同样的人肉方法,会让人觉得有些无趣。想过使用Chrome Extension,但是Chrome Extension严格运行在Sandbox中,无法直接访问和更改系统中的文件,需要再启动一个Daemon进程来操作PAC文件,但是如果这样,解决方案就显得过于复杂了。

回头想下,逻辑就分为两步:

  • 获取Chrome中当前的url,并获取对应的hostname
  • hostname添加到PAC

最终使用Applescript实现第一步,使用BSD sed实现第二步,整个过程用Python脚本串起来。

hmscreens

在公司使用机械键盘时,内置屏幕和外接屏幕的布局是左右;不使用机械键盘的时候,布局是上下;不想重复地这样调整,想尝试看有没有办法能够自动化。最终还是从StackExchange上找到了答案,这个问题中提到的hamsoftengineering开发的hmscreens和想解决的问题简单是一模一样。

不太一样的是,hmscreens中其它屏幕和主屏幕的关系只能是left、right、top、bottom,而我需要的是需要准确的Global Position,所以对hmscreens稍作了修改,最终完成了可以通过-othersGlobalStartingPosition参数来配置其它屏幕位置的工具

现在想把外接屏幕放到内置屏幕的右上角只需运行脚本:

1
hmscreens -setMainID 69732928 -othersGlobalStartingPosition 1280,300

sleepwatcher

Mac上有个Application,需要访问KeyChain里面一些内容,每次从休眠状态恢复的时候,SecurityAgent就会弹出比较恼人的prompt,不堪其扰。其实,只要进行休眠状态的时候,关掉这个Application即可,所以需要找到一个方法,在Mac进行Sleep的时候触发一个脚本。

准确地提出了问题,其实就解决了问题的一半儿了。一如既往,从Stackoverflow上找到了答案sleepwatcher能够在系统sleep/wakeup的时候触发执行一个脚本(脚本路径默认是~/.sleep~/.wakeup),和我的需求一模一样。于是,在~/.sleep中添加关闭该Application的命令,问题解决。

最后

7月份买了Alfred PowerPack之后,其实一直没怎么用,就写了个自动登录VPN的workflow。最近又加了一些workflow,基本都是加快捷键。除了支持快捷键执行一些脚本之外 ,Alfred还可以支持执行一些System Command,比如说Sleep,这就很好地解决了之前提到的锁屏的问题。

做好的产品;帮助周围的人

参考

[1] http://apple.stackexchange.com/questions/249447/change-display-arrangement-in-os-x-programmatically
[2] http://www.hamsoftengineering.com/codeSharing/hmscreens/hmscreens.html
[3] http://stackoverflow.com/questions/13534167/execute-command-just-before-mac-going-to-sleep
[4] http://www.bernhard-baehr.de/