1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-20 14:54:31 +01:00

Fix issue #3502: behavior of Cmd+[ and Cmd+] on Mac OS X.

This commit is contained in:
David A. Mellis 2015-12-21 16:41:12 -08:00
parent fa4876b7b1
commit 05be1480d4
2 changed files with 37 additions and 2 deletions

View File

@ -45,8 +45,8 @@ public class SketchTextAreaDefaultInputMap extends RSyntaxTextAreaDefaultInputMa
remove(KeyStroke.getKeyStroke(KeyEvent.VK_J, defaultModifier));
put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultModifier), DefaultEditorKit.insertTabAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, defaultModifier), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultModifier), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, defaultModifier), SketchTextAreaEditorKit.rtaIncreaseIndentAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, defaultModifier | shift), DefaultEditorKit.selectionBeginAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, defaultModifier | shift), DefaultEditorKit.selectionEndAction);

View File

@ -13,10 +13,12 @@ public class SketchTextAreaEditorKit extends RSyntaxTextAreaEditorKit {
public static final String rtaDeleteNextWordAction = "RTA.DeleteNextWordAction";
public static final String rtaDeleteLineToCursorAction = "RTA.DeleteLineToCursorAction";
public static final String rtaIncreaseIndentAction = "RTA.IncreaseIndentAction";
private static final Action[] defaultActions = {
new DeleteNextWordAction(),
new DeleteLineToCursorAction(),
new IncreaseIndentAction(),
new SelectWholeLineAction(),
new ToggleCommentAction()
};
@ -103,6 +105,39 @@ public class SketchTextAreaEditorKit extends RSyntaxTextAreaEditorKit {
}
/**
* Increases the indent of the selected or current line(s).
*/
public static class IncreaseIndentAction extends RSyntaxTextAreaEditorKit.InsertTabAction {
public IncreaseIndentAction() {
super(rtaIncreaseIndentAction);
}
@Override
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
int caretPosition = textArea.getCaretPosition();
boolean noSelec = textArea.getSelectedText() == null;
// if no selection, focus on first char.
if (noSelec) {
try {
int line = textArea.getCaretLineNumber();
int startOffset = textArea.getLineStartOffset(line);
textArea.setCaretPosition(startOffset);
} catch (BadLocationException ex) {
}
}
// Insert Tab or Spaces..
super.actionPerformedImpl(e, textArea);
if (noSelec) {
textArea.setCaretPosition(caretPosition + (textArea.getTabsEmulated() ? textArea.getTabSize() : 1));
}
}
}
/**
* Selects the line around the caret.
*/