Thay đổi các phím bổ trợ từ dòng lệnh


13

Là một người dùng Emacs nặng, tôi muốn sử dụng lại phím Caps Lock để hoạt động như phím Ctrl. Có một hộp thoại thuận tiện trong Ngăn Ưu tiên Bàn phím để làm điều đó. Nhưng vấn đề là cài đặt này bị mất sau khi ai đó đăng nhập vào tài khoản khác chưa có tùy chọn này.

Vì vậy, có cách nào để làm giống như hộp thoại khung ưu tiên từ dòng lệnh?


2
Có thể trùng lặp Cập nhật ánh xạ khóa sửa đổi thông qua công cụ lệnh mặc định . Mặc dù câu hỏi khác là lịch sử mới hơn, nhưng nó có câu trả lời tốt hơn (thực sự hoạt động).
techraf

Câu trả lời:


7

Thay đổi tùy chọn và chạy, defaults -currentHost read -gcho bạn thấy những thay đổi đang được viết. Tôi sẽ viết một kịch bản bash ngắn để tự động hóa nó, nhưng có vẻ như tôi đã bị đánh bại:

#!/bin/bash                                                                      

mappingplist=com.apple.keyboard.modifiermapping

if [ $1 == "emacs" ]; then
    echo "Switching to emacs modifiers"
    defaults -currentHost write -g $mappingplist '(                              
                {                                                                
            HIDKeyboardModifierMappingDst = 4;                                   
            HIDKeyboardModifierMappingSrc = 2; },                                
                {                                                                
            HIDKeyboardModifierMappingDst = 12;                                  
            HIDKeyboardModifierMappingSrc = 10;                                  
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 2;                                   
            HIDKeyboardModifierMappingSrc = 4;                                   
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 10;                                  
            HIDKeyboardModifierMappingSrc = 12;                                  
        })'


else
    echo "Switching to default modifiers"
    defaults -currentHost delete -g $mappingplist
fi

Kịch bản nhận một đối số, nếu đối số là emacs, thì nó hoán đổi lệnh và điều khiển, nếu đối số là bất cứ điều gì khác, nó sẽ khôi phục mặc định.

http://forums.macrumors.com/showthread.php?t=949280


Nó dường như không hoạt động với tôi ở đây với Snow Leopard, nhưng rõ ràng đây là một bước đi đúng hướng.
pantulis

@pith ... -gcờ làm gì? Tôi đã không nhìn thấy điều đó trong trang người đàn ông cho defaults. Ngoài ra, điều này có vẻ như nó hoán đổi hai bộ giá trị: 4 với 2 và 10 với 12, nhưng chỉ có hai sửa đổi thay đổi. Bạn có thể giải thích, hoặc bạn chỉ đơn giản nhìn vào đầu ra nhưng không biết những gì họ thực sự đại diện? (Tại tôi lần đầu tiên nghi ngờ Bốn mã chủ chốt - hai bên trái, hai bên phải - nhưng họ dường như không có mã chủ chốt, ít nhất là không theo báo cáo của các điều khiển bàn phím.)
Mark A. Donohoe

Tôi thực hiện các ánh xạ như bạn đề xuất nhưng dường như nó không có hiệu lực mặc dù trong UI nó xuất hiện ánh xạ. Chỉ thực hiện thông qua UI dường như hoạt động ... Có ý tưởng nào không?
SimonW

3

Bạn có thể sử dụng KeyRemap4MacBook với PCKeyBoardHack . Nó cũng cho phép bạn sử dụng các phím Emacs trong bất kỳ ứng dụng Mac nào, kể cả những phím không sử dụng Cacao như ứng dụng MS.


2

Từ "Cập nhật ánh xạ khóa sửa đổi thông qua công cụ lệnh mặc định" :

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1133-50475-0 -array '<dict><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer><key>HIDKeyboardModifierMappingDst</key><integer>2</integer></dict>

Thay đổi 113350475ID nhà cung cấp và sản phẩm được hiển thị bởi ioreg -n IOHIDKeyboard -r. src 0dst -1sẽ vô hiệu hóa caps lock.

defaults -currentHost write -g sửa đổi:

~/Library/Preferences/ByHost/.GlobalPreferences.*.plist

Bạn phải đăng xuất và đăng nhập lại để áp dụng các thay đổi. Nếu các giá trị là các chuỗi (như trong câu trả lời của @pithyless), các thay đổi được hiển thị trong Tùy chọn hệ thống nhưng chúng không có bất kỳ ảnh hưởng nào.

Giá trị của các khóa :

-1 none
0 caps lock
1 left shift
2 left control
3 left option
4 left command
5 keypad 0
6 help
9 right shift
10 right control
11 right option
12 right command

0

Kết hợp một vài câu trả lời với nhau, tôi đã đưa ra kịch bản này có vẻ hiệu quả ( ánh xạ Caps-lock thành Control ).

$ keyboard_id = "$(ioreg -n IOHIDKeyboard -r | grep -e VendorID\" -e ProductID | tr -d \"\|[:blank:] | cut -d\= -f2 | tr '\n' -)"
$ defaults -currentHost write -g "com.apple.keyboard.modifiermapping.${keyboard_id}0" '(
{
  HIDKeyboardModifierMappingDst = 2;
  HIDKeyboardModifierMappingSrc = 0;
})'

Chỉ có vấn đề là nó dường như không có tác dụng gì ... :(

Tôi sẽ cập nhật nếu tôi làm cho nó hoạt động.


0

Tôi muốn hoán đổi Right Command chỉ với các phím Right Option .

Khi tôi thiết lập trao đổi Tùy chọnLệnh toàn cầu trong Tùy chọn hệ thống ...> Bàn phím> Phím sửa đổi ..., có cấu hình sau trong hệ thống (hoạt động như mong đợi):

$ defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-591-0
(
        {
        HIDKeyboardModifierMappingDst = 30064771299;
        HIDKeyboardModifierMappingSrc = 30064771298;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771298;
        HIDKeyboardModifierMappingSrc = 30064771299;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)

Nhưng khi tôi sửa đổi nó, để trao đổi chỉ phải bên như sau - nó không làm việc:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 '(
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)'

Đó là bởi vì các giá trị được viết dưới dạng chuỗi không phải là số nguyên. Bạn có thể thấy rằng bằng cách sử dụng:

$ plutil -convert xml1 -o - ~/Library/Preferences/ByHost/.GlobalPreferences.*.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keyboard.modifiermapping.1452-591-0</key>
    <array>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771303</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771302</string>
        </dict>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771302</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771303</string>
        </dict>
    </array>
</dict>
</plist>

Vì vậy, cách đúng để cập nhật cài đặt là sử dụng định dạng XML:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 -array \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771303</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771302</integer>
</dict>' \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771302</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771303</integer>
</dict>'

Cuối cùng, bạn phải đăng xuất và đăng nhập lại.


Bạn đã làm điều này để làm việc tôi không thể nói? Là một yêu cầu khởi động lại có thể?
William

À ... Vâng. Bạn phải đăng xuất và đăng nhập lại.
Virus_7

Tôi đang cố gắng trả lời câu hỏi này apple.stackexchange.com/questions/280855/ Khăn Bạn có thể trò chuyện được không? chat.stackexchange.com/rooms/38/ask-different-chat Tôi đã thử chạy lệnh cuối cùng của bạn và nó không thay đổi bất cứ điều gì đối với tôi.
William

Trước hết, loại bỏ Karabiner-Elements và mã bàn phím thích ứng (1452-591-0) và mã khóa (30064771302, 30064771303) vào hệ thống của bạn.
Virus_7
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.