假设以下情况:我们有一个文档,其中包含空格
(例如表示为 _ )我们在这些 (4) 个空格后面有插入符号
_ _ _ _|
我希望编辑器在用户按退格键时删除所有 4 个空格,而不是一个。
我正在扩展DefaultIndentLineAutoEditStrategy,并覆盖以下方法
public voidcustomizeDocumentCommand(IDocument d, DocumentCommand c)
我面临两个问题:
- 如何检测 DocumentCommand 中是否使用了退格键?如果您使用换行符,
c.text
包含 "\n"
或 "\r\n"
,但如果您使用退格键,则它等于 ""
。
- 如何再插入 3 个退格键?将
"\b"
附加到 c.text
不起作用。
好的,我成功实现了。
if (c.text.equals("") && c.length == 1)
条件检测到退格/删除的使用
- 可以按以下方式再删除 3 个字符:
c.offset-=3;
c.length=4;
整个实现可以如下所示:
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();
}
}
我是一名优秀的程序员,十分优秀!