Фокус следует за мышью (плюс автоподъем) в Mac OS X - PullRequest
147 голосов
/ 19 сентября 2008

(Я не хочу слышать о том, как я сумасшедший, что хочу этого!)

Focus-follow-mouse также известен как точка-фокус, фокус указателя и (в некоторых реализациях) небрежный фокус. [Добавьте другие термины, которые сделают это более доступным для поиска!] X-mouse

Ответы [ 19 ]

70 голосов
/ 19 сентября 2008

Вы можете сделать это для Terminal.app, введя в командной строке следующую команду:

defaults write com.apple.Terminal FocusFollowsMouse -bool true

Для приложений X11 вы можете сделать это:

defaults write com.apple.x11 wm_ffm -bool true

В Snow Leopard используйте это вместо:

defaults write org.x.X11 wm_ffm -bool true

По-видимому, есть программа под названием CodeTek Virtual Desktop, которая будет эмулировать его в масштабе всей системы, но она стоит $$ (и они так и не выпустили версию для OSX Leopard).

55 голосов
/ 19 сентября 2008

Стив Йегге написал эссе об этом некоторое время назад, где он пытался и не смог написать подходящее расширение. С тех пор я пытался найти приложения focus-follow-mouse для OS X, но тоже не получилось.

47 голосов
/ 15 октября 2010

Focus-follow-mouse - не особенно подходящий метод ввода для OS X, потому что его строка меню была разработана, чтобы быть в верхней части экрана. Когда вы перемещаете мышь из окна вашего приложения, чтобы попасть в меню, если оно пересекает окна любого другого приложения в пути, меню меняется.

Так что да, в ответ на комментарий dreeves, он отлично работает для терминала (или для любого другого отдельного приложения на рабочем столе), потому что единственные другие окна, на которые он будет влиять, это окна терминала, поэтому меню никогда не меняется, когда вы переключить окна. И это хорошо работает для X11, потому что приложения X11 обычно имеют свои строки меню, встроенные в окно, поэтому вам не нужно выходить из окна, чтобы получить к ним доступ.

Конечно, вы можете обойти проблему изменения меню, введя искусственную задержку перед сменой фокуса и / или переключением меню, но она никогда не будет работать так же, как на других рабочих столах.

39 голосов
/ 06 марта 2016

Хотя это далеко не полное решение, два удобных действия, встроенных в OSX (10.11):

⌃⌥-клик (control-option-click) - переключает фокус без поднятия окна

⌘-щелчок (команда-щелчок) - щелчок в окне без переключения фокуса

Не уверен, когда были введены эти ярлыки, поскольку я нигде не смог их найти.

15 голосов
/ 20 марта 2015

Аметист поддерживает эту функцию. Его можно легко установить с помощью brew cask install amethyst.

Вот файл конфигурации, который я использую. Выключает все функции, кроме focus-follow-mouse. Сохраните его в ~/.amethyst.

{
    "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
}
13 голосов
/ 05 марта 2013

Проблема с меню - единственная причина, по которой традиционная фокусировка за мышью не работает.

Вот альтернатива: не меняйте фокус, пока не нажата клавиша на клавиатуре. Это охватило бы 95% случаев использования focus-follow-mouse и сделало бы этого старого хулиганского пользователя X действительно счастливым. Я не знаю, сколько раз я буду прокручивать веб-страницу в Chrome, нажимать Command-T, чтобы открыть новую вкладку, и вместо этого найти ее в терминале. Если мой мозг не распознал этого за 8 месяцев использования Mac, он никогда этого не сделает.

9 голосов
/ 29 января 2016

Так что я решил снова улучшить работу над MouseFocus.app, в которой все еще были некоторые недостатки. Те исправлены сейчас. Я переименовал все это в «AutoRaise», чтобы лучше отразить, что делает этот инструмент: когда вы наводите окно, оно поднимается вперед (с задержкой на ваш выбор) и получает фокус. Инструмент можно скачать здесь . Чтобы использовать его, скопируйте его в папку / Applications / и убедитесь, что он исполняемый (chmod 700 AutoRaise). Затем дважды щелкните по нему из Finder. Чтобы быстро включить / выключить его, вы можете использовать приведенный ниже яблочный скрипт и вставить его в рабочий процесс автомата service . Затем привяжите созданный сервис к сочетанию клавиш через Системные настройки | Клавиатура | Сочетания клавиш.

Обновление (29-03-2017): бинарный файл AutoRaise был обновлен. Если в командной строке не было указано никакой задержки, теперь он также будет искать файл AutoRaise.delay в той же папке. Это особенно полезно при использовании нижеследующего сценария яблока, потому что «запуск приложения» не поддерживает аргументы командной строки. Задержка должна быть указана в единицах 50 мс. Например, чтобы указать задержку 150 мс, запустите эту команду один раз в терминале: 'echo 3> AutoRaise.delay'

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

8 голосов
/ 19 сентября 2008

В настоящее время я пользуюсь MondoMouse и даже с его причудами я не смогу использовать свой Mac без него У них есть бесплатная пробная версия, и я рекомендую ее всем.

MondoMouse

7 голосов
/ 19 сентября 2008

У Codetek был продукт, который делал это, но они никогда не выпускали версию для Leopard или более позднюю.

MondoMouse может выполнять фокусировку за мышью, но не автоподъем. Даже фокус-следует-мышь сломана, хотя. Например, он не очень хорошо работает с вкладкой команд (если вы вкладываете команду в новое приложение и не трогаете мышь, тогда , а не следует переключить фокус обратно туда, где находится указатель мыши. быть - я почти уверен, что каждая реализация в Linux, которую я видел, понимает это правильно, но MondoMouse нет).

Вы можете включить focus-follow-mouse (без автоподъема) только для окон терминала (просто выполните следующее в терминале):

defaults write com.apple.Terminal FocusFollowsMouse -string YES

И аналогично для окон X11:

defaults write org.x.X11 wm_ffm -bool true 

(Для версий Mac, предшествующих 10.5.5, это было:

defaults write com.apple.x11 wm_ffm true

)

Я не знаю других приложений, поддерживающих его.

6 голосов
/ 08 ноября 2017

chunkwm также поддерживает это (по умолчанию, я считаю): chunkwm

...