1
0
mirror of https://github.com/chylex/IntelliJ-AceJump.git synced 2025-05-14 01:34:02 +02:00

Add 'Jump to End' mode

This commit is contained in:
chylex 2020-11-24 13:07:45 +01:00
parent 3069220fb5
commit ee1ce3c37e
8 changed files with 53 additions and 11 deletions

View File

@ -37,6 +37,7 @@ class AceConfig: PersistentStateComponent<AceSettings> {
val cycleMode3: JumpMode get() = settings.cycleMode3
val cycleMode4: JumpMode get() = settings.cycleMode4
val jumpModeColor: Color get() = settings.jumpModeColor
val jumpEndModeColor: Color get() = settings.jumpEndModeColor
val targetModeColor: Color get() = settings.targetModeColor
val definitionModeColor: Color get() = settings.definitionModeColor
val textHighlightColor: Color get() = settings.textHighlightColor

View File

@ -22,6 +22,7 @@ class AceConfigurable: Configurable {
panel.cycleMode3 != settings.cycleMode3 ||
panel.cycleMode4 != settings.cycleMode4 ||
panel.jumpModeColor != settings.jumpModeColor ||
panel.jumpEndModeColor != settings.jumpEndModeColor ||
panel.targetModeColor != settings.targetModeColor ||
panel.definitionModeColor != settings.definitionModeColor ||
panel.textHighlightColor != settings.textHighlightColor ||
@ -47,6 +48,7 @@ class AceConfigurable: Configurable {
settings.cycleMode3 = panel.cycleMode3
settings.cycleMode4 = panel.cycleMode4
panel.jumpModeColor ?.let { settings.jumpModeColor = it }
panel.jumpEndModeColor?.let { settings.jumpEndModeColor = it }
panel.targetModeColor ?.let { settings.targetModeColor = it }
panel.definitionModeColor ?.let { settings.definitionModeColor = it }
panel.textHighlightColor ?.let { settings.textHighlightColor = it }

View File

@ -17,11 +17,14 @@ data class AceSettings(
var cycleMode1: JumpMode = JumpMode.JUMP,
var cycleMode2: JumpMode = JumpMode.DEFINE,
var cycleMode3: JumpMode = JumpMode.TARGET,
var cycleMode4: JumpMode = JumpMode.DISABLED,
var cycleMode4: JumpMode = JumpMode.JUMP_END,
@OptionTag("jumpModeRGB", converter = ColorConverter::class)
var jumpModeColor: Color = Color.BLUE,
@OptionTag("jumpEndModeRGB", converter = ColorConverter::class)
var jumpEndModeColor: Color = Color.CYAN,
@OptionTag("targetModeRGB", converter = ColorConverter::class)
var targetModeColor: Color = Color.RED,

View File

@ -33,6 +33,7 @@ internal class AceSettingsPanel {
private val cycleModeCombo3 = ComboBox<JumpMode>()
private val cycleModeCombo4 = ComboBox<JumpMode>()
private val jumpModeColorWheel = ColorPanel()
private val jumpEndModeColorWheel = ColorPanel()
private val targetModeColorWheel = ColorPanel()
private val definitionModeColorWheel = ColorPanel()
private val textHighlightColorWheel = ColorPanel()
@ -100,6 +101,7 @@ internal class AceSettingsPanel {
titledRow(aceString("colorsHeading")) {
row(aceString("jumpModeColorLabel")) { short(jumpModeColorWheel) }
row(aceString("jumpEndModeColorLabel")) { short(jumpEndModeColorWheel) }
row(aceString("targetModeColorLabel")) { short(targetModeColorWheel) }
row(aceString("definitionModeColorLabel")) { short(definitionModeColorWheel) }
row(aceString("textHighlightColorLabel")) { short(textHighlightColorWheel) }
@ -128,6 +130,7 @@ internal class AceSettingsPanel {
internal var cycleMode3 by cycleModeCombo3
internal var cycleMode4 by cycleModeCombo4
internal var jumpModeColor by jumpModeColorWheel
internal var jumpEndModeColor by jumpEndModeColorWheel
internal var targetModeColor by targetModeColorWheel
internal var definitionModeColor by definitionModeColorWheel
internal var textHighlightColor by textHighlightColorWheel
@ -146,6 +149,7 @@ internal class AceSettingsPanel {
cycleMode3 = settings.cycleMode3
cycleMode4 = settings.cycleMode4
jumpModeColor = settings.jumpModeColor
jumpEndModeColor = settings.jumpEndModeColor
targetModeColor = settings.targetModeColor
definitionModeColor = settings.definitionModeColor
textHighlightColor = settings.textHighlightColor

View File

@ -19,7 +19,8 @@ interface Resettable {
fun reset()
}
fun aceString(s: String) = ResourceBundle.getBundle("AceResources").getString(s)
fun aceString(s: String): String =
ResourceBundle.getBundle("AceResources").getString(s)
fun <P> applyTo(vararg ps: P, fx: P.() -> Unit) = ps.forEach { it.fx() }

View File

@ -9,7 +9,7 @@ import org.acejump.view.Model.editor
import java.awt.Color
enum class JumpMode {
DISABLED, JUMP, TARGET, DEFINE;
DISABLED, JUMP, JUMP_END, TARGET, DEFINE;
companion object: Resettable {
private var modeIndex = 0
@ -17,9 +17,10 @@ enum class JumpMode {
set(value) {
field = value
setCaretColor(when (field) {
JUMP -> AceConfig.jumpModeColor
DEFINE -> AceConfig.definitionModeColor
TARGET -> AceConfig.targetModeColor
JUMP -> AceConfig.jumpModeColor
JUMP_END -> AceConfig.jumpEndModeColor
DEFINE -> AceConfig.definitionModeColor
TARGET -> AceConfig.targetModeColor
DISABLED -> Model.naturalCaretColor
})
@ -81,7 +82,8 @@ enum class JumpMode {
override fun toString() = when(this) {
DISABLED -> aceString("jumpModeDisabled")
JUMP -> aceString("jumpModeJump")
JUMP_END -> aceString("jumpModeJumpEnd")
TARGET -> aceString("jumpModeTarget")
DEFINE -> aceString("jumpModeDefine")
} ?: "Unknown"
}
}

View File

@ -11,8 +11,8 @@ import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory
import com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl
import com.intellij.openapi.ui.playback.commands.ActionCommand
import com.intellij.openapi.util.TextRange
import org.acejump.search.JumpMode.DEFINE
import org.acejump.search.JumpMode.TARGET
import org.acejump.label.Tagger
import org.acejump.search.JumpMode.*
import org.acejump.view.Model.editor
import org.acejump.view.Model.editorText
import org.acejump.view.Model.project
@ -38,7 +38,14 @@ object Jumper: Resettable {
logger.debug("Jumping to line ${logPos.line}, column ${logPos.column}...")
val oldOffset = caretModel.offset
moveCaretTo(newOffset)
when {
JumpMode.equals(JUMP_END) ->
moveCaretToEnd(newOffset + countMatchingCharacters(newOffset, Tagger.query))
else ->
moveCaretTo(newOffset)
}
when {
Finder.isShiftSelectEnabled && done -> selectRange(oldOffset, newOffset)
@ -65,12 +72,32 @@ object Jumper: Resettable {
aceJumpHistoryAppender, "AceJumpHistoryAppender",
DocCommandGroupId.noneGroupId(document), document)
private fun moveCaretTo(offset: Int) = editor.run {
private fun Editor.moveCaretTo(offset: Int) {
appendCaretPositionToEditorNavigationHistory()
selectionModel.removeSelection()
caretModel.moveToOffset(offset)
}
private fun Editor.moveCaretToEnd(offset: Int) {
val ranges = ArrayList<TextRange>()
addWordSelection(settings.isCamelWords, editorText, offset, ranges)
if (ranges.isEmpty()) {
moveCaretTo(offset)
}
else {
moveCaretTo(min(ranges[0].endOffset, editorText.length))
}
}
private fun countMatchingCharacters(offset: Int, query: String): Int {
var count = 0
while (offset + count < editorText.length && count < query.length && editorText[offset + count] == query[count]) {
count++
}
return count
}
/**
* Selects a sequence of contiguous characters adjacent to the target offset
* matching [Character.isJavaIdentifierPart], or nothing at all.

View File

@ -6,10 +6,12 @@ modesHeading=Modes
cycleModeOrderLabel=Cycle order:
jumpModeDisabled=(Skip)
jumpModeJump=Jump
jumpModeJumpEnd=Jump to End
jumpModeTarget=Target
jumpModeDefine=Definition
colorsHeading=Colors
jumpModeColorLabel=Jump mode caret background:
jumpEndModeColorLabel=Jump to End mode caret background:
targetModeColorLabel=Target mode caret background:
definitionModeColorLabel=Definition mode caret background:
textHighlightColorLabel=Searched text background: