mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-05-07 21:34:09 +02:00
Remove currentAction and some unused code
This commit is contained in:
parent
126de5c218
commit
ad20021cee
src/main/java/com/maddyhome/idea/vim/ui/ex
@ -1,263 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.maddyhome.idea.vim.ui.ex
|
||||
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.editor.textarea.TextComponentEditorImpl
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.api.LocalOptionInitialisationScenario
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import java.awt.event.ActionEvent
|
||||
import java.awt.event.KeyEvent
|
||||
import javax.swing.Action
|
||||
import javax.swing.KeyStroke
|
||||
import javax.swing.text.BadLocationException
|
||||
import javax.swing.text.DefaultEditorKit
|
||||
import javax.swing.text.Document
|
||||
import javax.swing.text.TextAction
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.min
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal interface MultiStepAction : Action {
|
||||
fun reset()
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class HistoryUpAction : TextAction(ExEditorKit.HistoryUp) {
|
||||
override fun actionPerformed(actionEvent: ActionEvent) {
|
||||
val target = getTextComponent(actionEvent) as ExTextField
|
||||
target.selectHistory(true, false)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class HistoryDownAction : TextAction(ExEditorKit.HistoryDown) {
|
||||
override fun actionPerformed(actionEvent: ActionEvent) {
|
||||
val target = getTextComponent(actionEvent) as ExTextField
|
||||
target.selectHistory(false, false)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class HistoryUpFilterAction : TextAction(ExEditorKit.HistoryUpFilter) {
|
||||
override fun actionPerformed(actionEvent: ActionEvent) {
|
||||
val target = getTextComponent(actionEvent) as ExTextField
|
||||
target.selectHistory(true, true)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class HistoryDownFilterAction : TextAction(ExEditorKit.HistoryDownFilter) {
|
||||
override fun actionPerformed(actionEvent: ActionEvent) {
|
||||
val target = getTextComponent(actionEvent) as ExTextField
|
||||
target.selectHistory(false, true)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class CompleteEntryAction : TextAction(ExEditorKit.CompleteEntry) {
|
||||
override fun actionPerformed(actionEvent: ActionEvent) {
|
||||
logger.debug("complete entry")
|
||||
val stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
|
||||
|
||||
// We send the <Enter> keystroke through the key handler rather than calling ProcessGroup#processExEntry directly.
|
||||
// We do this for a couple of reasons:
|
||||
// * The C mode mapping for ProcessExEntryAction handles the actual entry, and most importantly, it does so as a
|
||||
// write action
|
||||
// * The key handler routines get the chance to clean up and reset state
|
||||
val entry = ExEntryPanel.getInstance().entry
|
||||
val keyHandler = KeyHandler.getInstance()
|
||||
keyHandler.handleKey(entry.editor!!.vim, stroke, entry.context.vim, keyHandler.keyHandlerState)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val logger = logger<CompleteEntryAction>()
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class CancelEntryAction : TextAction(ExEditorKit.CancelEntry) {
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.cancel()
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class EscapeCharAction : TextAction(ExEditorKit.EscapeChar) {
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.escape()
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal abstract class DeleteCharAction internal constructor(name: String?) : TextAction(name) {
|
||||
@kotlin.jvm.Throws(BadLocationException::class)
|
||||
fun deleteSelection(doc: Document, dot: Int, mark: Int): Boolean {
|
||||
if (dot != mark) {
|
||||
doc.remove(min(dot, mark), abs(dot - mark))
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@kotlin.jvm.Throws(BadLocationException::class)
|
||||
fun deleteNextChar(doc: Document, dot: Int): Boolean {
|
||||
if (dot < doc.length) {
|
||||
var delChars = 1
|
||||
if (dot < doc.length - 1) {
|
||||
val dotChars = doc.getText(dot, 2)
|
||||
val c0 = dotChars[0]
|
||||
val c1 = dotChars[1]
|
||||
if (c0 in '\uD800'..'\uDBFF' && c1 in '\uDC00'..'\uDFFF') {
|
||||
delChars = 2
|
||||
}
|
||||
}
|
||||
doc.remove(dot, delChars)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@kotlin.jvm.Throws(BadLocationException::class)
|
||||
fun deletePrevChar(doc: Document, dot: Int): Boolean {
|
||||
if (dot > 0) {
|
||||
var delChars = 1
|
||||
if (dot > 1) {
|
||||
val dotChars = doc.getText(dot - 2, 2)
|
||||
val c0 = dotChars[0]
|
||||
val c1 = dotChars[1]
|
||||
if (c0 in '\uD800'..'\uDBFF' && c1 in '\uDC00'..'\uDFFF') {
|
||||
delChars = 2
|
||||
}
|
||||
}
|
||||
doc.remove(dot - delChars, delChars)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class DeleteNextCharAction : DeleteCharAction(DefaultEditorKit.deleteNextCharAction) {
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.saveLastEntry()
|
||||
try {
|
||||
val doc = target.document
|
||||
val caret = target.caret
|
||||
val dot = caret.dot
|
||||
val mark = caret.mark
|
||||
if (!deleteSelection(doc, dot, mark) && !deleteNextChar(doc, dot) && !deletePrevChar(doc, dot)) {
|
||||
target.cancel()
|
||||
}
|
||||
} catch (ex: BadLocationException) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class DeletePreviousCharAction : DeleteCharAction(DefaultEditorKit.deletePrevCharAction) {
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.saveLastEntry()
|
||||
try {
|
||||
val doc = target.document
|
||||
val caret = target.caret
|
||||
val dot = caret.dot
|
||||
val mark = caret.mark
|
||||
if (!deleteSelection(doc, dot, mark) && !deletePrevChar(doc, dot)) {
|
||||
if (dot == 0 && doc.length == 0) {
|
||||
target.cancel()
|
||||
}
|
||||
}
|
||||
} catch (bl: BadLocationException) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class DeletePreviousWordAction : TextAction(DefaultEditorKit.deletePrevWordAction) {
|
||||
/**
|
||||
* Invoked when an action occurs.
|
||||
*/
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.saveLastEntry()
|
||||
val doc = target.document
|
||||
val caret = target.caret
|
||||
val project = target.editor!!.project
|
||||
|
||||
// Create a VimEditor instance on the Swing text field which we can pass to the search helpers. We need an editor
|
||||
// rather than just working on a buffer because the search helpers need local options (specifically the local to
|
||||
// buffer 'iskeyword'). We use the CMD_LINE scenario to initialise local options from the main editor. The options
|
||||
// service will copy all local-to-buffer and local-to-window options, effectively cloning the options.
|
||||
// TODO: Over time, we should migrate all ex actions to be based on VimEditor
|
||||
// This will mean we always have an editor that has been initialised for options, etc. But also means that we can
|
||||
// share the command line entry actions between IdeaVim implementations
|
||||
val editor = TextComponentEditorImpl(project, target).vim
|
||||
injector.optionGroup.initialiseLocalOptions(editor, target.editor!!.vim, LocalOptionInitialisationScenario.CMD_LINE)
|
||||
|
||||
val offset = injector.searchHelper.findNextWord(editor, caret.dot, -1, bigWord = false, spaceWords = false)
|
||||
if (logger.isDebugEnabled) logger.debug("offset=$offset")
|
||||
try {
|
||||
val pos = caret.dot
|
||||
doc.remove(offset, pos - offset)
|
||||
} catch (ex: BadLocationException) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val logger = logger<DeletePreviousWordAction>()
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class DeleteToCursorAction : TextAction(ExEditorKit.DeleteToCursor) {
|
||||
/**
|
||||
* Invoked when an action occurs.
|
||||
*/
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.saveLastEntry()
|
||||
val doc = target.document
|
||||
val caret = target.caret
|
||||
try {
|
||||
doc.remove(0, caret.dot)
|
||||
} catch (ex: BadLocationException) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal class ToggleInsertReplaceAction : TextAction(ExEditorKit.ToggleInsertReplace) {
|
||||
/**
|
||||
* Invoked when an action occurs.
|
||||
*/
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
logger.debug("actionPerformed")
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
target.toggleInsertReplace()
|
||||
}
|
||||
|
||||
init {
|
||||
logger.debug("ToggleInsertReplaceAction()")
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val logger = logger<ToggleInsertReplaceAction>()
|
||||
}
|
||||
}
|
@ -7,7 +7,6 @@
|
||||
*/
|
||||
package com.maddyhome.idea.vim.ui.ex
|
||||
|
||||
import com.intellij.openapi.diagnostic.debug
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
@ -15,50 +14,12 @@ import com.maddyhome.idea.vim.newapi.vim
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import java.awt.event.ActionEvent
|
||||
import java.awt.event.KeyEvent
|
||||
import javax.swing.Action
|
||||
import javax.swing.KeyStroke
|
||||
import javax.swing.text.DefaultEditorKit
|
||||
import javax.swing.text.Document
|
||||
import javax.swing.text.TextAction
|
||||
|
||||
@Deprecated("ExCommands should be migrated to KeyHandler like commands for other modes")
|
||||
internal object ExEditorKit : DefaultEditorKit() {
|
||||
|
||||
@NonNls
|
||||
val CancelEntry: String = "cancel-entry"
|
||||
|
||||
@NonNls
|
||||
val CompleteEntry: String = "complete-entry"
|
||||
|
||||
@NonNls
|
||||
val EscapeChar: String = "escape"
|
||||
|
||||
@NonNls
|
||||
val DeleteToCursor: String = "delete-to-cursor"
|
||||
|
||||
@NonNls
|
||||
val ToggleInsertReplace: String = "toggle-insert"
|
||||
|
||||
@NonNls
|
||||
val HistoryUp: String = "history-up"
|
||||
|
||||
@NonNls
|
||||
val HistoryDown: String = "history-down"
|
||||
|
||||
@NonNls
|
||||
val HistoryUpFilter: String = "history-up-filter"
|
||||
|
||||
@NonNls
|
||||
val HistoryDownFilter: String = "history-down-filter"
|
||||
|
||||
@NonNls
|
||||
val StartDigraph: String = "start-digraph"
|
||||
|
||||
@NonNls
|
||||
val StartLiteral: String = "start-literal"
|
||||
|
||||
private val logger = logger<ExEditorKit>()
|
||||
|
||||
/**
|
||||
* Gets the MIME type of the data that this
|
||||
* kit represents support for.
|
||||
@ -70,19 +31,6 @@ internal object ExEditorKit : DefaultEditorKit() {
|
||||
return "text/ideavim"
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the set of commands that can be used
|
||||
* on a text component that is using a model and
|
||||
* view produced by this kit.
|
||||
*
|
||||
* @return the set of actions
|
||||
*/
|
||||
override fun getActions(): Array<Action> {
|
||||
val res = TextAction.augmentList(super.getActions(), exActions)
|
||||
logger.debug { "res.length=${res.size}" }
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an uninitialized text storage model
|
||||
* that is appropriate for this type of editor.
|
||||
@ -93,48 +41,29 @@ internal object ExEditorKit : DefaultEditorKit() {
|
||||
return ExDocument()
|
||||
}
|
||||
|
||||
private val exActions = arrayOf<Action>(
|
||||
CancelEntryAction(),
|
||||
CompleteEntryAction(),
|
||||
EscapeCharAction(),
|
||||
DeleteNextCharAction(),
|
||||
DeletePreviousCharAction(),
|
||||
DeletePreviousWordAction(),
|
||||
DeleteToCursorAction(),
|
||||
HistoryUpAction(),
|
||||
HistoryDownAction(),
|
||||
HistoryUpFilterAction(),
|
||||
HistoryDownFilterAction(),
|
||||
ToggleInsertReplaceAction(),
|
||||
)
|
||||
|
||||
class DefaultExKeyHandler : DefaultKeyTypedAction() {
|
||||
override fun actionPerformed(e: ActionEvent) {
|
||||
val target = getTextComponent(e) as ExTextField
|
||||
val currentAction = target.currentAction
|
||||
if (currentAction != null) {
|
||||
currentAction.actionPerformed(e)
|
||||
} else {
|
||||
val key = convert(e)
|
||||
if (key != null) {
|
||||
val c = key.keyChar
|
||||
if (c.code > 0) {
|
||||
if (target.useHandleKeyFromEx) {
|
||||
val panel = ((injector.commandLine.getActiveCommandLine() as? ExEntryPanel) ?: (injector.modalInput.getCurrentModalInput() as? WrappedAsModalInputExEntryPanel)?.exEntryPanel) ?: return
|
||||
val entry = panel.entry
|
||||
val editor = entry.editor
|
||||
val keyHandler = KeyHandler.getInstance()
|
||||
keyHandler.handleKey(editor!!.vim, key, entry.context.vim, keyHandler.keyHandlerState)
|
||||
} else {
|
||||
val event = ActionEvent(e.source, e.id, c.toString(), e.getWhen(), e.modifiers)
|
||||
super.actionPerformed(event)
|
||||
}
|
||||
target.saveLastEntry()
|
||||
|
||||
val key = convert(e)
|
||||
if (key != null) {
|
||||
val c = key.keyChar
|
||||
if (c.code > 0) {
|
||||
if (target.useHandleKeyFromEx) {
|
||||
val panel = ((injector.commandLine.getActiveCommandLine() as? ExEntryPanel) ?: (injector.modalInput.getCurrentModalInput() as? WrappedAsModalInputExEntryPanel)?.exEntryPanel) ?: return
|
||||
val entry = panel.entry
|
||||
val editor = entry.editor
|
||||
val keyHandler = KeyHandler.getInstance()
|
||||
keyHandler.handleKey(editor!!.vim, key, entry.context.vim, keyHandler.keyHandlerState)
|
||||
} else {
|
||||
val event = ActionEvent(e.source, e.id, c.toString(), e.getWhen(), e.modifiers)
|
||||
super.actionPerformed(event)
|
||||
}
|
||||
} else {
|
||||
super.actionPerformed(e)
|
||||
target.saveLastEntry()
|
||||
}
|
||||
} else {
|
||||
super.actionPerformed(e)
|
||||
target.saveLastEntry()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,11 +16,9 @@ import com.intellij.util.ui.JBUI;
|
||||
import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.api.VimCommandLine;
|
||||
import com.maddyhome.idea.vim.api.VimCommandLineCaret;
|
||||
import com.maddyhome.idea.vim.api.VimEditor;
|
||||
import com.maddyhome.idea.vim.helper.UiHelper;
|
||||
import com.maddyhome.idea.vim.history.HistoryConstants;
|
||||
import com.maddyhome.idea.vim.history.HistoryEntry;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.helpers.GuiCursorAttributes;
|
||||
import com.maddyhome.idea.vim.options.helpers.GuiCursorMode;
|
||||
import com.maddyhome.idea.vim.options.helpers.GuiCursorOptionHelper;
|
||||
@ -67,9 +65,6 @@ public class ExTextField extends JTextField {
|
||||
// If we're in the middle of an action (e.g. entering a register to paste, or inserting a digraph), cancel it if
|
||||
// the mouse is clicked anywhere. Vim's behavior is to use the mouse click as an event, which can lead to
|
||||
// something like : !%!C, which I don't believe is documented, or useful
|
||||
if (currentAction != null) {
|
||||
clearCurrentAction();
|
||||
}
|
||||
super.mouseClicked(e);
|
||||
}
|
||||
});
|
||||
@ -240,20 +235,15 @@ public class ExTextField extends JTextField {
|
||||
// This gets called for ALL events, before the IDE starts to process key events for the action system. We can add a
|
||||
// dispatcher that checks that the plugin is enabled, checks that the component with the focus is ExTextField,
|
||||
// dispatch to ExEntryPanel#handleKey and if it's processed, mark the event as consumed.
|
||||
if (currentAction != null) {
|
||||
currentAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, String.valueOf(c), modifiers));
|
||||
}
|
||||
else {
|
||||
KeyEvent event = new KeyEvent(this, keyChar != KeyEvent.CHAR_UNDEFINED ? KeyEvent.KEY_TYPED :
|
||||
(stroke.isOnKeyRelease() ? KeyEvent.KEY_RELEASED : KeyEvent.KEY_PRESSED),
|
||||
(new Date()).getTime(), modifiers, keyCode, c);
|
||||
KeyEvent event = new KeyEvent(this, keyChar != KeyEvent.CHAR_UNDEFINED ? KeyEvent.KEY_TYPED :
|
||||
(stroke.isOnKeyRelease() ? KeyEvent.KEY_RELEASED : KeyEvent.KEY_PRESSED),
|
||||
(new Date()).getTime(), modifiers, keyCode, c);
|
||||
|
||||
useHandleKeyFromEx = false;
|
||||
try {
|
||||
super.processKeyEvent(event);
|
||||
}finally {
|
||||
useHandleKeyFromEx = true;
|
||||
}
|
||||
useHandleKeyFromEx = false;
|
||||
try {
|
||||
super.processKeyEvent(event);
|
||||
} finally {
|
||||
useHandleKeyFromEx = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -279,12 +269,7 @@ public class ExTextField extends JTextField {
|
||||
* Cancels current action, if there is one. If not, cancels entry.
|
||||
*/
|
||||
void escape() {
|
||||
if (currentAction != null) {
|
||||
clearCurrentAction();
|
||||
}
|
||||
else {
|
||||
cancel();
|
||||
}
|
||||
cancel();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -299,19 +284,10 @@ public class ExTextField extends JTextField {
|
||||
}
|
||||
|
||||
public void clearCurrentAction() {
|
||||
if (currentAction != null) {
|
||||
currentAction.reset();
|
||||
}
|
||||
currentAction = null;
|
||||
VimCommandLine commandLine = injector.getCommandLine().getActiveCommandLine();
|
||||
if (commandLine != null) commandLine.clearPromptCharacter();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
Action getCurrentAction() {
|
||||
return currentAction;
|
||||
}
|
||||
|
||||
private void setInsertMode() {
|
||||
ExDocument doc = (ExDocument)getDocument();
|
||||
if (doc.isOverwrite()) {
|
||||
@ -545,7 +521,6 @@ public class ExTextField extends JTextField {
|
||||
String lastEntry;
|
||||
private List<HistoryEntry> history;
|
||||
int histIndex = 0;
|
||||
private @Nullable MultiStepAction currentAction;
|
||||
int currentActionPromptCharacterOffset = -1;
|
||||
|
||||
private static final Logger logger = Logger.getInstance(ExTextField.class.getName());
|
||||
|
Loading…
Reference in New Issue
Block a user