DefaultKeyBinding.dict - format NeXT gaya lama vs format plist XML

9

DefaultKeyBinding.dict

The ~/Library/KeyBindings/DefaultKeyBinding.dictfile yang memungkinkan Anda menentukan binding kunci Anda sendiri di Mac OS X. Hal ini dapat di salah satu dari dua format: gaya lama NeXT Format ( contoh ) atau bergaya modern format XML plist ( misalnya ).

Rebinding +

Saya ingin mengubah perintah-backspace ( + ) deleteWordBackward:, dan saya mendapat bantuan di utas AskDifferent ini . Disarankan agar saya menggunakan ini sebagai DefaultKeyBinding.dictfile saya :

/* my keybindings */
{
"@\U007F" = "deleteWordBackward:"; /* delete backwards one word */
}  

Nasihat ini berhasil (terima kasih, teman-teman!), Tapi saya sudah bekerja DefaultKeybinding.dictdalam format XML, jadi saya ingin mencoba membuatnya bekerja seperti itu. Saya pertama kali menambahkan teks ini di dekat bagian bawah file saya yang ada:

<key>@\U007F</key>
<string>deleteWordBackward:</string>

Dan saya juga mencoba membuat file berformat XML baru hanya dengan + entri:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>@\U007F</key>
    <string>deleteWordBackward:</string>
</dict>
</plist>

Tapi tidak ada file yang berfungsi. Situasi yang jelas, kemudian, adalah bahwa Anda dapat memutar ulang + hanya dalam format NeXT gaya lama, dan tidak dalam format plist XML. Pertanyaan saya adalah:

  1. Apakah ini akurat, atau haruskah sintaks berubah entah bagaimana ketika saya beralih ke format XML?
  2. Apakah saya akan menyesal memindahkan sisa DefaultKeyBinding.dictfile saya ke sintaks lama? Tidak akan banyak pekerjaan yang harus dilakukan - itu hanya satu atau dua lusin entri - tapi saya tidak yakin apakah gaya lama sudah usang atau keliru karena beberapa alasan lain.

Edit: Original DefaultKeyBinding.dict

Seseorang meminta informasi tentang file asli saya di komentar, jadi saya pikir saya mungkin juga memasukkan semuanya di sini.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key></key>
    <string>complete:</string>
    <key>^ </key>
    <string>setMark:</string>
    <key>^a</key>
    <string>moveToBeginningOfLine:</string>
    <key>^e</key>
    <string>moveToEndOfLine:</string>
    <key>^j</key>
    <string>setMark:</string>
    <key>^v</key>
    <string>pageDown:</string>
    <key>^w</key>
    <string>deleteToMark:</string>
    <key>^x</key>
    <dict>
        <key>^m</key>
        <string>selectToMark:</string>
        <key>^x</key>
        <string>swapWithMark:</string>
    </dict>
    <key>~</key>
    <string>deleteWordBackward:</string>
    <key>~&lt;</key>
    <string>moveToBeginningOfDocument:</string>
    <key>~&gt;</key>
    <string>moveToEndOfDocument:</string>
    <key>~^h</key>
    <string>deleteWordBackward:</string>
    <key>~b</key>
    <string>moveWordBackward:</string>
    <key>~d</key>
    <string>deleteWordForward:</string>
    <key>~f</key>
    <string>moveWordForward:</string>
    <key>~n</key>
    <string>scrollLineDown:</string>
    <key>~p</key>
    <string>scrollLineUp:</string>
    <key>~v</key>
    <string>pageUp:</string>
    <key>~</key>
    <string>deleteWordBackward:</string>
</dict>
</plist>
Micah R Ledbetter
sumber
Saya belum menggunakan format XML, tapi saya ingin tahu apakah Anda menggunakan meta-tombol lain di pintasan keyboard Anda di file XML yang ada yang Anda miliki. Apakah Anda menggunakan ~untuk opsi atau $untuk shift?
conorgriffin
atau ^untuk kontrol?
conorgriffin
Saya memiliki entri yang berfungsi dengan ~dan ^, tetapi tidak ada dengan $atau @. (Catatan: Saya melanjutkan dan menambahkan file DefaultKeyBindings.dict asli saya ke OP juga dalam kasus yang ternyata berguna.)
Micah R Ledbetter
Ini aneh, saya juga tidak bisa membuatnya bekerja. Tampaknya tidak didokumentasikan dengan sangat baik. Anda hanya memiliki sejumlah kecil pintasan yang bukan hanya 1 meta-key dan 1 huruf, jadi mungkin cobalah mengonversinya untuk diuji dan jika berfungsi maka kemungkinan yang lain juga. Ini mungkin merupakan kasus yang mewakili kunci perintah karena @tidak diterima dalam gaya XML file plist. Itu tidak masuk akal, tetapi saya tidak dapat menemukan lebih banyak tentang itu.
conorgriffin
Akhirnya mengajukan bug dengan Apple tentang ini; mari kita lihat apakah mereka membalas :).
Micah R Ledbetter

Jawaban:

3

Saya tidak berpikir Anda akan memiliki masalah menggunakan format yang lebih lama. Semua contoh yang saya temukan menggunakan notasi NeXT lama. Meskipun saya tidak dapat menjelaskan mengapa format XML tidak berfungsi, ada solusi untuk pintasan keyboard khusus ini yang berarti Anda dapat membiarkan yang sudah ada DefaultKeyBinding.dicttidak tersentuh.

Ada aplikasi bernama KeyRemap4MacBook yang dapat diunduh gratis dan Anda dapat melihat dari tangkapan layar di bawah ini, Anda dapat memetakan ulang pintasan keyboard + tanpa mengonversi sisa DefaultKeyBinding.dictfile Anda dan metode ini tidak terbatas pada aplikasi Kakao.

KeyRemap4MacBook

Conorgriffin
sumber
3

\U007ftidak dapat digunakan pada daftar properti XML. Anda harus menggantinya dengan &#x007f;atau DELkarakter literal .


Anda dapat mengonversi plist gaya lama ke XML dengan plutil:

plutil -convert xml1 test.plist

Dan dari XML ke gaya lama dengan pl:

pl -input test.plist

DefaultKeyBinding.dict saya saat ini 151 baris, dan saya belum mengalami masalah menyimpannya sebagai daftar properti gaya lama. Yang diposting oleh Brett Terpstra dan Jacob Rus juga dalam format gaya lama.

Lri
sumber