Поведение Cm
, Ci
и т. Д. Реализуется с помощью bash, но тот факт, что они ' То же, что и Return , Tab и т. д., связано с поведением терминала. Все терминалы ведут себя так, потому что все терминалы всегда вели себя так, и это то, что ожидают приложения. Интерфейс между терминалом и приложением основан на символах (фактически, байтах), а не на ключах, поэтому ключи, которые не отправляют печатные символы и комбинации клавиш, должны быть как-то закодированы. См. Как работают ввод с клавиатуры и вывод текста? для получения дополнительной информации по этой теме. См. Также https://emacs.stackexchange.com/questions/1020/problems-with-keybindings-when-using-terminal
TAB
- это символ табуляции в ASCII , и это то же самое, что и символ Ctrl + I в ASCII. То же самое и с другими ключами. Терминалы отправляют этот символ как при нажатии пользователем Tab , так и при нажатии пользователем Ctrl + I .То же самое для RET
(CR) и Cm
, для LFD
и Cj
(которых нет на большинстве клавиатур), а также для ESC
и C - [
. Также существует BackSpace , который отправляет либо C-h
, либо C -?
, это отдельная проблема.
Конфигурация терминала ( stty
settings) может дополнительно применяться, и это влияет на некоторые настройки bash (например, после stty erase @
, bash будет обрабатывать нажатие ] @
как BackSpace), но не Cm
и Cj
для отправки текущей строки.
^ [[D
равно Esc [ D , но с большой буквы D
). Если вы нажмете Esc [ D , bash увидит клавишу Left из-за объявления управляющих последовательностей клавиши курсора в ] termcap или terminfo база данных. Нет привязки по умолчанию для Esc [ d (это не escape-последовательность, которую отправляют общие терминалы).
Я заставил это работать.
Вам необходимо добавить ключ «StartupWMClass» в запись на рабочем столе.
StartupWMClass :Если указано, то известно, что приложение отобразит по крайней мере одно окно с заданной строкой в качестве своего класса WM или подсказки имени WM.
Информация о протоколе здесь более подробная информация здесь .
Вы можете установить xprop, запустить его и щелкнуть строку заголовка, чтобы узнать, к какому классу относится ваше приложение.
I не знаю об API Python, но это связано с GtkApplication.
Прочтите вики GtkApplication HowDoI, в которой говорится:
GtkApplication по умолчанию использует одноэкземплярные приложения
См. также этот вопрос.