Змініть розкладку клавіатури автоматично, коли підключена зовнішня клавіатура


1

Нещодавно я придбав зовнішню клавіатуру (не яблучну), яка використовується вдома, а також час від часу перетягується зі мною, і я помітив потребу.

Мій Mac англійською мовою, як і його фізична клавіатура. Однак моя зовнішня клавіатура є норвезькою мовою.

Мені здається, що це дуже громіздко потрібно міняти розміщення клавіатури щоразу, коли я міняю клавіатуру, що може бути досить часто. Я помітив, що розкладка клавіатури може змінюватися відповідно до використовуваної програми, але це не завжди працює.

Чи можливо змусити Mac змінити розкладку клавіатури на основі поточної клавіатури, яка використовується, або кожного разу, коли я підключаю зовнішню клавіатуру?


Щось я вже пробував

Я створив AppleScript, який вирішує це, але зіткнувся з деякими проблемами з Mojave та його безпекою, і тому цікаво, чи варто підходити до цього по-іншому. Я додаю сценарій для довідки, нам, можливо, доведеться просто змінити його, якщо немає кращого рішення.

Буду вдячний за будь-які думки.

Проблема, з якою я стикаюся, полягає в тому, що додатку заборонено надсилати натискання клавіш через системні події, навіть якщо я це дозволив у системних налаштуваннях.

--Checks connected usb devices for description, performs keypresses if condition is met
set devicePresent to false
set changeLayout to false


delay 2 --delay may not be needed. To make sure that usb device is registred before script is triggered

set currentLayout to do shell script "defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleSelectedInputSources | egrep -w 'KeyboardLayout Name' | cut -d '=' -f2;exit "

set USB to paragraphs of (do shell script "system_profiler SPUSBDataType -detailLevel basic")
repeat with i from 1 to (count of USB)
    if item i of USB contains "Product ID: 0x0059" then set devicePresent to true
end repeat

if (devicePresent) then
    if currentLayout contains "ABC" then set changeLayout to true --changes layout to norwegian
end if
if (not devicePresent) then
    if currentLayout contains "Norwegian" then set changeLayout to true --changes layout to english
end if


if (changeLayout) then tell application "System Events"
    key code 49 using control down
    set newLayout to do shell script "defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleSelectedInputSources | egrep -w 'KeyboardLayout Name' | cut -d '=' -f2;exit "
    display notification ("Changed layout from " & currentLayout & " to " & newLayout) with title "New Layout" sound name "Sound Name"
end tell

Ласкаво просимо в "Запитайте різних"! :) Сподіваюсь, ви завітали, щоб знайти цей сайт, є що запропонувати! Якщо ви цього ще не зробили, варто витратити час, щоб прочитати тур . Все найкраще!
Мономет

@Monomeeth Дуже вдячний! Вибачення за неякісне форматування ..
hpl002

Я думаю, що програма karabiner дозволяє реалізувати власну розкладку, яка стосується лише зовнішніх клавіатур.
Том Гевке

@TomGewecke Це правда, я можу створювати профілі в елементах Karabiner, які застосовуються лише до вказаної клавіатури. Але це знову означає, що мені доведеться перезаписати всю зовнішню клавіатуру, щоб вона відповідала норвезькій версії. Це важко кодований підхід, але, мабуть, спрацює.
hpl002

Я не знаю, як працює ця програма. Можливо, є спосіб імпортувати цілий норвезький .keylayout файл xml?
Том Гевке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.