[terminal] IDEA-344702 Iterate over results on Ctrl+R in command search popup

GitOrigin-RevId: 395a2f6c0a975c77f03de9806edfbc350935c6ab
This commit is contained in:
Konstantin Hudyakov
2024-02-05 15:33:02 +02:00
committed by intellij-monorepo-bot
parent 8975f98b6d
commit 87a77676af
2 changed files with 23 additions and 0 deletions

View File

@@ -51,6 +51,9 @@
id="terminalFindPrevious" order="first"/>
<editorActionHandler action="Replace" implementationClass="org.jetbrains.plugins.terminal.exp.TerminalReplaceHandler"
id="terminalReplace" order="first"/>
<editorActionHandler action="Terminal.SearchInCommandHistory"
implementationClass="org.jetbrains.plugins.terminal.exp.history.CommandSearchSelectNextHandler"
id="terminalCommandSearchSelectNext" order="first"/>
<typedHandler implementation="org.jetbrains.plugins.terminal.exp.TerminalCompletionAutoPopupHandler"
id="terminalCompletionAutoPopup" order="first"/>
<lookup.charFilter implementation="org.jetbrains.plugins.terminal.exp.TerminalCharFilter"

View File

@@ -2,15 +2,18 @@
package org.jetbrains.plugins.terminal.exp.history
import com.intellij.codeInsight.lookup.LookupManager
import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.remoting.ActionRemoteBehaviorSpecification
import com.intellij.openapi.editor.Caret
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.actionSystem.EditorActionHandler
import com.intellij.ui.ScrollingUtil
import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.isPromptEditor
import org.jetbrains.plugins.terminal.exp.TerminalDataContextUtils.promptController
import org.jetbrains.plugins.terminal.exp.TerminalPromotedEditorAction
import org.jetbrains.plugins.terminal.exp.history.CommandSearchPresenter.Companion.isTerminalCommandSearch
internal class CommandSearchAction : TerminalPromotedEditorAction(Handler()), ActionRemoteBehaviorSpecification.Disabled {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT
@@ -24,4 +27,21 @@ internal class CommandSearchAction : TerminalPromotedEditorAction(Handler()), Ac
return editor.isPromptEditor && LookupManager.getActiveLookup(editor) == null
}
}
}
internal class CommandSearchSelectNextHandler(private val originalHandler: EditorActionHandler) : EditorActionHandler() {
override fun doExecute(editor: Editor, caret: Caret?, dataContext: DataContext?) {
val lookup = LookupManager.getActiveLookup(editor) as? LookupImpl
if (lookup?.isTerminalCommandSearch == true) {
ScrollingUtil.moveUp(lookup.list, 0)
lookup.markSelectionTouched()
lookup.refreshUi(false, true)
}
else originalHandler.execute(editor, caret, dataContext)
}
override fun isEnabledForCaret(editor: Editor, caret: Caret, dataContext: DataContext?): Boolean {
return editor.isPromptEditor && LookupManager.getActiveLookup(editor)?.isTerminalCommandSearch == true
|| originalHandler.isEnabled(editor, caret, dataContext)
}
}