Я хотел бы имитировать использование Alfred в Mac OS X, где, если вы попытаетесь открыть приложение после его поиска, оно откроет новое окно только в том случае, если программа еще не запущена, в противном случае она установит фокус на в данный момент запущен экземпляр этого приложения. Есть ли способ изменить поведение модуля запуска по умолчанию, чтобы проверить это перед открытием нового окна?
16
.desktop
файлах. Если вы замените команду в.desktop
файле, однако, щелчок правой кнопкой мыши с опцией open будет прерван.Ответы:
Обновление 7 апреля: добавлена другая версия и найден Альберт, см. Обновление и Бонус ниже!
Относительно функциональности тире : Вы спросили: « Есть ли возможность изменить поведение модуля запуска по умолчанию, чтобы проверить это перед открытием нового окна ». Основной ответ: нет, как обычный пользователь, у вас нет возможности добавить это поведение в dash. Однако, если бы был разработчик единой области, который хотел бы реализовать это, вы могли бы обратиться к ним или разработать его самостоятельно, если у вас есть решимость и желание учиться. Мои навыки кодирования очень скромны, поэтому я использую сценарии оболочки и доступный графический интерфейс для сценариев в качестве обходного пути.
Связанная информация
Исходное сообщение:
Я написал скрипт, который использует диалог zenity и wmctrl для достижения того, что вы просили. Обратите внимание, что это графический скрипт, то есть он будет работать только с окнами в графическом интерфейсе и не будет работать, если вы попытаетесь запустить что-то в tty. Кроме того, насколько я понимаю, Альфред делает то же самое. Вы можете создать ярлык на рабочем столе или ярлык для запуска, как описано здесь и здесь .
Сценарий:
Примечания: в предыдущей версии скрипт использовал echo $? Для проверки успешного завершения предыдущих выражений. Согласно предложению Муру (из редактирования), я изменил код на несколько более компактную версию, поэтому я предлагаю вам взглянуть на предыдущую версию и текущую.
Кроме того, ранее
wmctrl -a $MYPROG
не работали с тестированием Google-Chrome или Chromium-браузера; по какой-то глупой причине некоторые программы имеют свойство WM_CLASS заглавной буквы окна, в то время как перечисленная программа написанаdpkg --get-selections
строчными буквами (вы просто будете читатьman wmctrl
и запускатьwmctrl -lx
, вы будете знать). Добавление -ax должно позаботиться об этом. Скрипт вызывает уже открытое окно хрома, как и должноДругое дело - wmctlr несколько странно, потому что иногда ему нужна задержка (у меня был опыт работы с ним в другом скрипте), поэтому мне пришлось добавить
sleep 1
строку. Раньше с Firefox он включался и выключался, но теперь работает плавно.Сценарий в действии
В приведенной ниже анимации вы можете видеть, что при первом запуске скрипта открывается один экземпляр firefox, и скрипт переключает фокус на это окно; во втором тесте я открываю новый экземпляр google-chrome, который ранее не был открыт. (Примечание: если вы не любите рабочий стол, кстати, это openbox с док-станцией cairo)
Согласно предложению в комментариях, встроенная анимация удалена, размещена только ссылка. Сообщите, если он сломан, пожалуйста! http://i.stack.imgur.com/puuPZ.gif
Обновление, 7 апреля
Я несколько улучшил сценарий, чтобы все программы, перечисленные в выпадающем списке zenity, были введены. Теперь пользователю не нужно запоминать каждую программу, а можно просто прокрутить их список с помощью клавиш со стрелками или просто открыть раскрывающееся меню. Кроме того, эта улучшенная версия поднимает окна не по имени, а по идентификатору окна, что дает гораздо лучшую производительность. Обратите внимание, что способ, которым я просматриваю файлы .desktop, отчасти избыточен, с помощью команды cut дважды, но поскольку мой скрипт-фу пока не так хорош, это все, что я могу сделать. Предложения по улучшению приветствуются!
Бонус:
Я действительно нашел Альберта , который является версией Альфреда для Linux, но сам не пробовал. Стоит проверить, хотя. Однако, как уже заметил Джейкоб, он все еще глючит.
Есть приложение под названием Gnome-Do, которое графически похоже на Alfred, однако оно не обладает такой же функциональностью, как этот скрипт.
Дайте мне знать, если вам нравится этот сценарий, если что-то нужно исправить, и не забудьте высказать ответ, если вы найдете его полезным
источник
dpkg --get-selectons
. Запуск libreoffice writer, введя «writer», не сработает, но вы можете сделать символическую ссылку на него в папке ~ / bin, / bin или / usr / bin или использовать псевдоним в .bashrc или .profile.1. Даш Второй
Ниже приведен сценарий, который можно использовать в качестве альтернативы Dash, когда дело доходит до запуска приложений, как описано в вашем вопросе.
Он существует из окна с той же функциональностью, что и Dash; если ввести один или несколько символов приложения, приложение появится в списке. Нажмите, Enterчтобы запустить или поднять приложение, в зависимости от того, запущено оно или нет.
Вы можете вызвать его с помощью комбинации клавиш быстрого доступа или установить значок в панели запуска, чтобы использовать его аналогично Dash (см. Далее ниже) или обоим.
Сценарий
Как пользоваться
Скрипт должен быть
wmctrl
установлен:Потом:
dash_alternative.py
Добавьте его к комбинации клавиш быстрого доступа: Выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду:
объяснение
Когда скрипт запущен, в нем перечислены все приложения, представленные в
/usr/share/applications
. Он ищет.dektop
файлы, создавая список всех имен приложений (из первой строки «Name =») и команду для запуска приложения (из первой строки «Exec =»).Впоследствии создается список Zenity, представляющий все приложения в отсортированном виде.
Когда приложение выбрано, скрипт просматривает список запущенных процессов, если приложение запущено. Если это так, соответствующее окно поднимается. Если нет, новый экземпляр открывается.
Примечания
Чтобы запустить скрипт 12.04 (поскольку исходный вопрос был помечен,
12.04
просто измените shebang на#!/usr/bin/env python
и запустите его командойНасколько я тестировал, скрипт работает нормально. Команды и их (не) соответствующие имена процессов (например,
LibreOffice
<>soffice.bin
), разные типы окон (nautilus
имеет несколько разных типов окон, кроме «настоящих» окон), несколько пидов на приложение (Chromium
,Google-chrome
) могут вызывать исключения, которые я исправил в примерах над. Если у кого-то возникнут проблемы, пожалуйста, укажите это.2. Дополнительно: установка его в качестве альтернативы «настоящему» Dash для запуска приложений
Сохраните значок ниже (щелкните правой кнопкой мыши> Safe as) как
dash_alternative.png
Скопируйте приведенный ниже код в пустой файл и сохраните его
~/.local/share/applications
какdash_thesecond.desktop
. Установите правильные пути для/path/to/dash_alternative.py
(сценарий) и/path/to/dash_alternative.png
(значок)Перетащите
.desktop
файл на панель запуска:источник
.desktop
файлов:~/.local/share/applications
. Я думал, что ограничу поиск глобально установленными приложениями.Для модуля запуска (вертикальная панель в левой части экрана) это уже поведение по умолчанию, так как это интерфейс переключения задач.
Для тире (большой бит, который открывается, когда вы щелкаете по логотипу Ubuntu), нет способа изменить поведение таким образом без предположительно существенной модификации самого исходного кода.
Однако некоторые приложения уже могут это делать, поскольку они предназначены для такого поведения. Все приложения, однако, не должны и не должны быть реализованы таким образом.
Однако, как еще одна функция, если вы откроете окно с Super+ Wи начнете вводить имя приложения, будут показаны только окна для этого приложения.
источник