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:
parent
3069220fb5
commit
ee1ce3c37e
src/main
kotlin/org/acejump
config
search
resources
@ -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
|
||||
|
@ -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 }
|
||||
|
@ -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,
|
||||
|
||||
|
@ -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
|
||||
|
@ -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() }
|
||||
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user