Обмен левой / правой кнопкой мыши на OS X через терминал

Я ищу способ поменять местами левую / правую кнопку мыши (левша / правша) через Терминал.

В настоящее время каждый раз, когда я хочу переключить это, мне нужно идти в Системные настройки "Мышь" Изменить опцию для Вторичного щелчка. Было бы намного проще просто выполнить быструю команду в терминале.

Я видел такие вещи: defaults write GlobalPreferences com.apple.mouse.scaling -1

tl; dr: есть ли способ выполнить такую ​​команду (см. выше) для вторичного щелчка мыши через терминал?

Моя ОС 10.7.5.

4 ответа

Решение

Соответствующая команда:

defaults -currentHost write .GlobalPreferences com.apple.mouse.swapLeftRightButton -bool true

(или "false", чтобы вернуть его в нормальное состояние.) Однако я не знаю, как заставить настройки вступить в силу без выхода из системы и повторного входа, что, как правило, является более сложной задачей, чем использование системных настроек для внесения изменений.,

Вот более простой скрипт, который переключает настройки и не активирует Системные настройки:

tell application "System Preferences"
    reveal pane "com.apple.preference.mouse"
end tell
tell application "System Events" to tell process "System Preferences"
    tell radio group 1 of window 1
        if value of radio button 1 is 1 then
            click radio button 2
        else
            click radio button 1
        end if
    end tell
end tell
quit application "System Preferences"

Это не работает с версией панели настроек Magic Mouse.

Вы можете сохранить скрипт в AppleScript Editor и запустить его с osascript script.scpt, Или посмотрите этот вопрос, чтобы узнать о разных способах назначения ярлыков для сценариев.

Я наконец пошел с этим решением.

Еще один совет, который я нашел в этом вопросе, - добавить скрипт в строку меню, выполнив следующее:

  1. Откройте редактор AppleScripts (я просто ищу в Spotlight)
  2. Если у вас еще нет значка сценариев в строке меню:
    1. Нажмите на редактор AppleScripts в строке меню
    2. Нажмите Настройки
    3. Установите флажок Показать меню сценария в строке меню. Я лично предпочитаю снимать флажок " Показать компьютерный сценарий".
  3. Нажмите на значок сценариев, который теперь отображается в строке меню.
  4. Нажмите " Открыть папку сценариев" и выберите " Открыть папку пользовательских сценариев".
  5. Сохраните или скопируйте файл скрипта в эту папку (скрипт, который я использую, можно найти здесь)
  6. Если вы хотите запустить скрипт, просто нажмите на иконку скрипта и выберите скрипт

Можно сделать через IOHID напрямую:

      #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/event_status_driver.h>

int main(int argc, char *argv[]) {
    io_connect_t handle = NXOpenEventStatus();
    
    if (!handle) {
            printf("NXOpenEventStatus failed!\n");
            return 0;
    } 
    

    int64_t         currentButtonStatus     = 0;

    
    kern_return_t ret;
    
    IOByteCount actualSize;
    ret = IOHIDGetParameter(handle, CFSTR(kIOHIDPointerButtonMode),
        sizeof(currentButtonStatus), &currentButtonStatus, &actualSize);
    
    if (ret != KERN_SUCCESS) {
            printf("IOHIDGetParameter failed! Error %d.\n",  (int)ret);
    }
    else if (actualSize != sizeof(currentButtonStatus)) {
            printf("IOHIDGetParameter returned unexpected actualSize! (Got %d)\n", (int)actualSize);
    }
    else if (ret == KERN_SUCCESS) {
        int64_t newButtonStatus = 3 - currentButtonStatus;
        ret = IOHIDSetParameter(handle, CFSTR(kIOHIDPointerButtonMode), &newButtonStatus, sizeof(newButtonStatus));
        if (ret != KERN_SUCCESS) {
                printf("IOHIDSetParameter failed! Error %d. (Current status = %d)\n", (int)ret, currentButtonStatus);
        }
        else {
                printf("success. Was %d, now %d.\n", currentButtonStatus, newButtonStatus);
        }
    }
    
    NXCloseEventStatus(handle);
    return 0;

}
Другие вопросы по тегам