mirror of
https://github.com/chylex/IntelliJ-AceJump.git
synced 2025-09-15 22:32:11 +02:00
Compare commits
2 Commits
experiment
...
customized
Author | SHA1 | Date | |
---|---|---|---|
b73e5f1ae5 | |||
ee1ce3c37e |
@@ -37,6 +37,7 @@ class AceConfig: PersistentStateComponent<AceSettings> {
|
|||||||
val cycleMode3: JumpMode get() = settings.cycleMode3
|
val cycleMode3: JumpMode get() = settings.cycleMode3
|
||||||
val cycleMode4: JumpMode get() = settings.cycleMode4
|
val cycleMode4: JumpMode get() = settings.cycleMode4
|
||||||
val jumpModeColor: Color get() = settings.jumpModeColor
|
val jumpModeColor: Color get() = settings.jumpModeColor
|
||||||
|
val jumpEndModeColor: Color get() = settings.jumpEndModeColor
|
||||||
val targetModeColor: Color get() = settings.targetModeColor
|
val targetModeColor: Color get() = settings.targetModeColor
|
||||||
val definitionModeColor: Color get() = settings.definitionModeColor
|
val definitionModeColor: Color get() = settings.definitionModeColor
|
||||||
val textHighlightColor: Color get() = settings.textHighlightColor
|
val textHighlightColor: Color get() = settings.textHighlightColor
|
||||||
|
@@ -22,6 +22,7 @@ class AceConfigurable: Configurable {
|
|||||||
panel.cycleMode3 != settings.cycleMode3 ||
|
panel.cycleMode3 != settings.cycleMode3 ||
|
||||||
panel.cycleMode4 != settings.cycleMode4 ||
|
panel.cycleMode4 != settings.cycleMode4 ||
|
||||||
panel.jumpModeColor != settings.jumpModeColor ||
|
panel.jumpModeColor != settings.jumpModeColor ||
|
||||||
|
panel.jumpEndModeColor != settings.jumpEndModeColor ||
|
||||||
panel.targetModeColor != settings.targetModeColor ||
|
panel.targetModeColor != settings.targetModeColor ||
|
||||||
panel.definitionModeColor != settings.definitionModeColor ||
|
panel.definitionModeColor != settings.definitionModeColor ||
|
||||||
panel.textHighlightColor != settings.textHighlightColor ||
|
panel.textHighlightColor != settings.textHighlightColor ||
|
||||||
@@ -47,6 +48,7 @@ class AceConfigurable: Configurable {
|
|||||||
settings.cycleMode3 = panel.cycleMode3
|
settings.cycleMode3 = panel.cycleMode3
|
||||||
settings.cycleMode4 = panel.cycleMode4
|
settings.cycleMode4 = panel.cycleMode4
|
||||||
panel.jumpModeColor ?.let { settings.jumpModeColor = it }
|
panel.jumpModeColor ?.let { settings.jumpModeColor = it }
|
||||||
|
panel.jumpEndModeColor?.let { settings.jumpEndModeColor = it }
|
||||||
panel.targetModeColor ?.let { settings.targetModeColor = it }
|
panel.targetModeColor ?.let { settings.targetModeColor = it }
|
||||||
panel.definitionModeColor ?.let { settings.definitionModeColor = it }
|
panel.definitionModeColor ?.let { settings.definitionModeColor = it }
|
||||||
panel.textHighlightColor ?.let { settings.textHighlightColor = it }
|
panel.textHighlightColor ?.let { settings.textHighlightColor = it }
|
||||||
|
@@ -17,11 +17,14 @@ data class AceSettings(
|
|||||||
var cycleMode1: JumpMode = JumpMode.JUMP,
|
var cycleMode1: JumpMode = JumpMode.JUMP,
|
||||||
var cycleMode2: JumpMode = JumpMode.DEFINE,
|
var cycleMode2: JumpMode = JumpMode.DEFINE,
|
||||||
var cycleMode3: JumpMode = JumpMode.TARGET,
|
var cycleMode3: JumpMode = JumpMode.TARGET,
|
||||||
var cycleMode4: JumpMode = JumpMode.DISABLED,
|
var cycleMode4: JumpMode = JumpMode.JUMP_END,
|
||||||
|
|
||||||
@OptionTag("jumpModeRGB", converter = ColorConverter::class)
|
@OptionTag("jumpModeRGB", converter = ColorConverter::class)
|
||||||
var jumpModeColor: Color = Color.BLUE,
|
var jumpModeColor: Color = Color.BLUE,
|
||||||
|
|
||||||
|
@OptionTag("jumpEndModeRGB", converter = ColorConverter::class)
|
||||||
|
var jumpEndModeColor: Color = Color.CYAN,
|
||||||
|
|
||||||
@OptionTag("targetModeRGB", converter = ColorConverter::class)
|
@OptionTag("targetModeRGB", converter = ColorConverter::class)
|
||||||
var targetModeColor: Color = Color.RED,
|
var targetModeColor: Color = Color.RED,
|
||||||
|
|
||||||
|
@@ -33,6 +33,7 @@ internal class AceSettingsPanel {
|
|||||||
private val cycleModeCombo3 = ComboBox<JumpMode>()
|
private val cycleModeCombo3 = ComboBox<JumpMode>()
|
||||||
private val cycleModeCombo4 = ComboBox<JumpMode>()
|
private val cycleModeCombo4 = ComboBox<JumpMode>()
|
||||||
private val jumpModeColorWheel = ColorPanel()
|
private val jumpModeColorWheel = ColorPanel()
|
||||||
|
private val jumpEndModeColorWheel = ColorPanel()
|
||||||
private val targetModeColorWheel = ColorPanel()
|
private val targetModeColorWheel = ColorPanel()
|
||||||
private val definitionModeColorWheel = ColorPanel()
|
private val definitionModeColorWheel = ColorPanel()
|
||||||
private val textHighlightColorWheel = ColorPanel()
|
private val textHighlightColorWheel = ColorPanel()
|
||||||
@@ -100,6 +101,7 @@ internal class AceSettingsPanel {
|
|||||||
|
|
||||||
titledRow(aceString("colorsHeading")) {
|
titledRow(aceString("colorsHeading")) {
|
||||||
row(aceString("jumpModeColorLabel")) { short(jumpModeColorWheel) }
|
row(aceString("jumpModeColorLabel")) { short(jumpModeColorWheel) }
|
||||||
|
row(aceString("jumpEndModeColorLabel")) { short(jumpEndModeColorWheel) }
|
||||||
row(aceString("targetModeColorLabel")) { short(targetModeColorWheel) }
|
row(aceString("targetModeColorLabel")) { short(targetModeColorWheel) }
|
||||||
row(aceString("definitionModeColorLabel")) { short(definitionModeColorWheel) }
|
row(aceString("definitionModeColorLabel")) { short(definitionModeColorWheel) }
|
||||||
row(aceString("textHighlightColorLabel")) { short(textHighlightColorWheel) }
|
row(aceString("textHighlightColorLabel")) { short(textHighlightColorWheel) }
|
||||||
@@ -128,6 +130,7 @@ internal class AceSettingsPanel {
|
|||||||
internal var cycleMode3 by cycleModeCombo3
|
internal var cycleMode3 by cycleModeCombo3
|
||||||
internal var cycleMode4 by cycleModeCombo4
|
internal var cycleMode4 by cycleModeCombo4
|
||||||
internal var jumpModeColor by jumpModeColorWheel
|
internal var jumpModeColor by jumpModeColorWheel
|
||||||
|
internal var jumpEndModeColor by jumpEndModeColorWheel
|
||||||
internal var targetModeColor by targetModeColorWheel
|
internal var targetModeColor by targetModeColorWheel
|
||||||
internal var definitionModeColor by definitionModeColorWheel
|
internal var definitionModeColor by definitionModeColorWheel
|
||||||
internal var textHighlightColor by textHighlightColorWheel
|
internal var textHighlightColor by textHighlightColorWheel
|
||||||
@@ -146,6 +149,7 @@ internal class AceSettingsPanel {
|
|||||||
cycleMode3 = settings.cycleMode3
|
cycleMode3 = settings.cycleMode3
|
||||||
cycleMode4 = settings.cycleMode4
|
cycleMode4 = settings.cycleMode4
|
||||||
jumpModeColor = settings.jumpModeColor
|
jumpModeColor = settings.jumpModeColor
|
||||||
|
jumpEndModeColor = settings.jumpEndModeColor
|
||||||
targetModeColor = settings.targetModeColor
|
targetModeColor = settings.targetModeColor
|
||||||
definitionModeColor = settings.definitionModeColor
|
definitionModeColor = settings.definitionModeColor
|
||||||
textHighlightColor = settings.textHighlightColor
|
textHighlightColor = settings.textHighlightColor
|
||||||
|
@@ -1,90 +1,132 @@
|
|||||||
package org.acejump.control
|
package org.acejump.control
|
||||||
|
|
||||||
|
import com.intellij.codeInsight.editorActions.SelectWordUtil
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR
|
import com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
|
import com.intellij.openapi.diagnostic.debug
|
||||||
|
import com.intellij.openapi.editor.CaretState
|
||||||
|
import com.intellij.openapi.editor.ScrollType
|
||||||
|
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||||
import com.intellij.openapi.project.DumbAwareAction
|
import com.intellij.openapi.project.DumbAwareAction
|
||||||
|
import com.intellij.openapi.util.TextRange
|
||||||
import org.acejump.control.Handler.regexSearch
|
import org.acejump.control.Handler.regexSearch
|
||||||
import org.acejump.label.Pattern
|
import org.acejump.label.Pattern
|
||||||
import org.acejump.label.Pattern.ALL_WORDS
|
import org.acejump.label.Pattern.ALL_WORDS
|
||||||
|
import org.acejump.search.Finder
|
||||||
import org.acejump.search.JumpMode
|
import org.acejump.search.JumpMode
|
||||||
import org.acejump.search.Jumper
|
import org.acejump.search.Jumper
|
||||||
import org.acejump.search.getNameOfFileInEditor
|
|
||||||
import org.acejump.view.Boundary.*
|
import org.acejump.view.Boundary.*
|
||||||
|
import org.acejump.view.Model
|
||||||
import org.acejump.view.Model.boundaries
|
import org.acejump.view.Model.boundaries
|
||||||
import org.acejump.view.Model.defaultBoundary
|
import org.acejump.view.Model.defaultBoundary
|
||||||
import org.acejump.view.Model.editor
|
import org.acejump.view.Model.editor
|
||||||
|
import org.acejump.view.Model.viewBounds
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entry point for all actions. The IntelliJ Platform calls AceJump here.
|
* Entry point for all actions. The IntelliJ Platform calls AceJump here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
open class AceAction: DumbAwareAction() {
|
sealed class AceAction: DumbAwareAction() {
|
||||||
open val logger = Logger.getInstance(javaClass)
|
val logger = Logger.getInstance(javaClass)
|
||||||
override fun update(action: AnActionEvent) {
|
|
||||||
|
final override fun update(action: AnActionEvent) {
|
||||||
action.presentation.isEnabled = action.getData(EDITOR) != null
|
action.presentation.isEnabled = action.getData(EDITOR) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun actionPerformed(e: AnActionEvent) {
|
final override fun actionPerformed(e: AnActionEvent) {
|
||||||
editor = e.getData(EDITOR) ?: return
|
editor = e.getData(EDITOR) ?: return
|
||||||
boundaries = defaultBoundary
|
boundaries = defaultBoundary
|
||||||
val textLength = editor.document.textLength
|
logger.debug { "Invoked on ${FileDocumentManager.getInstance().getFile(editor.document)?.presentableName} (${editor.document.textLength})" }
|
||||||
logger.info("Invoked on ${editor.getNameOfFileInEditor()} ($textLength)")
|
|
||||||
Handler.activate()
|
Handler.activate()
|
||||||
customize()
|
invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun customize() = Jumper.cycleMode()
|
abstract fun invoke()
|
||||||
|
|
||||||
|
object ActivateOrCycleMode : AceAction() {
|
||||||
|
override fun invoke() = Jumper.cycleMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
object ToggleJumpMode: AceAction() {
|
||||||
* When target mode is activated, selecting a tag will highlight an entire word.
|
override fun invoke() = Jumper.toggleMode(JumpMode.JUMP)
|
||||||
*/
|
|
||||||
|
|
||||||
class AceTargetAction: AceAction() {
|
|
||||||
override fun customize() = Jumper.toggleMode(JumpMode.TARGET)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
object ToggleJumpEndMode: AceAction() {
|
||||||
* When line mode is activated, we will tag the beginning and end of each line.
|
override fun invoke() = Jumper.toggleMode(JumpMode.JUMP_END)
|
||||||
*
|
|
||||||
* TODO: https://github.com/acejump/AceJump/issues/327
|
|
||||||
* TODO: https://github.com/acejump/AceJump/issues/340
|
|
||||||
*/
|
|
||||||
|
|
||||||
class AceLineAction: AceAction() {
|
|
||||||
override fun customize() = regexSearch(Pattern.LINE_MARK)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
object ToggleSelectWordMode: AceAction() {
|
||||||
* When declaration mode is activated, selecting a tag will take us to the
|
override fun invoke() = Jumper.toggleMode(JumpMode.TARGET)
|
||||||
* definition (i.e. declaration) of the token in the editor, if it exists.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class AceDefinitionAction: AceAction() {
|
|
||||||
override fun customize() = Jumper.toggleMode(JumpMode.DEFINE)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
object ToggleDefinitionMode: AceAction() {
|
||||||
* When word mode is activated, we will tag all words on the screen.
|
override fun invoke() = Jumper.toggleMode(JumpMode.DEFINE)
|
||||||
*/
|
|
||||||
|
|
||||||
class AceWordAction: AceAction() {
|
|
||||||
override fun customize() = regexSearch(ALL_WORDS, SCREEN_BOUNDARY)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
object ToggleAllLinesMode: AceAction() {
|
||||||
* Search for words from the start of the screen to the caret
|
override fun invoke() = regexSearch(Pattern.LINE_MARK)
|
||||||
*/
|
|
||||||
|
|
||||||
class AceWordForwardAction: AceAction() {
|
|
||||||
override fun customize() = regexSearch(ALL_WORDS, AFTER_CARET_BOUNDARY)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
object ToggleAllWordsMode: AceAction() {
|
||||||
* Search for words from the caret position to the start of the screen
|
override fun invoke() = regexSearch(ALL_WORDS, SCREEN_BOUNDARY)
|
||||||
*/
|
}
|
||||||
|
|
||||||
class AceWordBackwardsAction: AceAction() {
|
object ToggleAllWordsForwardMode: AceAction() {
|
||||||
override fun customize() = regexSearch(ALL_WORDS, BEFORE_CARET_BOUNDARY)
|
override fun invoke() = regexSearch(ALL_WORDS, AFTER_CARET_BOUNDARY)
|
||||||
|
}
|
||||||
|
|
||||||
|
object ToggleAllWordsBackwardsMode: AceAction() {
|
||||||
|
override fun invoke() = regexSearch(ALL_WORDS, BEFORE_CARET_BOUNDARY)
|
||||||
|
}
|
||||||
|
|
||||||
|
object ActOnHighlightedWords: AceAction() {
|
||||||
|
override fun invoke() = when(JumpMode.mode) {
|
||||||
|
JumpMode.DISABLED -> {}
|
||||||
|
JumpMode.JUMP -> if (editor.caretModel.supportsMultipleCarets()) jumpToAll() else Unit
|
||||||
|
JumpMode.JUMP_END -> if (editor.caretModel.supportsMultipleCarets()) jumpToWordEnds() else Unit
|
||||||
|
JumpMode.TARGET -> if (editor.caretModel.supportsMultipleCarets()) selectAllWords() else Unit
|
||||||
|
JumpMode.DEFINE -> {}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun jumpToAll() {
|
||||||
|
val carets = Finder.allResults().map {
|
||||||
|
CaretState(editor.offsetToLogicalPosition(it), null, null)
|
||||||
|
}
|
||||||
|
if (carets.isEmpty()) return
|
||||||
|
Handler.reset()
|
||||||
|
editor.caretModel.caretsAndSelections = carets
|
||||||
|
editor.scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun jumpToWordEnds() {
|
||||||
|
val ranges = ArrayList<TextRange>()
|
||||||
|
for (offset in Finder.allResults()) {
|
||||||
|
SelectWordUtil.addWordSelection(editor.settings.isCamelWords, Model.editorText, offset, ranges)
|
||||||
|
}
|
||||||
|
if (ranges.isEmpty()) return
|
||||||
|
|
||||||
|
Handler.reset()
|
||||||
|
editor.caretModel.caretsAndSelections = ranges.map {
|
||||||
|
CaretState(editor.offsetToLogicalPosition(it.endOffset), null, null)
|
||||||
|
}
|
||||||
|
editor.scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun selectAllWords() {
|
||||||
|
val ranges = ArrayList<TextRange>()
|
||||||
|
for (offset in Finder.allResults()) {
|
||||||
|
SelectWordUtil.addWordSelection(editor.settings.isCamelWords, Model.editorText, offset, ranges)
|
||||||
|
}
|
||||||
|
if (ranges.isEmpty()) return
|
||||||
|
|
||||||
|
Handler.reset()
|
||||||
|
editor.caretModel.caretsAndSelections = ranges.map {
|
||||||
|
val start = editor.offsetToLogicalPosition(it.startOffset)
|
||||||
|
val end = editor.offsetToLogicalPosition(it.endOffset)
|
||||||
|
CaretState(end, start, end)
|
||||||
|
}
|
||||||
|
editor.scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -19,7 +19,8 @@ interface Resettable {
|
|||||||
fun reset()
|
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() }
|
fun <P> applyTo(vararg ps: P, fx: P.() -> Unit) = ps.forEach { it.fx() }
|
||||||
|
|
||||||
|
@@ -201,6 +201,8 @@ object Finder : Resettable {
|
|||||||
return kept
|
return kept
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun allResults() = results
|
||||||
|
|
||||||
fun visibleResults() = results.filter { it in viewBounds }
|
fun visibleResults() = results.filter { it in viewBounds }
|
||||||
|
|
||||||
private fun String.isValidQuery() =
|
private fun String.isValidQuery() =
|
||||||
|
@@ -9,15 +9,17 @@ import org.acejump.view.Model.editor
|
|||||||
import java.awt.Color
|
import java.awt.Color
|
||||||
|
|
||||||
enum class JumpMode {
|
enum class JumpMode {
|
||||||
DISABLED, JUMP, TARGET, DEFINE;
|
DISABLED, JUMP, JUMP_END, TARGET, DEFINE;
|
||||||
|
|
||||||
companion object: Resettable {
|
companion object: Resettable {
|
||||||
private var modeIndex = 0
|
private var modeIndex = 0
|
||||||
private var mode: JumpMode = DISABLED
|
|
||||||
set(value) {
|
var mode: JumpMode = DISABLED
|
||||||
|
private set(value) {
|
||||||
field = value
|
field = value
|
||||||
setCaretColor(when (field) {
|
setCaretColor(when (field) {
|
||||||
JUMP -> AceConfig.jumpModeColor
|
JUMP -> AceConfig.jumpModeColor
|
||||||
|
JUMP_END -> AceConfig.jumpEndModeColor
|
||||||
DEFINE -> AceConfig.definitionModeColor
|
DEFINE -> AceConfig.definitionModeColor
|
||||||
TARGET -> AceConfig.targetModeColor
|
TARGET -> AceConfig.targetModeColor
|
||||||
DISABLED -> Model.naturalCaretColor
|
DISABLED -> Model.naturalCaretColor
|
||||||
@@ -81,7 +83,8 @@ enum class JumpMode {
|
|||||||
override fun toString() = when(this) {
|
override fun toString() = when(this) {
|
||||||
DISABLED -> aceString("jumpModeDisabled")
|
DISABLED -> aceString("jumpModeDisabled")
|
||||||
JUMP -> aceString("jumpModeJump")
|
JUMP -> aceString("jumpModeJump")
|
||||||
|
JUMP_END -> aceString("jumpModeJumpEnd")
|
||||||
TARGET -> aceString("jumpModeTarget")
|
TARGET -> aceString("jumpModeTarget")
|
||||||
DEFINE -> aceString("jumpModeDefine")
|
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.fileEditor.impl.IdeDocumentHistoryImpl
|
||||||
import com.intellij.openapi.ui.playback.commands.ActionCommand
|
import com.intellij.openapi.ui.playback.commands.ActionCommand
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import org.acejump.search.JumpMode.DEFINE
|
import org.acejump.label.Tagger
|
||||||
import org.acejump.search.JumpMode.TARGET
|
import org.acejump.search.JumpMode.*
|
||||||
import org.acejump.view.Model.editor
|
import org.acejump.view.Model.editor
|
||||||
import org.acejump.view.Model.editorText
|
import org.acejump.view.Model.editorText
|
||||||
import org.acejump.view.Model.project
|
import org.acejump.view.Model.project
|
||||||
@@ -38,7 +38,14 @@ object Jumper: Resettable {
|
|||||||
logger.debug("Jumping to line ${logPos.line}, column ${logPos.column}...")
|
logger.debug("Jumping to line ${logPos.line}, column ${logPos.column}...")
|
||||||
|
|
||||||
val oldOffset = caretModel.offset
|
val oldOffset = caretModel.offset
|
||||||
|
|
||||||
|
when {
|
||||||
|
JumpMode.equals(JUMP_END) ->
|
||||||
|
moveCaretToEnd(newOffset + countMatchingCharacters(newOffset, Tagger.query))
|
||||||
|
|
||||||
|
else ->
|
||||||
moveCaretTo(newOffset)
|
moveCaretTo(newOffset)
|
||||||
|
}
|
||||||
|
|
||||||
when {
|
when {
|
||||||
Finder.isShiftSelectEnabled && done -> selectRange(oldOffset, newOffset)
|
Finder.isShiftSelectEnabled && done -> selectRange(oldOffset, newOffset)
|
||||||
@@ -65,12 +72,32 @@ object Jumper: Resettable {
|
|||||||
aceJumpHistoryAppender, "AceJumpHistoryAppender",
|
aceJumpHistoryAppender, "AceJumpHistoryAppender",
|
||||||
DocCommandGroupId.noneGroupId(document), document)
|
DocCommandGroupId.noneGroupId(document), document)
|
||||||
|
|
||||||
private fun moveCaretTo(offset: Int) = editor.run {
|
private fun Editor.moveCaretTo(offset: Int) {
|
||||||
appendCaretPositionToEditorNavigationHistory()
|
appendCaretPositionToEditorNavigationHistory()
|
||||||
selectionModel.removeSelection()
|
selectionModel.removeSelection()
|
||||||
caretModel.moveToOffset(offset)
|
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
|
* Selects a sequence of contiguous characters adjacent to the target offset
|
||||||
* matching [Character.isJavaIdentifierPart], or nothing at all.
|
* matching [Character.isJavaIdentifierPart], or nothing at all.
|
||||||
|
@@ -6,10 +6,12 @@ modesHeading=Modes
|
|||||||
cycleModeOrderLabel=Cycle order:
|
cycleModeOrderLabel=Cycle order:
|
||||||
jumpModeDisabled=(Skip)
|
jumpModeDisabled=(Skip)
|
||||||
jumpModeJump=Jump
|
jumpModeJump=Jump
|
||||||
|
jumpModeJumpEnd=Jump to End
|
||||||
jumpModeTarget=Target
|
jumpModeTarget=Target
|
||||||
jumpModeDefine=Definition
|
jumpModeDefine=Definition
|
||||||
colorsHeading=Colors
|
colorsHeading=Colors
|
||||||
jumpModeColorLabel=Jump mode caret background:
|
jumpModeColorLabel=Jump mode caret background:
|
||||||
|
jumpEndModeColorLabel=Jump to End mode caret background:
|
||||||
targetModeColorLabel=Target mode caret background:
|
targetModeColorLabel=Target mode caret background:
|
||||||
definitionModeColorLabel=Definition mode caret background:
|
definitionModeColorLabel=Definition mode caret background:
|
||||||
textHighlightColorLabel=Searched text background:
|
textHighlightColorLabel=Searched text background:
|
||||||
|
@@ -22,44 +22,47 @@
|
|||||||
|
|
||||||
<actions>
|
<actions>
|
||||||
<action id="AceAction"
|
<action id="AceAction"
|
||||||
class="org.acejump.control.AceAction"
|
class="org.acejump.control.AceAction$ActivateOrCycleMode"
|
||||||
text="Activate AceJump Mode"
|
text="Activate / Cycle AceJump Mode">
|
||||||
description="Targets a character in AceJump">
|
|
||||||
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl SEMICOLON"/>
|
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl SEMICOLON"/>
|
||||||
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl SEMICOLON"/>
|
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl SEMICOLON"/>
|
||||||
<keyboard-shortcut keymap="$default" first-keystroke="ctrl SEMICOLON"/>
|
<keyboard-shortcut keymap="$default" first-keystroke="ctrl SEMICOLON"/>
|
||||||
</action>
|
</action>
|
||||||
|
<action id="AceWordStartAction"
|
||||||
|
class="org.acejump.control.AceAction$ToggleJumpMode"
|
||||||
|
text="Start AceJump in Word Start Mode"/>
|
||||||
|
<action id="AceWordEndAction"
|
||||||
|
class="org.acejump.control.AceAction$ToggleJumpEndMode"
|
||||||
|
text="Start AceJump in Word End Mode"/>
|
||||||
|
<action id="AceTargetAction"
|
||||||
|
class="org.acejump.control.AceAction$ToggleSelectWordMode"
|
||||||
|
text="Start AceJump in Word Select Mode">
|
||||||
|
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl alt SEMICOLON"/>
|
||||||
|
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl alt SEMICOLON"/>
|
||||||
|
<keyboard-shortcut keymap="$default" first-keystroke="ctrl alt SEMICOLON"/>
|
||||||
|
</action>
|
||||||
|
<action id="AceDeclarationAction"
|
||||||
|
class="org.acejump.control.AceAction$ToggleDefinitionMode"
|
||||||
|
text="Start AceJump in Declaration Mode"/>
|
||||||
<action id="AceLineAction"
|
<action id="AceLineAction"
|
||||||
class="org.acejump.control.AceLineAction"
|
class="org.acejump.control.AceAction$ToggleAllLinesMode"
|
||||||
text="Display Line Markers"
|
text="Start AceJump in All Lines Mode"
|
||||||
description="Targets line markers in AceJump">
|
description="Targets line markers in AceJump">
|
||||||
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl shift SEMICOLON"/>
|
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl shift SEMICOLON"/>
|
||||||
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl shift SEMICOLON"/>
|
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl shift SEMICOLON"/>
|
||||||
<keyboard-shortcut keymap="$default" first-keystroke="ctrl shift SEMICOLON"/>
|
<keyboard-shortcut keymap="$default" first-keystroke="ctrl shift SEMICOLON"/>
|
||||||
</action>
|
</action>
|
||||||
<action id="AceTargetAction"
|
|
||||||
class="org.acejump.control.AceTargetAction"
|
|
||||||
text="Start in Target Mode"
|
|
||||||
description="Targets a whole word in AceJump">
|
|
||||||
<keyboard-shortcut keymap="Mac OS X" first-keystroke="ctrl alt SEMICOLON"/>
|
|
||||||
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="ctrl alt SEMICOLON"/>
|
|
||||||
<keyboard-shortcut keymap="$default" first-keystroke="ctrl alt SEMICOLON"/>
|
|
||||||
</action>
|
|
||||||
<action id="AceWordAction"
|
<action id="AceWordAction"
|
||||||
class="org.acejump.control.AceWordAction"
|
class="org.acejump.control.AceAction$ToggleAllWordsMode"
|
||||||
text="Start in Word Mode"
|
text="Start AceJump in All Words Mode"/>
|
||||||
description="Searches for all words on the screen in AceJump"/>
|
|
||||||
<action id="AceWordForwardAction"
|
<action id="AceWordForwardAction"
|
||||||
class="org.acejump.control.AceWordForwardAction"
|
class="org.acejump.control.AceAction$ToggleAllWordsForwardMode"
|
||||||
text="Start in Word Forward Mode"
|
text="Start in All Words After Caret Mode"/>
|
||||||
description="Searches for all visible words after the caret in AceJump"/>
|
|
||||||
<action id="AceWordBackwardsAction"
|
<action id="AceWordBackwardsAction"
|
||||||
class="org.acejump.control.AceWordBackwardsAction"
|
class="org.acejump.control.AceAction$ToggleAllWordsBackwardsMode"
|
||||||
text="Start in Word Backward Mode"
|
text="Start in All Words Before Caret Mode"/>
|
||||||
description="Searches for all visible words before the caret in AceJump"/>
|
<action id="AceActOnHighlightedWords"
|
||||||
<action id="AceDeclarationAction"
|
class="org.acejump.control.AceAction$ActOnHighlightedWords"
|
||||||
class="org.acejump.control.AceDefinitionAction"
|
text="Act on Highlighted Words"/>
|
||||||
text="Start in Declaration Mode"
|
|
||||||
description="AceJump will invoke the 'Navigate To' action after jumping"/>
|
|
||||||
</actions>
|
</actions>
|
||||||
</idea-plugin>
|
</idea-plugin>
|
||||||
|
Reference in New Issue
Block a user