diff --git a/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt index 310ae8c..ffd4063 100644 --- a/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt +++ b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt @@ -30,7 +30,10 @@ class CreateFileWithFilenameTemplateAction( val contentPanel = NewItemSimplePopupPanel() val nameField = contentPanel.textField - nameField.text = placeholderProcessor.processTemplate(project, directory) + val (filename, caretPosition) = placeholderProcessor.processTemplate(project, directory) + + nameField.text = filename + nameField.caretPosition = caretPosition val popup = NewItemPopupUtil.createNewItemPopup(IdeBundle.message("title.new.file"), contentPanel, nameField) contentPanel.setApplyAction { event: InputEvent? -> diff --git a/src/main/kotlin/de/idetools/filename_template/placeholders/PlaceholderProcessor.kt b/src/main/kotlin/de/idetools/filename_template/placeholders/PlaceholderProcessor.kt index f521fc3..1768331 100644 --- a/src/main/kotlin/de/idetools/filename_template/placeholders/PlaceholderProcessor.kt +++ b/src/main/kotlin/de/idetools/filename_template/placeholders/PlaceholderProcessor.kt @@ -6,7 +6,7 @@ import kotlin.math.max class PlaceholderProcessor(private val template: String, private val placeholders: List) { - fun processTemplate(project: Project, directory: PsiDirectory): String { + fun processTemplate(project: Project, directory: PsiDirectory): ProcessedTemplate { var placeholderLevel = 0 var placeholder = "" @@ -45,6 +45,13 @@ class PlaceholderProcessor(private val template: String, private val placeholder } } - return context.filename + val caretPosition = when { + context.filename.indexOf("{|}") != -1 -> context.filename.indexOf("{|}") + context.filename.indexOfFirst { it == '.' } != -1 -> context.filename.indexOfFirst { it == '.' } + else -> context.filename.length + } + context.filename = context.filename.replace("{|}", "") + + return ProcessedTemplate(context.filename, caretPosition) } } diff --git a/src/main/kotlin/de/idetools/filename_template/placeholders/ProcessedTemplate.kt b/src/main/kotlin/de/idetools/filename_template/placeholders/ProcessedTemplate.kt new file mode 100644 index 0000000..3673772 --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/placeholders/ProcessedTemplate.kt @@ -0,0 +1,6 @@ +package de.idetools.filename_template.placeholders + +data class ProcessedTemplate( + val filename: String, + val caretPosition: Int +) diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 59f1874..5e0e4b0 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -64,6 +64,9 @@ The first available sequential number. Define the initial value and desired leading zeros in the template. Example: notes({042}).md => notes(042).md, notes(043).md, ... + +
{|}
+
The caret position. If omitted the caret is positioned before the first '.' if available or at the end.