diff --git a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt index c3cfa14..e224f9e 100644 --- a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt +++ b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt @@ -12,6 +12,7 @@ import de.idetools.filename_template.placeholders.EpochPlaceholder import de.idetools.filename_template.placeholders.HostPlaceholder import de.idetools.filename_template.placeholders.PlaceholderProcessor import de.idetools.filename_template.placeholders.ProjectPlaceholder +import de.idetools.filename_template.placeholders.SequencePlaceholder import de.idetools.filename_template.placeholders.UserPlaceholder import de.idetools.filename_template.settings.FilenameTemplateSettingsState @@ -28,6 +29,7 @@ class InitializeFilenameTemplateActivity : StartupActivity { DatePlaceholder(), ProjectPlaceholder(), HostPlaceholder(), + SequencePlaceholder(), UserPlaceholder(), DefaultPlaceholder() ) diff --git a/src/main/kotlin/de/idetools/filename_template/placeholders/SequencePlaceholder.kt b/src/main/kotlin/de/idetools/filename_template/placeholders/SequencePlaceholder.kt new file mode 100644 index 0000000..bcb9707 --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/placeholders/SequencePlaceholder.kt @@ -0,0 +1,22 @@ +package de.idetools.filename_template.placeholders + +import com.intellij.psi.PsiFile + +class SequencePlaceholder : Placeholder { + override fun supports(placeholder: String): Boolean = placeholder.matches("^\\d+$".toRegex()) + + override fun process(placeholder: String, context: PlaceholderContext): String { + var value = Integer.parseInt(placeholder) + while (sequenceValueExists(context.directory.files, context.filename + formatSequence(value, placeholder.length))) { + value++ + } + return formatSequence(value, placeholder.length) + } + + private fun sequenceValueExists(files: Array, sequence: String): Boolean { + return files.any { it.name.startsWith(sequence) } + } + + private fun formatSequence(value: Int, length: Int) = + value.toString().padStart(length, '0') +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 79b59d3..59f1874 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -58,6 +58,12 @@
The username of the user running the IDE.
+ +
{###}
+
+ 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, ... +