【问题标题】:Ace editor, how to turn on block selection without having to press altAce 编辑器,如何在不按 alt 的情况下打开块选择
【发布时间】:2013-09-29 17:46:36
【问题描述】:

通常在 ace-editor 中,如果您按住 alt 键,在进行选择时,它将以块形式选择它,我认为这称为块选择。

如何使它成为标准的块选择,然后按 alt 将其更改为正常选择。

我认为这与此有关

function onMouseDown(e) {
var ev = e.domEvent;
var alt = ev.altKey;
var shift = ev.shiftKey;
var ctrl = e.getAccelKey();
var button = e.getButton();

var editor = e.editor;
var selection = editor.selection;
var isMultiSelect = editor.inMultiSelectMode;
var pos = e.getDocumentPosition();
var cursor = selection.getCursor();
var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));


var mouseX = e.x, mouseY = e.y;
var onMouseSelection = function(e) {
    mouseX = e.clientX;
    mouseY = e.clientY;
};

var blockSelect = function() {
    var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
    var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);

    if (isSamePoint(screenCursor, newCursor)
        && isSamePoint(cursor, selection.selectionLead))
        return;
    screenCursor = newCursor;

    editor.selection.moveCursorToPosition(cursor);
    editor.selection.clearSelection();
    editor.renderer.scrollCursorIntoView();

    editor.removeSelectionMarkers(rectSel);
    rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
    rectSel.forEach(editor.addSelectionMarker, editor);
    editor.updateSelectionMarkers();
};

我在 ace.js 的第 15479 行和第 15528 行之间找到的,以及这个;

 else if (alt && button == 0) {
    e.stop();

    if (isMultiSelect && !ctrl)
        selection.toSingleRange();
    else if (!isMultiSelect && ctrl)
        selection.addRange();

    var rectSel = [];
    if (shift) {
        screenAnchor = session.documentToScreenPosition(selection.lead);
        blockSelect();
    } else {
        selection.moveCursorToPosition(pos);
        selection.clearSelection();
    }

第 15561 行和第 15567 行

【问题讨论】:

    标签: javascript cursor ace-editor


    【解决方案1】:

    看起来就像改变这一行一样简单......

    var alt = ev.altKey;
    

    到这个...

    var alt = !ev.altKey;
    

    【讨论】:

    • 是的,完美,谢谢。还有一种方法可以在不同的 javascript 文件中而不是在 ace.js 中更改它吗?
    • 否 - 它必须在该文件中。我建议在文件名中添加一个后缀,这样你就知道它是一个修正版本,并且如果你将来更新它就不会被覆盖:)
    【解决方案2】:

    这可以通过替换存储在编辑器的 _eventRegistry.mousedown[1 ] 带有一个包装器,该包装器使用 ev.altKey 的反转值调用相同的函数,如下所示。

    editor._eventRegistry.mousedown[1] = (func => e => func({ ...e, ...e.__proto__, getButton: () => e.getButton(), domEvent: { ...e.domEvent, altKey: !e.domEvent.altKey, shiftKey:e.domEvent.shiftKey, ctrlKey: e.domEvent.ctrlKey, }, }))(editor._eventRegistry.mousedown[1])

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多