如何在闪烁中设置边距遮罩

How to set margin masks in Scintilla?

本文关键字:置边距 闪烁      更新时间:2023-10-16

我在理解 Scintilla 标记如何绑定到边距时遇到了问题。假设我想要 3 个边距。第一是线号(这里没有问题),第二是仅箭头标记,第三是仅圆圈制造商。我从文档中知道,我必须指定边距掩码才能将标记绑定到边距,但我不了解如何指定掩码。我尝试了一下,但从未得到想要的结果。(箭头显示在两个边距(第 2 和第 3 个)上,或者没有突出显示符号,而是突出显示该线)。希望有人能启发我如何设置边距掩码。

/* 2nd marker margin -> only arrows */
Call(SCI_SETMARGINTYPEN, 1, SC_MARGIN_SYMBOL);
Call(SCI_SETMARGINWIDTHN, 1, 20);
Call(SCI_SETMARGINSENSITIVEN, 1, 1);
Call(SCI_SETMARGINMASKN, 1, SC_MARK_ARROW);    // <=== ???
 DefineMarker(1, SC_MARK_ARROW, 0xffffff, 0x0000ff);
/* 3rd marker margin -> only circles */
Call(SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL);
Call(SCI_SETMARGINWIDTHN, 2, 50);
Call(SCI_SETMARGINSENSITIVEN, 2, 1);
DefineMarker(2, SC_MARK_CIRCLE, 0xffffff, 0x00ff00);
Call(SCI_SETMARGINMASKN, 2, SC_MARK_CIRCLE);    // <=== ???
Call(SCI_MARKERADD, 1, 1);
Call(SCI_MARKERADD, 1, 2);

这样,我在边距 1 上得到一个箭头标记,但只有一条突出显示的线,而边距 2 上没有圆圈标记。如果有人能解释如何设置面具,我会很高兴。

有 32 个标记可用,数字 0 到 24 没有预定义的用途。数字 25 到 31 用于折叠,但如果您不需要它,您也可以使用这些数字。

第一步是为要设置的每个标记选择一个数字:假设箭头4,圆圈5(可能应该为这些定义一些常量)。

边距掩码是 32 位值。要设置它,您需要翻转与应为该边距启用的每个标记编号相对应的位:

    Call(SCI_SETMARGINMASKN, 1, 1 << 4); // 2nd margin, arrow marker
    Call(SCI_SETMARGINMASKN, 2, 1 << 5); // 3rd margin, circle marker

然后,您需要定义标记本身:

    DefineMarker(4, SC_MARK_ARROW, 0xffffff, 0x0000ff);
    DefineMarker(5, SC_MARK_CIRCLE, 0xffffff, 0x00ff00);

因此,您最终可以将它们添加到特定行中:

    Call(SCI_MARKERADD, 1, 4);
    Call(SCI_MARKERADD, 1, 5);