Skip to content

Commit

Permalink
add support for putting & editing macros
Browse files Browse the repository at this point in the history
  • Loading branch information
rieonke committed Jun 21, 2020
1 parent 354aec4 commit f40882b
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/com/maddyhome/idea/vim/action/copy/PutTextAction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.maddyhome.idea.vim.command.Command
import com.maddyhome.idea.vim.group.copy.PutData
import com.maddyhome.idea.vim.group.copy.PutData.TextData
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
import com.maddyhome.idea.vim.helper.StringHelper

sealed class PutTextBaseAction(
private val insertTextBeforeCaret: Boolean,
Expand All @@ -35,7 +36,7 @@ sealed class PutTextBaseAction(

override fun execute(editor: Editor, context: DataContext, count: Int, rawCount: Int, argument: Argument?): Boolean {
val lastRegister = VimPlugin.getRegister().lastRegister
val textData = if (lastRegister != null) TextData(lastRegister.text, lastRegister.type, lastRegister.transferableData) else null
val textData = if (lastRegister != null) TextData(lastRegister.text ?: StringHelper.toPrintableCharacters(lastRegister.keys), lastRegister.type, lastRegister.transferableData) else null
val putData = PutData(textData, null, count, insertTextBeforeCaret, indent, caretAfterInsertedText, -1)
return VimPlugin.getPut().putText(editor, context, putData)
}
Expand Down
9 changes: 6 additions & 3 deletions src/com/maddyhome/idea/vim/ex/handler/PutLinesHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.maddyhome.idea.vim.ex.CommandHandler
import com.maddyhome.idea.vim.ex.ExCommand
import com.maddyhome.idea.vim.ex.flags
import com.maddyhome.idea.vim.group.copy.PutData
import com.maddyhome.idea.vim.helper.StringHelper

class PutLinesHandler : CommandHandler.SingleExecution() {
override val argFlags = flags(RangeFlag.RANGE_OPTIONAL, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
Expand All @@ -35,14 +36,16 @@ class PutLinesHandler : CommandHandler.SingleExecution() {

val registerGroup = VimPlugin.getRegister()
val arg = cmd.argument
if (arg.isNotEmpty() && !registerGroup.selectRegister(arg[0])) {
return false
if (arg.isNotEmpty()) {
if(!registerGroup.selectRegister(arg[0])) {
return false
}
} else {
registerGroup.selectRegister(registerGroup.defaultRegister)
}

val line = if (cmd.ranges.size() == 0) -1 else cmd.getLine(editor)
val textData = registerGroup.lastRegister?.let { PutData.TextData(it.text, SelectionType.LINE_WISE, it.transferableData) }
val textData = registerGroup.lastRegister?.let { PutData.TextData(it.text ?: StringHelper.toPrintableCharacters(it.keys), SelectionType.LINE_WISE, it.transferableData) }
val putData = PutData(textData, null, 1, insertTextBeforeCaret = false, _indent = false, caretAfterInsertedText = false, putToLine = line)
return VimPlugin.getPut().putText(editor, context, putData)
}
Expand Down
10 changes: 8 additions & 2 deletions src/com/maddyhome/idea/vim/group/MacroGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.maddyhome.idea.vim.KeyHandler;
import com.maddyhome.idea.vim.VimPlugin;
import com.maddyhome.idea.vim.common.Register;
import com.maddyhome.idea.vim.helper.StringHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -57,8 +58,13 @@ public boolean playbackRegister(@NotNull Editor editor, @NotNull DataContext con
if (register == null) {
return false;
}

List<KeyStroke> keys = register.getKeys();
List<KeyStroke> keys;
if (register.getRawText() == null) {
keys = register.getKeys();
}
else {
keys = StringHelper.parseKeys(register.getRawText());
}
playbackKeys(editor, context, project, keys, 0, 0, count);

lastRegister = reg;
Expand Down
7 changes: 7 additions & 0 deletions src/com/maddyhome/idea/vim/helper/StringHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ private enum KeyParserState {
INIT,
ESCAPE,
SPECIAL,
CONTROL
}

/**
Expand All @@ -95,6 +96,8 @@ private enum KeyParserState {
else if (c == '<' || c == '«') {
state = KeyParserState.SPECIAL;
specialKeyBuilder = new StringBuilder();
} else if (c == '^'){
state = KeyParserState.CONTROL;
}
else {
final KeyStroke stroke;
Expand Down Expand Up @@ -151,6 +154,10 @@ else if (specialKey != null) {
specialKeyBuilder.append(c);
}
break;
case CONTROL:
result.add(KeyStroke.getKeyStroke(c, CTRL_DOWN_MASK));
state = KeyParserState.INIT;
break;
}
}
if (state == KeyParserState.ESCAPE) {
Expand Down

0 comments on commit f40882b

Please sign in to comment.