Как предотвратить запуск нового экземпляра прикрепленного приложения, если он уже запущен?

Поведение 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-последовательность, которую отправляют общие терминалы).

3
18.11.2016, 08:43
2 ответа

Я заставил это работать.

Вам необходимо добавить ключ «StartupWMClass» в запись на рабочем столе.

StartupWMClass :Если указано, то известно, что приложение отобразит по крайней мере одно окно с заданной строкой в ​​качестве своего класса WM или подсказки имени WM.

Информация о протоколе здесь более подробная информация здесь .

Вы можете установить xprop, запустить его и щелкнуть строку заголовка, чтобы узнать, к какому классу относится ваше приложение.

3
27.01.2020, 21:18

I не знаю об API Python, но это связано с GtkApplication.

Прочтите вики GtkApplication HowDoI, в которой говорится:

GtkApplication по умолчанию использует одноэкземплярные приложения

См. также этот вопрос.

1
27.01.2020, 21:18

Теги

Похожие вопросы