Отправка Ctrl-L через dbus в эмулятор терминала
Через эмулятор терминала можно отправить текст на консоль эмулятора терминала следующим образом:
qdbus org.kde.konsole /Sessions/1 sendText "hello"
Однако я хочу удаленно очистить экран указанного окна терминала. Итак, я попробовал:
qdbus org.kde.konsole /Sessions/1 runCommand "clear"
Отчасти делает то, что хочу. Единственная проблема: экран не очищается, когда запущен процесс.
В эмуляторе терминала, в этом случае комбинация клавиш "Ctrl + L" сделает работу.
Поэтому я пытаюсь отправить строку с escape-символами для этого ярлыка. Это сработает? Это, однако, не делает;
qdbus org.kde.konsole /Sessions/1 sendText "\033[2J"
(runCommand нет)
1 ответ
Это работает для меня:
qdbus org.kde.konsole /Sessions/1 sendText $'\014'
Во-первых, чтобы создать символ из его восьмеричного кода, синтаксис "\033"
будет работать в C, но не в Bash.
Во-вторых, хотя "ESC [ 2 J" - это код VT100 для стирания экрана, он работает для меня, только если я echo $'\033[2J'
, и это не будет работать, если команда выполняется.
В-третьих, Ctrl-L будет работать, если программа ожидает ввода от терминала (например, irb
или же python
сделать), но это не будет работать для while sleep 1; do echo Still running; done
петля.