[konsole] src: Change control characters descriptions
Mariusz Glebocki
null at kde.org
Fri Nov 22 13:49:58 GMT 2019
Git commit 3c3ec56d8bcb5cdaa6affa5477e5303783239d2e by Mariusz Glebocki.
Committed on 18/11/2019 at 01:58.
Pushed by hindenburg into branch 'master'.
Change control characters descriptions
GUI:
M +32 -28 src/TerminalDisplay.cpp
https://invent.kde.org/kde/konsole/commit/3c3ec56d8bcb5cdaa6affa5477e5303783239d2e
diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp
index 24e95d06..d88ff0f4 100644
--- a/src/TerminalDisplay.cpp
+++ b/src/TerminalDisplay.cpp
@@ -3175,45 +3175,49 @@ void TerminalDisplay::doPaste(QString text, bool appendReturn)
static const auto isUnsafe = [](const QChar &c) {
return (c.category() == QChar::Category::Other_Control && !whitelist.contains(c.unicode()));
};
+ // Returns control sequence string (e.g. "^C") for control character c
+ static const auto charToSequence = [](const QChar &c) {
+ if (c.unicode() <= 0x1F) {
+ return QStringLiteral("^%1").arg(QChar(u'@' + c.unicode()));
+ } else if (c.unicode() == 0x7F) {
+ return QStringLiteral("^?");
+ } else if (c.unicode() >= 0x80 && c.unicode() <= 0x9F){
+ return QStringLiteral("^[%1").arg(QChar(u'@' + c.unicode() - 0x80));
+ }
+ return QString();
+ };
+
+ const QMap<ushort, QString> characterDescriptions = {
+ {0x0003, i18n("End Of Text/Interrupt: may exit the current process")},
+ {0x0004, i18n("End Of Transmission: may exit the current process")},
+ {0x0007, i18n("Bell: will try to emit an audible warning")},
+ {0x0008, i18n("Backspace")},
+ {0x0013, i18n("Device Control Three/XOFF: suspends output")},
+ {0x001a, i18n("Substitute/Suspend: may suspend current process")},
+ {0x001b, i18n("Escape: used for manipulating terminal state")},
+ {0x001c, i18n("File Separator/Quit: may abort the current process")},
+ };
QStringList unsafeCharacters;
for (const QChar &c : text) {
if (isUnsafe(c)) {
- QString description;
- switch(c.unicode()) {
- case u'\x03':
- description = i18n("^C Interrupt: May abort the current process");
- break;
- case u'\x04':
- description = i18n("^D End of transmission: May exit the current process");
- break;
- case u'\x07':
- description = i18n("^G Bell: Will try to emit an audible warning");
- break;
- case u'\x08':
- description = i18n("^H Backspace");
- break;
- case u'\x13':
- description = i18n("^S Scroll lock: Locks terminal output");
- break;
- case u'\x1a':
- description = i18n("^Z Suspend: Stops current process");
- break;
- case u'\x1b':
- description = i18n("ESC: Used for special commands to the current process");
- break;
- default:
- description = ki18n("Other unprintable character (\\x%1)").subs(c.unicode(), 0, 16).toString();
- break;
+ const QString sequence = charToSequence(c);
+ const QString description = characterDescriptions.value(c.unicode(), QString());
+ QString entry = QStringLiteral("U+%1").arg(c.unicode(), 4, 16, QLatin1Char('0'));
+ if(!sequence.isEmpty()) {
+ entry += QStringLiteral("\t%1").arg(sequence);
+ }
+ if(!description.isEmpty()) {
+ entry += QStringLiteral("\t%1").arg(description);
}
- unsafeCharacters.append(description);
+ unsafeCharacters.append(entry);
}
}
unsafeCharacters.removeDuplicates();
if (!unsafeCharacters.isEmpty()) {
int result = KMessageBox::warningYesNoCancelList(window(),
- i18n("The text you're trying to paste contains hidden unprintable characters, "
+ i18n("The text you're trying to paste contains hidden control characters, "
"do you want to filter them out?"),
unsafeCharacters,
i18nc("@title", "Filter"),
More information about the kde-doc-english
mailing list