mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
[terminal] IDEA-346817 Do not add custom caret move shortcuts in PowerShell
In Bash and Zsh, Ctrl+A and Ctrl+E shortcuts are moving the caret to the start or end of the line. But in PowerShell, Home and End shortcuts are doing that. And Ctrl+A is selecting the text instead. Also move custom shell shortcuts declaration to a single place. GitOrigin-RevId: 35fb6d75b46117770599e40f45949b50c7de067c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
535464716e
commit
a34970eb76
@@ -143,16 +143,6 @@
|
||||
<keyboard-shortcut first-keystroke="control C" keymap="Mac OS X" replace-all="true"/>
|
||||
<keyboard-shortcut first-keystroke="control C" keymap="Mac OS X 10.5+" replace-all="true"/>
|
||||
</action>
|
||||
<action id="Terminal.MoveCaretToLineStart" class="org.jetbrains.plugins.terminal.action.TerminalMoveCaretToLineStartAction">
|
||||
<keyboard-shortcut first-keystroke="control A" keymap="$default"/>
|
||||
<keyboard-shortcut first-keystroke="control A" keymap="Mac OS X" replace-all="true"/>
|
||||
<keyboard-shortcut first-keystroke="control A" keymap="Mac OS X 10.5+" replace-all="true"/>
|
||||
</action>
|
||||
<action id="Terminal.MoveCaretToLineEnd" class="org.jetbrains.plugins.terminal.action.TerminalMoveCaretToLineEndAction">
|
||||
<keyboard-shortcut first-keystroke="control E" keymap="$default"/>
|
||||
<keyboard-shortcut first-keystroke="control E" keymap="Mac OS X" replace-all="true"/>
|
||||
<keyboard-shortcut first-keystroke="control E" keymap="Mac OS X 10.5+" replace-all="true"/>
|
||||
</action>
|
||||
<action id="Terminal.DeletePreviousWord" class="org.jetbrains.plugins.terminal.action.TerminalDeletePreviousWordAction">
|
||||
<keyboard-shortcut first-keystroke="control W" keymap="$default"/>
|
||||
<keyboard-shortcut first-keystroke="control W" keymap="Mac OS X" replace-all="true"/>
|
||||
|
||||
@@ -12,15 +12,14 @@ import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.isAlternateBu
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.isOutputEditor
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.selectionController
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.terminalSession
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalUiUtils
|
||||
import java.awt.event.InputEvent
|
||||
import java.awt.event.KeyEvent
|
||||
import javax.swing.KeyStroke
|
||||
|
||||
class TerminalInterruptCommandAction : DumbAwareAction(TerminalBundle.message("action.Terminal.InterruptCommand.text")),
|
||||
ActionRemoteBehaviorSpecification.Disabled {
|
||||
init {
|
||||
val keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK)
|
||||
shortcutSet = CustomShortcutSet(keyStroke)
|
||||
shortcutSet = TerminalUiUtils.createSingleShortcutSet(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK)
|
||||
}
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
|
||||
@@ -7,6 +7,9 @@ import com.intellij.openapi.application.runWriteAction
|
||||
import com.intellij.openapi.editor.Caret
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalPromotedEditorAction
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalUiUtils
|
||||
import java.awt.event.InputEvent
|
||||
import java.awt.event.KeyEvent
|
||||
|
||||
private class TerminalMoveCaretActionHandler(private val moveToStart: Boolean) : TerminalPromptEditorActionHandler() {
|
||||
override fun executeAction(editor: Editor, caret: Caret?, dataContext: DataContext) {
|
||||
@@ -23,7 +26,15 @@ private class TerminalMoveCaretActionHandler(private val moveToStart: Boolean) :
|
||||
}
|
||||
|
||||
class TerminalMoveCaretToLineStartAction : TerminalPromotedEditorAction(TerminalMoveCaretActionHandler(moveToStart = true)),
|
||||
ActionRemoteBehaviorSpecification.Disabled
|
||||
ActionRemoteBehaviorSpecification.Disabled {
|
||||
init {
|
||||
shortcutSet = TerminalUiUtils.createSingleShortcutSet(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK)
|
||||
}
|
||||
}
|
||||
|
||||
class TerminalMoveCaretToLineEndAction : TerminalPromotedEditorAction(TerminalMoveCaretActionHandler(moveToStart = false)),
|
||||
ActionRemoteBehaviorSpecification.Disabled
|
||||
ActionRemoteBehaviorSpecification.Disabled {
|
||||
init {
|
||||
shortcutSet = TerminalUiUtils.createSingleShortcutSet(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK)
|
||||
}
|
||||
}
|
||||
@@ -21,8 +21,12 @@ import com.intellij.util.ui.JBInsets
|
||||
import com.jediterm.core.util.TermSize
|
||||
import com.jediterm.terminal.RequestOrigin
|
||||
import com.jediterm.terminal.TtyConnector
|
||||
import org.jetbrains.plugins.terminal.action.TerminalInterruptCommandAction
|
||||
import org.jetbrains.plugins.terminal.action.TerminalMoveCaretToLineEndAction
|
||||
import org.jetbrains.plugins.terminal.action.TerminalMoveCaretToLineStartAction
|
||||
import org.jetbrains.plugins.terminal.exp.BlockTerminalController.BlockTerminalControllerListener
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalPromptController.PromptStateListener
|
||||
import org.jetbrains.plugins.terminal.util.ShellType
|
||||
import java.awt.Dimension
|
||||
import java.awt.Rectangle
|
||||
import java.awt.event.*
|
||||
@@ -128,6 +132,8 @@ class BlockTerminalView(
|
||||
|
||||
installPromptAndOutput()
|
||||
|
||||
installActions()
|
||||
|
||||
focusModel.addListener(object: TerminalFocusModel.TerminalFocusListener {
|
||||
override fun activeStateChanged(isActive: Boolean) {
|
||||
if (isActive) {
|
||||
@@ -202,6 +208,22 @@ class BlockTerminalView(
|
||||
})
|
||||
}
|
||||
|
||||
// todo: Would be great to have a separate lists of actions for each shell
|
||||
// in something like TerminalShellSupport, to get them from the method instead of using if's.
|
||||
private fun installActions() {
|
||||
TerminalInterruptCommandAction().registerCustomShortcutSet(component, null)
|
||||
if (session.shellIntegration.shellType != ShellType.POWERSHELL) {
|
||||
// Do not add custom actions for moving the caret in PowerShell because Home and End shortcuts are used there.
|
||||
// But Home and End are already handled by default editor action implementations.
|
||||
listOf(
|
||||
TerminalMoveCaretToLineStartAction(),
|
||||
TerminalMoveCaretToLineEndAction()
|
||||
).forEach {
|
||||
it.registerCustomShortcutSet(component, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun startCommandExecution(command: String) {
|
||||
controller.startCommandExecution(command)
|
||||
}
|
||||
|
||||
@@ -70,7 +70,6 @@ class TerminalOutputView(
|
||||
val editor = TerminalUiUtils.createOutputEditor(document, project, settings)
|
||||
editor.settings.isUseSoftWraps = true
|
||||
stickScrollBarToBottom(editor.scrollPane.verticalScrollBar)
|
||||
TerminalInterruptCommandAction().registerCustomShortcutSet(editor.contentComponent, null)
|
||||
return editor
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,10 @@ import com.intellij.execution.impl.EditorHyperlinkSupport
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.ActionGroup
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.CustomShortcutSet
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.openapi.actionSystem.Separator
|
||||
import com.intellij.openapi.actionSystem.ShortcutSet
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
@@ -47,6 +49,7 @@ import java.awt.event.ComponentAdapter
|
||||
import java.awt.event.ComponentEvent
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import javax.swing.JScrollPane
|
||||
import javax.swing.KeyStroke
|
||||
import kotlin.math.max
|
||||
|
||||
object TerminalUiUtils {
|
||||
@@ -106,6 +109,11 @@ object TerminalUiUtils {
|
||||
})
|
||||
}
|
||||
|
||||
fun createSingleShortcutSet(keyCode: Int, modifiers: Int): ShortcutSet {
|
||||
val keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers)
|
||||
return CustomShortcutSet(keyStroke)
|
||||
}
|
||||
|
||||
fun calculateTerminalSize(componentSize: Dimension, charSize: Dimension): TermSize {
|
||||
val width = componentSize.width / charSize.width
|
||||
val height = componentSize.height / charSize.height
|
||||
|
||||
Reference in New Issue
Block a user