Mac 多屏幕窗口管理神器

使用多个显示器可以避免在任务窗口或应用之间来回切换,从而提高效率。然而随着工作空间的扩大,同时也带来了其它问题,包括:

  1. 使用鼠标的效率进一步降低;
  2. 活动窗口过多容易失去焦点;
  3. 更多时候是以上两点同时发生:找半天不知道鼠标指针在哪,多屏幕之间拖动、管理窗口变得更加困难。

不管你是不是 VIM 党,不停地在鼠标与键盘之间切换绝对是一件分心且低效的事,很多“懒人”宁可花时间记住数量庞大的组合快捷键(当然如果记不住也没关系,有一款作弊神器可以帮助你快速查看当前应用的快捷键:Cheatsheet),也不愿让自己的右手离开键盘。

虽然为了避免使用鼠标你甚至可以给 Chrome 装上 VIM 映射的插件,但总有些时候不得不依赖鼠标完成一些精确的点击、拖动等操作,然而根据心理物理学中著名的费茨定律(Fitt's law),鼠标移动时间与目标距离成正比,与目标大小成反比:

也就是说随着工作空间的扩大,使用鼠标的效率将会越来越低。除了鼠标的问题之外,当同时有多个应用窗口在你面前打开的时候,即使想要通过组合快捷键操作,也容易搞混当前捕获焦点的应用是哪个。当然就算有多个窗口重叠出现,你可以通过查看左上角工具栏所显示的应用名称来确定当前焦点,不过费茨定律对于视觉搜索也是同样适用的,对于连眼睛都懒得抬起来的人来说宁可通过 Command+Tab 尝试切换来找到当前焦点的应用。

不过这个问题可以通过另外一款作弊神器来解决:HazeOver

它可以让当前出于焦点的窗口正常显示,而其它所有窗口都蒙上一层半透明的黑纱:

macOS 提供了一个有趣的小功能,只要快速晃动鼠标就可以让指针放大,从而让你快速定位自己的鼠标。然而这点微小的工作远远无法弥补它在窗口管理上的不足。与 Windows 上贴边停靠、甩一甩甩掉其它窗口的功能相比,macOS 窗口左上角红黄绿的三个小圆点几乎毫无存在感,抛开面积太小不易点击不说,绿色的放大按钮只能进入或退出全屏模式,虽然后来加入了长按进入双全屏模式,也基本上是个鸡肋:在小屏幕笔记本上没什么用,有扩展屏的时候更没必要用。于是乎在苹果强大的生态号召力之下出现了许多第三方解决方案,但是我的需求很简单,我觉得将一块屏幕划分成皿、田之类的格局没有任何必要,我只需要最简单的功能:

  1. 可以最大化但不是全屏;
  2. 可以占据左半边或右半边;
  3. 可以在不同显示器之间快速移动。

前两条根本就是 Windows 的基本功能,我尝试了一些窗口管理应用之后,最终选择可以通过代码精确配置的 Hammerspoon,与一般的工具不同,首先它是开源的,其次使用 Lua 脚本作为配置文件。

我的配置文件在 这里 Gist-hammerspoon.init.lua,保存到本地~/.hammerspoon/init.lua,然后 Reload Config 即可。Hammerspoon 还提供一个 Console 界面,可以方便调试:

配置文件说明

-- 一般组合键为 Shift + Command + ?
local hyper = {'shift', 'cmd'}

-- 最大化窗口
-- 快捷键为 Shift + Command + ↑
hs.hotkey.bind(hyper, 'up', function()
    hs.grid.maximizeWindow()
end)

-- 让窗口占据左半边(Windows 下面的向左贴边停靠)
-- 快捷键为 Shift + Command + ←
hs.hotkey.bind(hyper, "Left", function()
  local win = hs.window.focusedWindow()
    local f = win:frame()
    local screen = win:screen()
    local max = screen:frame()

    f.x = max.x
    f.y = max.y
    f.w = max.w / 2
    f.h = max.h
    win:setFrame(f)
end)

-- 向右停靠类似

-- 将当前窗口移动到第 n 个屏幕
-- 并最大化窗口
-- 快捷键为 Ctrl + Command + 屏幕数字
local hyper2 = {'ctrl', 'cmd'}
moveto = function(win, n)
  local screens = hs.screen.allScreens()
  if n > #screens then
    hs.alert.show("No enough screens " .. #screens)
  else
    local toWin = hs.screen.allScreens()[n]:name()
    hs.alert.show("Move " .. win:application():name() .. " to " .. toWin)
    hs.layout.apply({{nil, win:title(), toWin, hs.layout.maximized, nil, nil}})
  end
end

hs.hotkey.bind(hyper2, "1", function()
  local win = hs.window.focusedWindow()
  moveto(win, 1)
end)
hs.hotkey.bind(hyper2, "2", function()
  local win = hs.window.focusedWindow()
  moveto(win, 2)
end)
hs.hotkey.bind(hyper2, "3", function()
  local win = hs.window.focusedWindow()
  moveto(win, 3)
end)

录屏演示效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容