关于macOS:在Mac OS X上关注跟随鼠标(加上自动提升)

Focus-follows-mouse (plus auto-raise) on Mac OS X

(我不想听到我想要那个有多疯狂!:)

焦点跟随鼠标也称为点对焦点,指针焦点和(在某些实现中)草率焦点。 [添加其他术语,使其更易于搜索!] X鼠标


您可以通过在命令行中发出以下命令来对Terminal.app进行操作:

1
defaults write com.apple.Terminal FocusFollowsMouse -bool true

对于X11应用程序,您可以执行以下操作:

1
defaults write com.apple.x11 wm_ffm -bool true

在Snow Leopard中,改用以下命令:

1
defaults write org.x.X11 wm_ffm -bool true

显然有一个名为CodeTek Virtual Desktop的程序可以在全系统范围内对其进行仿真,但是它的价格为$$(而且他们从来没有为OSX Leopard推出一个版本)。


史蒂夫·耶格(Steve Yegge)不久前写了一篇关于此事的文章,在那儿他尝试并未能写出合适的扩展名。从那以后,我一直试图为OS X找到关注焦点-鼠标的应用程序,但也失败了。


尽管这并不是一个完整的解决方案,但是OSX(10.11)内置的两个便捷操作是:

??单击(control-option-click)-在不提高窗口的情况下切换焦点

?单击(命令单击)-在窗口中单击而不切换焦点

不确定何时引入这些快捷方式,因为我找不到在任何地方写的快捷方式。


焦点跟随鼠标不是OS X的特别合适的输入方法,因为其菜单栏被设计为位于屏幕顶部。当您将鼠标移出应用程序窗口以转到菜单时,如果它在途中与任何其他应用程序的窗口交叉,则菜单会更改。

因此,是的,在回应dreeves的评论时,它对于Terminal(或桌面上的任何其他单个应用程序)非常有效,因为它将影响的唯一其他窗口是Terminal窗口,因此菜单在切换窗口时不会改变。它对X11很好用,因为X11应用程序通常将菜单栏嵌入到窗口中,因此您不必离开窗口即可访问它们。

当然,您可以通过在焦点更改和/或菜单切换之前引入人为的延迟来解决菜单更改问题,但是这种方法永远无法像其他台式机那样工作。


菜单问题是传统的焦点跟随鼠标无法正常工作的唯一原因。

这是另一种选择:在键盘上按下某个键之前,不要改变焦点。这将覆盖95%的关注焦点-鼠标用例,并使这个老的curmudgeonly X用户真的很高兴。我不知道要在Chrome中浏览网页多少次,然后按Command-T打开新标签页,然后在终端中找到打开的标签页。如果在使用Mac的8个月内我的大脑没有动静,那就永远不会。


因此,我决定再次改进在MouseFocus.app上所做的工作,该程序仍然存在一些缺陷。这些现在已修复。我将整个名称重命名为" AutoRaise",以更好地反映此工具的功能:当您将窗口悬停在窗口上时,它将被提升到最前面(延迟选择)并获得焦点。该工具可在此处下载。要使用它,请将其复制到您的/ Applications /文件夹中,以确保其可执行(chmod 700 AutoRaise)。然后从Finder中双击它。要快速打开/关闭它,您可以使用下面的applescript并将其粘贴到automator服务工作流程中。然后通过"系统偏好设置" |"键盘" |"快捷方式"将创建的服务绑定到键盘快捷方式。

更新(29-03-2017):AutoRaise二进制文件已更新。如果在命令行上未指定任何延迟,则它现在还将在 same 主文件夹中查找AutoRaise.delay文件。当使用下面的applescript时,这特别有用,因为"启动应用程序"不支持命令行参数。延迟应以 50ms 20ms为单位指定。例如,要指定20ms的延迟,请在终端中运行以下命令一次:'echo 1>?/ AutoRaise.delay'

1
2
3
4
5
6
7
8
9
10
11
12
on run {input, parameters}
    tell application"Finder"
        if exists of application process"AutoRaise" then
            quit application"/Applications/AutoRaise"
            display notification"AutoRaise Stopped"
        else
            launch application"/Applications/AutoRaise"
            display notification"AutoRaise Started"
        end if
    end tell
    return input
end run

更新(18-04-2019):源https://github.com/sbmpost/AutoRaise

更新(05-06-2020):默认延迟已设置为2,并且减少了轮询时间。这些设置可防止在快速移动鼠标时(例如到达顶部菜单)意外的窗口升高。还添加了扭曲鼠标功能,并修复了内存泄漏。有关更多详细信息,请查看自述文件


紫水晶支持此功能。可以使用brew cask install amethyst轻松安装。

这是我使用的配置文件。除了聚焦跟随鼠标外,它还关闭了所有功能。将其保存到~/.amethyst

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
{
   "LAYOUTS":"----------------------",
   "layouts": [
    ],

   "MODIFIERS":"----------------------",
   "Valid modifiers are": [
       "option",
       "shift",
       "control",
       "command"
    ],

   "mod1": [
    ],
   "mod2": [
    ],

   "COMMANDS":"----------------------",
   "Commands are": {
       "cycle-layout":"Cycle layout to the next layout",
       "cycle-layout-backward":"Cycle layout to the previous layout",
       "focus-screen-1":"Focus the main window on the first screen",
       "focus-screen-2":"Focus the main window on the second screen",
       "focus-screen-3":"Focus the main window on the third screen",
       "focus-screen-2":"Focus the main window on the second screen",
       "focus-screen-3":"Focus the main window on the third screen",
       "focus-screen-4":"Focus the main window on the fourth screen",
       "throw-screen-1":"Throw the focused window to the first screen",
       "throw-screen-2":"Throw the focused window to the second screen",
       "throw-screen-3":"Throw the focused window to the third screen",
       "throw-screen-4":"Throw the focused window to the fourth screen",
       "shrink-main":"Shrink the main pane of the current layout",
       "expand-main":"Expand the main pane of the current layout",
       "increase-main":"Increase the number of windows in the main pane",
       "decrease-main":"Decrease the number of windows in the main pane",
       "focus-ccw":"Move window focus counter-clockwise on the current screen",
       "focus-cw":"Move window focus clockwise on the current screen",
       "swap-ccw":"Swap focused window with the next window going counter-clockwi$
       "swap-cw":"Swap focused window with the next window going clockwise",
       "swap-main":"Swap focused window with the main window of its screen",
       "throw-space-1":"Throw the focused window to the first space",
       "throw-space-2":"Throw the focused window to the second space",
       "throw-space-3":"Throw the focused window to the third space",
       "throw-space-4":"Throw the focused window to the fourth space",
       "throw-space-5":"Throw the focused window to the fifth space",
       "throw-space-6":"Throw the focused window to the sixth space",
       "throw-space-7":"Throw the focused window to the seventh space",
       "throw-space-8":"Throw the focused window to the eighth space",
       "throw-space-9":"Throw the focused window to the ninth space",
       "throw-space-8":"Throw the focused window to the eighth space",
       "throw-space-9":"Throw the focused window to the ninth space",
       "toggle-float":"Toggle the focused window between being floating and tiled"
    },

   "screens":"3",

   "cycle-layout": {
       "mod":"mod1",
    },
   "cycle-layout-backward": {
       "mod":"mod2",
    },
   "select-tall-layout": {
       "mod":"mod1"
    },
   "select-wide-layout": {
       "mod":"mod1"
    },
   "select-fullscreen-layout": {
       "mod":"mod1"
    },
   "select-column-layout": {
       "mod":"mod1"
    },
       "mod":"mod1"
    },
   "focus-screen-1": {
       "mod":"mod1"
    },
   "focus-screen-2": {
       "mod":"mod1"
    },
   "focus-screen-3": {
       "mod":"mod1"
    },
   "focus-screen-4": {
       "mod":"mod1"
    },
   "throw-screen-1": {
       "mod":"mod2"
    },
   "throw-screen-2": {
       "mod":"mod2"
    },
   "throw-screen-3": {
       "mod":"mod2"
    },
   "throw-screen-4": {
       "mod":"mod2"
   "throw-screen-4": {
       "mod":"mod2"
    },
   "shrink-main": {
       "mod":"mod1"
    },
   "expand-main": {
       "mod":"mod1"
    },
   "increase-main": {
       "mod":"mod1"
    },
   "decrease-main": {
       "mod":"mod1"
    },
   "focus-ccw": {
       "mod":"mod1"
    },
   "focus-cw": {
       "mod":"mod1"
    },
   "swap-screen-ccw": {
       "mod":"mod2"
    },
   "swap-screen-cw": {
    },
   "swap-screen-cw": {
       "mod":"mod2"
    },
   "swap-ccw": {
       "mod":"mod2"
    },
   "swap-cw": {
       "mod":"mod2"
    },
   "swap-main": {
       "mod":"mod1"
    },
   "throw-space-1": {
       "mod":"mod2"
    },
   "throw-space-2": {
       "mod":"mod2"
    },
   "throw-space-3": {
       "mod":"mod2"
    },
   "throw-space-4": {
       "mod":"mod2"
    },

       "mod":"mod2"
    },
   "throw-space-5": {
       "mod":"mod2"
    },
   "throw-space-6": {
       "mod":"mod2"
    },
   "throw-space-7": {
       "mod":"mod2"
    },
   "throw-space-8": {
       "mod":"mod2"
    },
   "throw-space-9": {
       "mod":"mod2"
    },
   "toggle-float": {
       "mod":"mod1"
    },
   "toggle-tiling": {
       "mod":"mod2"
    },
   "display-current-layout": {
       "mod":"mod1"
   "display-current-layout": {
       "mod":"mod1"
    },

   "MISC":"----------------------",
   "floating": [],
   "float-small-windows": false,
   "mouse-follows-focus": false,
   "focus-follows-mouse": true,
   "enables-layout-hud": false,
   "enables-layout-hud-on-space-change": false
}

现在可以在macOS中使用鼠标关注焦点,在我的情况下为Mojave,可以使用chunkwm。
请参阅此堆栈溢出响应以获取"不自动提高"解决方案。通过离开激活自动提高

1
chunkc set ffm_disable_autoraise         0

~/.chunkwmrc中。

编辑2019-09-12:

chunkwm已被yabai取代。安装:

1
2
3
4
5
brew tap koekeishiya/formulae
brew install yabai
mkdir -p ~/.config/yabai/
printf 'yabai -m config focus_follows_mouse autoraise' >> ~/.config/yabai/yabairc
brew services start yabai

Codetek的产品可以做到这一点,但他们从未发布过适用于Leopard或更高版本的版本。

MondoMouse可以执行焦点跟随鼠标的操作,但是不能自动抬起鼠标。
即使焦点跟随鼠标也坏了。
例如,它不能与Command-tab配合使用(如果您将Command-Tab切换到新应用程序并且不触摸鼠标,则它不应将焦点切换回鼠标指针碰巧的位置-我是可以肯定,我所见过的Linux中的每个实现都能正确实现,但MondoMouse却不能。

您可以仅对终端窗口启用焦点跟随鼠标(不自动升高)(只需在终端中执行以下操作):

1
defaults write com.apple.Terminal FocusFollowsMouse -string YES

对于X11 Windows同样如此:

1
defaults write org.x.X11 wm_ffm -bool true

(对于10.5.5之前的Mac版本,这是:

1
defaults write com.apple.x11 wm_ffm true

)

我不知道其他支持它的应用程序。


我目前使用的是MondoMouse,即使有它的怪癖,我也无法使用Mac。他们有免费试用版,我会推荐给所有人。

蒙多老鼠


chunkwm也支持这一点(默认情况下,我相信):
大块


有趣的是,Leopard具有默认情况下启用的一种焦点跟随鼠标(自动提升)功能。滚轮可在未聚焦的窗口中工作。


不幸的是CodeTek Virtual Desktop Pro不再开发,几年前该公司似乎已经倒闭了。

历史参考资料:http://www.codetek.com/ctvd/(不适用于新的OS X版本!)

历史评论:http://www.osnews.com/story/6144

使用CodeTek Virtual Desktop Pro,您可以获取"关注焦点"鼠标并禁用"自动提升",并且还具有用于虚拟桌面的Pager,这与Fvwm在Linux上的工作方式类似。它确实运行完美-我曾经购买的最好的软件。
它与所有应用程序一致地工作,并且切换应用程序,将窗口移动到不同的工作区以及在工作区中进行导航比在最新的OS X版本[10.6、10.7、10.8]中实现的方式容易得多。

不幸的是,在Mac OS X 10.5上,VirtualDesktop Pro停止工作,并且苹果公司似乎积极地确保CodeTek将不会继续在其上工作。

令人遗憾的是,苹果粉碎了CodeTek及其产品-Virtual Desktop Pro确实优于目前实现OS X工作区的方式。它基本上像LINUX上的Fvwm一样工作-超快速导航-无需不必要的点击或鼠标手势...

令我伤心的是,苹果决定了窗口管理器(Finder)的行为,并且似乎不再允许第三方替换Finder。


还有点击相关的问题。在OSX下,每次单击一个窗口时,它也会被升高,从而有可能隐藏其他窗口。从两个窗口(其中一个覆盖大部分屏幕)使用复制/粘贴时,这是有问题的。我喜欢保持一个全局(在所有工作空间中都有效)的记事本,从中我可以复制/粘贴内容(可以是命令,文本,待办事项等中的任何内容)。在OSX下,这具有挑战性。可以选择禁用点击升高功能。


在Mac中使用暂停功能。
转到辅助功能->键盘->辅助功能键盘(我在Catalina上)

点击这里获取更多信息

enter image description here

enter image description here


试试DwellClick。尽管这不是出于预期目的,但自动单击行为会产生类似于自动升高或焦点跟随鼠标的副作用。

就个人而言,我只在光标移动停止后才使用左键单击功能,但是还可以使用带有修饰符的单击和非常方便的窗口拖动辅助功能。

在浏览网页时,这也会让您感到沮丧,因为您要么想要禁用该应用程序,要么更注意光标停留的位置(例如,不要在您不想激活的任何链接或按钮上)。


解决方案:因为我习惯于在Windows中进行自动升级,所以在Mac上非常想念它。
我为Mac找到的解决方案是Zooom(是,是3点)。它具有自动升起功能。您甚至可以设置毫秒数以等待自动筹集。没有它就无法生存。您可以在截图中看到自动提升功能,例如https://www.macupdate.com/app/mac/23203/zooom
http://coderage-software.com/zooom/index.html


通过尝试这些选项,我的Command-Tab开始表现异常。以下是如何将注意力再次集中到应用程序的解决方案:

似乎以前的功能(即终端的窗口焦点随鼠标移动而改变的功能)在10.6中已被破坏,并导致Command-Tab无法正确转移窗口焦点。要解决此问题,只需将以下命令粘贴到终端中:

默认写com.apple.Terminal FocusFollowsMo??use -string NO

然后重新启动终端。


在MacOS Mojave上测试了MondoMouse(https://www.atomicbird.com/about/mac-apps)。似乎对我来说很好!

要安装该面板,将出现"不再启用系统偏好设置"通知,该通知不再位于"系统偏好设置">"辅助功能"中。您必须在"安全和隐私">"辅助功能">"隐私"中进行设置

关于在打开的每个应用程序中允许MondoMouse的警告,但是一旦设置,它就可以正常工作!终于解脱了 :)


您实际上无法做得很好,因为Mac界面在设计时就没有考虑到焦点跟随鼠标(带有或不带有自动升高)。我怀疑这会很快改变,除非这样做,否则所有尝试实现焦点跟随鼠标的人都会遇到相同的障碍,并且最终结果(对于想要这种事情的人而言)并不令人满意。

因此,是的,您出于这个原因而感到疯狂-但出于技术原因。习惯于按自己的方式使用Mac,我相信您迫切希望它能够像您过去使用的X11东西一样表现出来,因为您会找到新的有效工作方式。


推荐阅读