如何禁用 ACE 编辑器中的装订线单击时的行选择?

How do I disable line selection on gutter click in ACE editor?

我正在尝试禁用所有用户与 ace 编辑器的交互。我设法通过以下设置停止了大部分互动:

codeEditor.setReadOnly(true);
codeEditor.setHighlightActiveLine(false);
codeEditor.setHighlightGutterLine(false);
codeEditor.container.style.pointerEvents = "none";
codeEditor.renderer.$cursorLayer.element.style.opacity = 0;

但是,虽然现在禁用了大部分交互性,但装订线上的 mousedown 事件仍然有效。例如,当您单击一条装订线时,它仍然 select 显示该行上的文本。其他事件,如双击 select 全部或代码折叠似乎也有效。你可以在这里查看: http://jsfiddle.net/squarePenguin/zhpms1mm/

我试图删除排水沟上的听众,但似乎没有任何效果。这是我尝试过的一切:

codeEditor.getSession().removeAllListeners("guttermousedown");
codeEditor.getSession().removeAllListeners("gutterclick");
codeEditor.getSession().removeAllListeners("gutterdblclick");
codeEditor.getSession().removeAllListeners("guttermousemove");
codeEditor.getSession().removeAllListeners("click");
codeEditor.getSession().removeAllListeners("mousedown");

你有什么想法吗?感谢您的耐心等待!

你可以用

stop = function(e) {e.stop()}
editor.on("guttermousedown", stop, true);
editor.on("gutterclick", stop, true);
editor.on("gutterdblclick", stop, true);
editor.on("guttermousemove", stop, true);
editor.on("click", stop, true);
editor.on("mousedown", stop, true);

codeEditor.getSession().removeAllListeners 不起作用,因为鼠标事件是在编辑器而非会话上分派的,并且 removeAllListeners 不会删除 defaultHandlers

codeEditor.container.style.pointerEvents = "none"; 不起作用,因为 ace 中的某些元素具有 pointerEvents="auto" 样式。