Обмен левой / правой кнопкой мыши на 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
, Или посмотрите этот вопрос, чтобы узнать о разных способах назначения ярлыков для сценариев.
Я наконец пошел с этим решением.
Еще один совет, который я нашел в этом вопросе, - добавить скрипт в строку меню, выполнив следующее:
- Откройте редактор AppleScripts (я просто ищу в Spotlight)
- Если у вас еще нет значка сценариев в строке меню:
- Нажмите на редактор AppleScripts в строке меню
- Нажмите Настройки
- Установите флажок Показать меню сценария в строке меню. Я лично предпочитаю снимать флажок " Показать компьютерный сценарий".
- Нажмите на значок сценариев, который теперь отображается в строке меню.
- Нажмите " Открыть папку сценариев" и выберите " Открыть папку пользовательских сценариев".
- Сохраните или скопируйте файл скрипта в эту папку (скрипт, который я использую, можно найти здесь)
- Если вы хотите запустить скрипт, просто нажмите на иконку скрипта и выберите скрипт
Можно сделать через 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), ¤tButtonStatus, &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;
}