2016-08-31 4 views
1

とAutoEdits状況以下の仮定:私たちは、(_として表さ例えば)スペース
を含む文書を、持っている そして、我々はそれらの(4)のスペース
のXtext - バックスペース

_ _ _ _| 

の後ろにキャレットていますユーザーがバックスペースを押すと、エディターが1つではなく4つのスペースをすべて削除するようにしたい。私は二つの問題直面しています私は方法

public void customizeDocumentCommand(IDocument d, DocumentCommand c)

次上書きDefaultIndentLineAutoEditStrategyを延長しています

:バックスペースを検出する方法

  1. がDocumentCommandから使用されていますか? "\n"または"\r\n"を含む改行c.textを使用する場合は、バックスペースを使用する場合は""に等しくなります。
  2. 3つ以上のバックスペースを挿入するにはどうすればよいですか? "\b"c.textを付加しても機能しません。
+1

んcommand.offsetとcommand.lengthを設定すると助けになりませんか? –

+0

私はこのようなバックスペースを検出します (c.text.equals( "")&& c.length == 1)とc.offset- = 3; c.length = 4;ただトリックをした。ありがとう。 – Smarty77

答えて

0

いいえ私はそれを実装することができました。

  1. if (c.text.equals("") && c.length == 1)条件はバックスペースの使用状況を検出/ 3以上の文字には、次のように行うことができます削除
  2. を削除します。
    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(); 
     } 
    }