From 89cfb0b451ac556d4dc776c43897527083d047d0 Mon Sep 17 00:00:00 2001 From: hstyi Date: Tue, 15 Apr 2025 17:17:24 +0800 Subject: [PATCH] fix: snippet \ characters (#513) --- .../kotlin/app/termora/snippet/SnippetAction.kt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/termora/snippet/SnippetAction.kt b/src/main/kotlin/app/termora/snippet/SnippetAction.kt index 608466c..9f65376 100644 --- a/src/main/kotlin/app/termora/snippet/SnippetAction.kt +++ b/src/main/kotlin/app/termora/snippet/SnippetAction.kt @@ -6,7 +6,9 @@ import app.termora.Icons import app.termora.actions.AnAction import app.termora.actions.AnActionEvent import app.termora.terminal.ControlCharacters +import app.termora.terminal.Null import app.termora.terminal.panel.TerminalWriter +import org.apache.commons.lang3.StringUtils import org.apache.commons.text.StringEscapeUtils class SnippetAction private constructor() : AnAction(I18n.getString("termora.snippet.title"), Icons.codeSpan) { @@ -33,11 +35,23 @@ class SnippetAction private constructor() : AnAction(I18n.getString("termora.sni "\\a" to ControlCharacters.BEL, "\\e" to ControlCharacters.ESC, ) + val chars = snippet.snippet.toCharArray() + for (i in chars.indices) { + val c = chars[i] + if (i == 0) continue + if (c != '\n') continue + if (chars[i - 1] != '\\') continue + // 每一行的最后一个 \ 比较特殊,先转成 null 然后再去 unescapeJava + chars[i - 1] = Char.Null + } - var text = StringEscapeUtils.unescapeJava(snippet.snippet) + var text = chars.joinToString(StringUtils.EMPTY) + text = StringEscapeUtils.unescapeJava(text) for (e in map.entries) { text = text.replace(e.key, e.value.toString()) } + text = snippet.snippet.replace(Char.Null, '\\') + writer.write(TerminalWriter.WriteRequest.fromBytes(text.toByteArray(writer.getCharset()))) } } \ No newline at end of file