Chciałbym naśladować użycie Alfreda w systemie Mac OS X, gdzie jeśli spróbujesz otworzyć aplikację po jej wyszukaniu, otworzy się nowe okno tylko wtedy, gdy program nie jest jeszcze uruchomiony, w przeciwnym razie ustawi się fokus na aktualnie działająca instancja tej aplikacji. Czy w ogóle można zmienić domyślne zachowanie programu uruchamiającego, aby to sprawdzić przed otwarciem nowego okna?
16
.desktop
plikach. Jeśli jednak zastąpisz polecenie w.desktop
pliku, kliknięcie prawym przyciskiem myszy Otwórz z opcją jest zepsute.Odpowiedzi:
Aktualizacja 7 kwietnia: Dodano inną wersję i znaleziono Alberta, zobacz aktualizację i Bonus poniżej !!!
Dotyczące funkcjonalności deski rozdzielczej : Zapytałeś: „ Czy mimo to można zmienić domyślne zachowanie programu uruchamiającego, aby to sprawdzić przed otwarciem nowego okna ”? Podstawowa odpowiedź brzmi: nie, jako zwykły użytkownik nie masz możliwości dodania tego zachowania do myślnika. Jeśli jednak byłby programista zakresu jedności, który byłby skłonny to zaimplementować, możesz do nich podejść lub sam go opracować, jeśli masz determinację i chcesz się uczyć. Moje umiejętności kodowania są bardzo skromne, dlatego używam skryptu powłoki i dostępnego graficznego interfejsu dla skryptów jako obejścia.
Powiązana informacja
Oryginalny post:
Napisałem skrypt, który używa dialogu zenity i wmctrl, aby osiągnąć to, o co prosiłeś. Zauważ, że jest to skrypt graficzny, co oznacza, że będzie działał tylko z oknami, w GUI i nie będzie działać, jeśli spróbujesz uruchomić coś w tty. Poza tym z tego, co rozumiem, Alfred robi dokładnie to samo. Możesz utworzyć do niego skrót na pulpicie lub skrót do programu uruchamiającego, jak opisano tutaj i tutaj .
Scenariusz:
Dodatkowe uwagi: w poprzedniej wersji skrypt używał echa $ ?, aby sprawdzić, czy poprzednie wyrażenia zakończyły się powodzeniem. Zgodnie z sugestią Muru (z edycji) zmieniłem kod na nieco bardziej kompaktową, więc proponuję spojrzeć na poprzednią i aktualną.
Ponadto wcześniej
wmctrl -a $MYPROG
nie działał z testowaniem google-chrome lub chrome-browser; z jakiegoś głupiego powodu niektóre programy mają właściwość WM_CLASS okna pisanego wielkimi literami, podczas gdy program wymieniony przezdpkg --get-selections
ma małe litery (po prostu czytajman wmctrl
i uruchamiajwmctrl -lx
, będziesz wiedział). Dodanie tego -ax powinno o to zadbać. Skrypt wyświetla już otwarte okno chromu tak, jak powinnoKolejna rzecz - wmctlr jest nieco dziwny, ponieważ czasami potrzebuje opóźnienia (miał doświadczenie z innym skryptem), więc musiałem dodać
sleep 1
linię. Wcześniej byłby to rodzaj włączania i wyłączania Firefoksa, ale teraz działa płynnie.Skrypt w akcji
W poniższej animacji widać, że przy pierwszym uruchomieniu skryptu jest jedna instancja firefox, a skrypt przełącza fokus na to okno; w drugim teście otwieram nowe wystąpienie google-chrome, które nie było wcześniej otwarte. (Nota boczna: Nawiasem mówiąc, jeśli interesujesz się pulpitem, to jest to openbox z doku Cairo)
Zgodnie z sugestią w komentarzach usunięto osadzoną animację, opublikowano tylko link. Zgłoś, jeśli jest zepsuty, proszę! http://i.stack.imgur.com/puuPZ.gif
Aktualizacja, 7 kwietnia
Ulepszyłem nieco skrypt, aby wszystkie programy wymienione w rozwijanym polu wprowadzania zenity. Teraz użytkownik nie musi zapamiętywać każdego programu, ale może po prostu przewijać listę za pomocą klawiszy strzałek lub po prostu otworzyć menu rozwijane. Ponadto ta ulepszona wersja podnosi okna nie według nazwy, ale według identyfikatora okna, co zapewnia znacznie lepszą wydajność. Zauważ, że sposób, w jaki przechodzę przez pliki .desktop jest trochę zbędny, używając dwukrotnie polecenia cut, ale ponieważ mój skrypt-fu nie jest do tej pory tak dobry, to wszystko, co mogę zrobić. Sugestie dotyczące ulepszeń są mile widziane!
Premia:
Znalazłem Alberta , który jest wersją Alfreda dla Linuksa, ale sam tego nie próbowałem. Warto jednak to sprawdzić. Jednak, jak już zauważył Jacob, nadal jest wadliwy.
Istnieje aplikacja o nazwie Gnome-Do, która graficznie wygląda podobnie do Alfreda, jednak nie ma takiej samej funkcjonalności jak ten skrypt.
Daj mi znać, jeśli podoba Ci się ten skrypt, jeśli coś wymaga naprawy, i nie zapomnij głosować odpowiedzi, jeśli okażą się przydatne
źródło
dpkg --get-selectons
. Uruchamianie programu libreoffice writer przez wpisanie „writer” nie zadziała, ale możesz utworzyć dowiązanie symboliczne do niego w folderze ~ / bin, / bin lub / usr / bin lub użyć aliasu w .bashrc lub .profile.1. Dash the Second
Poniżej skrypt, który może być używany jako alternatywa dla Dasha, jeśli chodzi o uruchamianie aplikacji zgodnie z opisem w pytaniu.
Istnieje okno o takiej samej funkcjonalności jak Dash; jeśli wpiszesz co najmniej jeden znak aplikacji, aplikacja pojawi się na liście. Naciśnij, Enteraby uruchomić lub podnieść aplikację, w zależności od tego, czy jest już uruchomiona, czy nie.
Możesz zadzwonić z kombinacji klawiszy skrótu lub ustawić ikonę w programie uruchamiającym, aby używać jej podobnie do Dasha (patrz poniżej) lub obu.
Scenariusz
Jak używać
Skrypt wymaga
wmctrl
zainstalowania:Następnie:
dash_alternative.py
Dodaj go do kombinacji klawiszy skrótu: Wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:
Wyjaśnienie
Po uruchomieniu skryptu wyświetla wszystkie aplikacje reprezentowane w
/usr/share/applications
. Przeszukuje.dektop
pliki, tworząc listę wszystkich nazw aplikacji (z pierwszego wiersza „Name =”) oraz polecenie uruchomienia aplikacji (z pierwszego wiersza „Exec =”).Następnie tworzona jest lista Zenity, przedstawiająca wszystkie aplikacje w uporządkowany sposób.
Po wybraniu aplikacji skrypt sprawdza listę uruchomionych procesów, jeśli aplikacja jest uruchomiona. Jeśli tak, odpowiednie okno zostanie podniesione. Jeśli nie, zostanie otwarta nowa instancja.
Notatki
Aby uruchomić skrypt 12.04 (ponieważ pierwotne pytanie zostało oznaczone,
12.04
wystarczy zmienić shebang na#!/usr/bin/env python
i uruchomić je za pomocą poleceniaO ile go przetestowałem, skrypt działa dobrze. Polecenia i ich (nie-) odpowiadające nazwy procesów (np.
LibreOffice
<>soffice.bin
), Różne typy okien (nautilus
ma kilka różnych typów okien, oprócz „prawdziwych” okien), wiele pidów na aplikację (Chromium
,Google-chrome
) może powodować wyjątki, które naprawiłem w przykładach powyżej. Jeśli ktoś napotka problem, proszę o tym wspomnieć.2. Dodatkowe: ustawienie go jako alternatywy dla „prawdziwego” Dasha do uruchamiania aplikacji
Zapisz poniższą ikonę (kliknij prawym przyciskiem myszy> bezpieczne jako) jako
dash_alternative.png
Skopiuj poniższy kod do pustego pliku i zapisz go
~/.local/share/applications
jakodash_thesecond.desktop
. Ustaw poprawne ścieżki dla/path/to/dash_alternative.py
(skryptu) i/path/to/dash_alternative.png
(ikony)Przeciągnij
.desktop
plik do programu uruchamiającego:źródło
.desktop
plików:~/.local/share/applications
. Myślałem, że ograniczę wyszukiwanie do globalnie zainstalowanych aplikacji.W przypadku programu uruchamiającego (pionowy panel po lewej stronie ekranu) jest to już zachowanie domyślne, ponieważ jest to interfejs przełączania zadań.
W przypadku myślnika (duży bit, który otwiera się po kliknięciu logo Ubuntu), nie ma sposobu, aby zmienić zachowanie w ten sposób, bez przypuszczalnie znaczącej modyfikacji samego kodu źródłowego.
Niektóre aplikacje mogą już to robić, ponieważ zostały zaprojektowane w taki sposób. Jednak wszystkie aplikacje nie są i nie muszą być implementowane w taki sposób.
Jako kolejna funkcja, jeśli otworzysz rozkładówkę okna za pomocą Super+ Wi zaczniesz wpisywać nazwę aplikacji, okna dla tej aplikacji będą jedynymi pokazanymi.
źródło