1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-17 22:23:10 +03:00

New editor: ALT+ BACKSPACE deletes next word (OSX only). See #3098

This commit is contained in:
Federico Fissore
2015-05-13 17:39:43 +02:00
parent 91da999cb0
commit 765519a562
4 changed files with 127 additions and 32 deletions

View File

@ -35,8 +35,8 @@ import org.fife.ui.rsyntaxtextarea.Theme;
import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.Token;
import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip; import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip;
import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextArea;
import org.fife.ui.rtextarea.RTextAreaUI;
import org.fife.ui.rtextarea.RUndoManager; import org.fife.ui.rtextarea.RUndoManager;
import processing.app.*; import processing.app.*;
import javax.swing.*; import javax.swing.*;
@ -47,7 +47,6 @@ import javax.swing.text.BadLocationException;
import javax.swing.text.Document; import javax.swing.text.Document;
import javax.swing.text.Segment; import javax.swing.text.Segment;
import javax.swing.undo.UndoManager; import javax.swing.undo.UndoManager;
import java.awt.*; import java.awt.*;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
@ -478,4 +477,8 @@ public class SketchTextArea extends RSyntaxTextArea {
} }
@Override
protected RTextAreaUI createRTextAreaUI() {
return new SketchTextAreaUI(this);
}
} }

View File

@ -1,6 +1,7 @@
package processing.app.syntax; package processing.app.syntax;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaDefaultInputMap; import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaDefaultInputMap;
import org.fife.ui.rtextarea.RTextArea;
import org.fife.ui.rtextarea.RTextAreaEditorKit; import org.fife.ui.rtextarea.RTextAreaEditorKit;
import processing.app.PreferencesData; import processing.app.PreferencesData;
@ -23,5 +24,10 @@ public class SketchTextAreaDefaultInputMap extends RSyntaxTextAreaDefaultInputMa
remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, alt)); remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, alt));
remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP, alt)); remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP, alt));
} }
boolean isOSX = RTextArea.isOSX();
if (isOSX) {
put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, alt), SketchTextAreaEditorKit.rtaDeleteNextWordAction);
}
} }
} }

View File

@ -0,0 +1,65 @@
package processing.app.syntax;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit;
import org.fife.ui.rtextarea.RTextArea;
import org.fife.ui.rtextarea.RecordableTextAction;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.TextAction;
import javax.swing.text.Utilities;
import java.awt.event.ActionEvent;
public class SketchTextAreaEditorKit extends RSyntaxTextAreaEditorKit {
public static final String rtaDeleteNextWordAction = "RTA.DeleteNextWordAction";
private static final Action[] defaultActions = {
new DeleteNextWordAction()
};
@Override
public Action[] getActions() {
return TextAction.augmentList(super.getActions(), SketchTextAreaEditorKit.defaultActions);
}
public static class DeleteNextWordAction extends RecordableTextAction {
public DeleteNextWordAction() {
super(rtaDeleteNextWordAction);
}
@Override
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
if (!textArea.isEditable() || !textArea.isEnabled()) {
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
return;
}
try {
int start = textArea.getSelectionStart();
int end = getNextWordStart(textArea, start);
if (end > start) {
textArea.getDocument().remove(start, end - start);
}
} catch (BadLocationException ex) {
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
}
}
@Override
public String getMacroID() {
return rtaDeleteNextWordAction;
}
/**
* Returns the starting offset to delete. Exists so subclasses can
* override.
*/
protected int getNextWordStart(RTextArea textArea, int end)
throws BadLocationException {
return Utilities.getNextWord(textArea, end);
}
}
}

View File

@ -0,0 +1,21 @@
package processing.app.syntax;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaUI;
import javax.swing.*;
import javax.swing.text.EditorKit;
import javax.swing.text.JTextComponent;
public class SketchTextAreaUI extends RSyntaxTextAreaUI {
private static final EditorKit defaultKit = new SketchTextAreaEditorKit();
public SketchTextAreaUI(JComponent rSyntaxTextArea) {
super(rSyntaxTextArea);
}
@Override
public EditorKit getEditorKit(JTextComponent tc) {
return defaultKit;
}
}