DefaultKeyBinding.dict-旧式NeXT格式与XML plist格式


9

DefaultKeyBinding.dict

~/Library/KeyBindings/DefaultKeyBinding.dict文件使您可以在Mac OS X中定义自己的键绑定。它可以是两种格式之一:旧式NeXT格式(示例)或新式XML plist格式(示例)。

重新绑定+

我想将命令退格键(+ )重新绑定到deleteWordBackward:,并且在Ask Askfferent线程中得到了一些帮助。建议将其用作DefaultKeyBinding.dict文件:

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

该建议有效(谢谢,伙计们!),但是我已经有DefaultKeybinding.dictXML格式的工作,因此我想尝试使其以这种方式工作。我首先在现有文件底部附近添加了以下文本:

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

我还尝试仅使用+ 条目创建一个全新的XML格式的文件 :

<?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>

但是,没有文件起作用。那么,很明显的情况是,您只能以旧式NeXT格式重新绑定+ ,而不能以XML plist格式重新绑定+ 。我的问题是:

  1. 这是准确的吗,还是当我切换到XML格式时语法会有所改变吗?
  2. 我会后悔将DefaultKeyBinding.dict文件的其余部分移到旧语法吗?这样做并不需要太多工作-只能输入一两个条目-但我不确定是否由于其他原因而弃用了旧样式或不建议使用旧样式。

编辑:原始DefaultKeyBinding.dict

有人在注释中要求我提供原始文件的信息,因此我认为我也可以将整个内容包括在这里。

<?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>

我没有使用过XML格式,但是很好奇您是否在现有XML文件的键盘快捷键中使用了其他任何元键。您是~用于期权还是$用于班次?
conorgriffin 2011年

还是^为了控制?
conorgriffin 2011年

我曾与工作项~^,但没有用$@。(注意:我继续将原始的DefaultKeyBindings.dict文件也添加到OP中,以防万一有用。)
Micah R Ledbetter

奇怪,我也无法正常工作。它似乎没有很好的记录。您只有少量的快捷方式,而不仅仅是1个meta键和1个字母,因此也许尝试将其转换为测试方式,如果它们可以正常工作,那么您的其他快捷方式也很有可能。在某些情况下,@plist文件的XML样式不接受表示命令键的情况。这没有多大意义,但我找不到更多信息。
conorgriffin 2011年

最终就此向苹果公司提交了一个错误;让我们看看他们是否答复:)。
Micah R Ledbetter

Answers:


3

我认为使用旧格式不会有任何问题。我发现的所有示例都使用旧的NeXT表示法。尽管我无法解释为什么XML格式不起作用,但是该特定键盘快捷键有一个解决方法,这意味着您可以DefaultKeyBinding.dict保持原有状态不变。

有一个名为KeyRemap4MacBook的应用程序可以免费下载,您可以从下面的屏幕截图中看到,您可以重新映射+ 键盘快捷方式,而无需转换其余DefaultKeyBinding.dict文件,并且此方法不限于Cocoa应用程序。

KeyRemap4MacBook


3

\U007f不能用于XML属性列表。您需要将其替换为&#x007f;或文字DEL字符。


您可以使用以下命令将旧式plist转换为XML plutil

plutil -convert xml1 test.plist

从XML到旧样式pl

pl -input test.plist

我的DefaultKeyBinding.dict当前为151行,并且在将其存储为旧式属性列表时没有遇到任何问题。发表的那些布雷特·特普斯特拉雅各布·罗斯是在旧式格式为好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.