因为工作原因, 第一次开始尝试使用OSX. 这里列一下一些主要的问题, 方便从GNU/Linux切换过来的的时候参考. 有了解决方案或新的问题我会继续更新. 这里的问题有一些只是习惯不一致, 我可以通过在Linux上配置新的使用习惯来调整自己, 另外一些则是功能缺失.
现在还没决定要不要长期用下去, 因为以下不少问题还解决不好. 当然OSX的优点也很明显:能够使用outlook客户端处理公司邮件/calendar; UI好看(主要是字体渲染); 不容易出硬件问题(连不上wifi/投影之类的).
由于在可见的未来仍然会主要使用Linux, 因此在两边维持尽量一致的key binding是很重要的. 这主要是针对核心程序(浏览器+终端)和窗口管理.
Chrome的key modifier有时候是cmd, 有时候是ctrl. 凡是menu bar点开能看到的快捷键, 都可以在System Preference - Keyboard - Shortcuts - App Shortcuts中进行override, 所以ctrl+T, ctrl+W等等都能用. 目前剩下的主要问题是, 打开新标签页的cmd+click, 不知道如何改为ctrl+click.
Linux可以设置gtkrc来统一所有gtk程序的key binding, 因此我可以在Chrome的所有输入框里使用emacs key binding编辑内容. 这个在OSX不会解决,目前还不太习惯.
natural scrolling的配置会同时apply在trackpad和外接鼠标上, 想为它们使用独立的配置需要下一个小程序并设为登录自启动.
暂时使用iTerm, 因为不知道什么更好. iTerm主要遇到如下问题:
zsh key binding有一些形如^f的escape sequence, 也即Linux里的Alt+f. 这个可以在iTerm Preference - Profiles - Keys里将Option设为Esc.
Alt和Meta的位置与普通键盘不一样. 为了避免影响其他OSX原生应用, 不想做全局remap, 毕竟这一点主要只对终端影响比较大. 但是在iTerm Preference - Keys里remap cmd和option之后, 会使得cmd+tab在iTerm里无法使用, 解决方案是禁止授予iTerm Accessibility权限.
要去System Preference - Keyboard - Shortcuts - App Shortcuts里禁用一些默认key binding, 不然经常容易误按. 我的一些window manager里习惯了的key binding会被默认成iTerm里别的功能.
字体渲染. iTerm Preference - Profiles - Text里分了ASCII和non-ASCII font, 这是作者设计失误, 擅自假设用户会想要对这两类字符使用不同字体(而不是其他两类或多类). 带来的一个结果是, 无法在iTerm里同时使用好看的中文字体+Powerline Symbol. 一个可能的解决方案是自己打包一个字体文件, 我有空再试试. 相比之下X11的字体渲染虽然视觉上不那么顺滑.. 但是支持fallback之类的功能, 不会有这种问题.
CLI环境. 目前主要就是设一些环境变量来解决. 最重要的是把gnubin放到PATH里, 避免使用OSX的鸡肋coreutils. 然而还是有一些工具缺失(比如gnu的top), 以后可能还会遇到其他问题.
在Linux我通过xset r rate
来改变按住键盘时的事件触发频率.
这个选项对工作的影响是从量变到质变的: 当经过一定时间的习惯, 键盘重复频率足够快时,
就不再需要vim的翻页功能了, 只要按住上下键即可. 然而OSX在系统设置里设到最大值也仍然有点慢.
主要的问题都在WM里, 本质是因为无论是windows还是OSX都没有一个像awesome或xmonad一样足够复杂的WM, 以至于很多本可以一两个键完成的事情需要多次操作甚至鼠标操作.
spectacle这个WM app带了少量的功能, 但跟programmable WM还是不能比. 另外OSX还带了很多distracting的动画.
举两个刚需的例子吧:
cmd+tab切换任务列表过长是很影响效率的. 然而搞不清哪些应用会出现在列表里:
大家的正常使用目的应该都是切换"活动的窗口", 然而一些未被关闭但没有活动窗口的僵尸程序也会出现在列表 里. 另外列表里永远有一个僵尸Finder, 不知道怎么办.
有很多应用, 我希望它们运行但不要被我切换到(也即在systray里默默运行). 不知道这在osx的wm里如何能够统一设置, 反而很多app(如wunderlist, dash)自己内部有一个"不让自己被切换到"的选项. 这是权责划分不明确, 而且此选项也work的不理想, 比如dash打开了此选项之后, menubar就跟着消失了.
类似的, 我希望放到其他desktop的应用不要被我切换到. 比如我在awesome里会把若干个聊天工具扔到一个desktop里, 把不太常用的ssh session扔到一个desktop里, 要用的时候手动切过去.这在OSX里很难设置. 最终我估计会寻找其他switcher作为替代品.
cmd+tab选择的是app. 然而正常工作切换的对象应该是窗口. 当一个app包含多个窗口时不确定哪个会被切换到,目前的观测是"智能切换":然而智能一般都有问题.. 比如我 chrome和terminal反复切换的好好的, 另一个chrome窗口里hangout收到条消息后, 下次切换就会跑到那边去..
我要把几个窗口从一个display移到另一个里. spectacle有移一个窗口的功能, 但是移完focus就跟过去了, 要somehow改变focus(通过鼠标或cmd+tab找到应用)才能再移下一个.. 而在awesome里我移完一个之后可以立刻用另一个键来改变focus所在的display, 或者即使要实现一个"转移所有窗口的display"的键绑定, 也只需要三四行config.