fix: snippet \ characters (#513)

This commit is contained in:
hstyi
2025-04-15 17:17:24 +08:00
committed by GitHub
parent 6bdd83f208
commit 89cfb0b451

View File

@@ -6,7 +6,9 @@ import app.termora.Icons
import app.termora.actions.AnAction import app.termora.actions.AnAction
import app.termora.actions.AnActionEvent import app.termora.actions.AnActionEvent
import app.termora.terminal.ControlCharacters import app.termora.terminal.ControlCharacters
import app.termora.terminal.Null
import app.termora.terminal.panel.TerminalWriter import app.termora.terminal.panel.TerminalWriter
import org.apache.commons.lang3.StringUtils
import org.apache.commons.text.StringEscapeUtils import org.apache.commons.text.StringEscapeUtils
class SnippetAction private constructor() : AnAction(I18n.getString("termora.snippet.title"), Icons.codeSpan) { 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, "\\a" to ControlCharacters.BEL,
"\\e" to ControlCharacters.ESC, "\\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) { for (e in map.entries) {
text = text.replace(e.key, e.value.toString()) text = text.replace(e.key, e.value.toString())
} }
text = snippet.snippet.replace(Char.Null, '\\')
writer.write(TerminalWriter.WriteRequest.fromBytes(text.toByteArray(writer.getCharset()))) writer.write(TerminalWriter.WriteRequest.fromBytes(text.toByteArray(writer.getCharset())))
} }
} }