我试图设置一些自定义绑定并遇到一个令人费解的问题,我无法重新绑定C-M-q或完全取消绑定。我没有麻烦重新绑定其他键,所以我不知道C-M-q的特殊之处。以下是我在.emacs文件中尝试过的一些内容。
model = QStandardItemModel()
parent_item = model.invisibleRootItem() # type: QStandardItem
for row in [
(Qt.Unchecked, 'unchecked'),
(Qt.PartiallyChecked, 'partially'),
(Qt.Checked, 'checked')
]:
checked, text = row
check_item = QStandardItem('')
check_item.setCheckable(True)
check_item.setCheckState(checked)
parent_item.appendRow([check_item, QStandardItem(text)])
treeview.setModel(model)
无论我尝试什么,C-h k命令说C-M-q都绑定到
C-M-q运行命令indent-pp-sexp,这是一个交互式的 在`lisp-mode.el'。
中编译了Lisp函数它与C-M-q绑定。
答案 0 :(得分:1)
全局键映射是优先级最低的键映射,而此绑定位于您正在查看的缓冲区的本地(主模式)键映射中(这是一个lisp缓冲区),所以Emacs永远不会看到你的全局键映射发生变化,因为它在到达那么远之前就找到了一个绑定。
具体来说,此绑定位于lisp-mode-shared-map
(几种lisp模式的父键映射)中,它隐藏了prog-mode-map
中更通用的绑定。其他编程模式对此键有自己的绑定,以确保它始终具有某种"缩进表达式"行为。
因此,我会建议你不要破坏这种绑定,因为它有标准用途。如果您确实想要这样做,那么您应该查看Globally override key binding in Emacs。
Emacs有很多层的键盘映射,了解系统的工作原理非常重要,因此我强烈建议您花时间阅读以下有关该主题的文章:
https://www.masteringemacs.org/article/mastering-key-bindings-emacs