Xtext - 带退格的AutoEdits

时间:2016-08-31 12:04:53

标签: java eclipse editor xtext

假设以下情况: 我们有一个包含空格的文件 (例如表示为_ ) 我们在这些(4)空间背后留下了

_ _ _ _|

我希望编辑器在用户按退格键时删除所有4个空格而不是一个空格。

我正在扩展 DefaultIndentLineAutoEditStrategy ,我在其中覆盖以下方法

public void customizeDocumentCommand(IDocument d, DocumentCommand c)

我面临两个问题:

  1. 如何检测退格已从DocumentCommand中使用?如果您使用换行符c.text包含"\n""\r\n",但如果您使用退格键,则等于""
  2. 如何插入3个退格?将"\b"追加到c.text不起作用。

1 个答案:

答案 0 :(得分:0)

好的,我设法实现了它。

  1. if (c.text.equals("") && c.length == 1)条件检测到退格/删除的使用
  2. 可以按如下方式删除另外3个字符:
    c.offset-=3; c.length=4;
  3. 整个实现可能如下所示:

    private void handleBackspace(IDocument d, DocumentCommand c) {
            if (c.offset == -1 || d.getLength() == 0)
                return;
            int p = (c.offset == d.getLength() ? c.offset - 1 : c.offset);
            IRegion info;
            try {
                info = d.getLineInformationOfOffset(p);
                String line = d.get(info.getOffset(), info.getLength());
                int lineoffset = info.getOffset();
                /*Make sure unindent is made only if user is indented and has caret in correct position */
                if ((p-lineoffset+1)%4==0&&((line.startsWith("    ") && !line.startsWith("     ")) || (line.startsWith("        ") && !line.startsWith("         ")))){ //1 or 2 level fixed indent
                    c.offset-=3;
                    c.length=4;
                }
    
            }catch (org.eclipse.jface.text.BadLocationException e) {
                e.printStackTrace();
            }
        }