Ich möchte die Verwendung von Alfred unter Mac OS X nachahmen. Wenn Sie versuchen, eine App nach der Suche zu öffnen, wird nur dann ein neues Fenster geöffnet, wenn das Programm noch nicht ausgeführt wird derzeit laufende Instanz dieser Anwendung. Gibt es eine Möglichkeit, das Standardverhalten des Launchers zu ändern, um dies zu überprüfen, bevor ein neues Fenster geöffnet wird?
16
.desktop
Dateien per Skript ersetzen . Wenn Sie jedoch den Befehl in der.desktop
Datei ersetzen , ist die Option zum Öffnen mit der rechten Maustaste ungültig.Antworten:
Update 7. April: Eine andere Version hinzugefügt und Albert gefunden, siehe Update und Bonus unten !!!
Bezüglich der Dash-Funktionalität : Sie haben gefragt, ob Sie das Standardverhalten des Launchers ändern möchten, um dies zu überprüfen, bevor Sie ein neues Fenster öffnen . Die grundlegende Antwort lautet: Nein, als normaler Benutzer haben Sie keine Möglichkeit, dieses Verhalten zu Dash hinzuzufügen. Wenn es jedoch einen Unity-Scope-Entwickler geben würde, der bereit wäre, dies umzusetzen, könnten Sie sich an ihn wenden oder selbst einen entwickeln, wenn Sie entschlossen und lernbereit sind. Meine Programmierkenntnisse sind sehr bescheiden, daher verwende ich Shell-Skripte und das verfügbare grafische Front-End für die Skripte als Workaround.
Verwandte Informationen
Ursprünglicher Beitrag:
Ich habe ein Skript geschrieben, das Zenity-Dialog und wmctrl verwendet, um das zu erreichen, wonach Sie gefragt haben. Beachten Sie, dass dies ein grafisches Skript ist, das heißt, es funktioniert nur mit Windows in der GUI und nicht, wenn Sie versuchen, etwas in tty zu starten. Soweit ich weiß, macht Alfred genau das Gleiche. Sie können eine Desktop-Verknüpfung oder eine Starter-Verknüpfung erstellen, wie hier und hier beschrieben .
Das Drehbuch:
Nebenbemerkungen: In der vorherigen Version verwendete das Skript echo $?, Um zu testen, ob frühere Ausdrücke erfolgreich beendet wurden. Gemäß Murus Vorschlag (aus der Bearbeitung) habe ich den Code in eine etwas kompaktere Version geändert, daher schlage ich vor, dass Sie sich die vorherige Version und die aktuelle Version ansehen.
Außerdem hat
wmctrl -a $MYPROG
das Testen von Google-Chrome oder Chrom-Browser bisher nicht funktioniert. Aus irgendeinem dummen Grund haben einige Programme die WM_CLASS-Eigenschaft des Fensters in Großbuchstaben geschrieben, während das von aufgeführte Programm indpkg --get-selections
Kleinbuchstaben geschrieben ist (Sie müssen nur lesenman wmctrl
und ausführenwmctrl -lx
, Sie werden es wissen). Das Hinzufügen von -ax sollte sich darum kümmern. Das Skript ruft das bereits geöffnete Chromfenster wie gewünscht aufEine andere Sache - wmctlr ist insofern etwas seltsam, als es manchmal eine Verzögerung braucht (ich hatte Erfahrung damit in einem anderen Skript), also musste ich
sleep 1
Zeile hinzufügen . Früher war es mit Firefox ein und aus, aber jetzt funktioniert es schwimmend.Das Skript in Aktion
In der folgenden Animation sehen Sie, dass beim ersten Ausführen des Skripts eine Instanz von Firefox geöffnet ist und der Fokus des Skripts auf dieses Fenster wechselt. Beim zweiten Test öffne ich eine neue Instanz von Google-Chrome, die zuvor noch nicht geöffnet war. (Randnotiz: Wenn Sie über den Desktop neugierig sind, ist das übrigens Openbox mit Cairo Dock)
Per Vorschlag in den Kommentaren, eingebettete Animation entfernt, nur Link gepostet. Bitte melden, wenn es kaputt ist! http://i.stack.imgur.com/puuPZ.gif
Update, 7. April
Ich habe das Skript etwas verbessert, damit alle Programme im Dropdown-Eingabefeld von zenity aufgelistet werden. Jetzt muss sich der Benutzer nicht mehr jedes Programm merken, sondern kann mit den Pfeiltasten durch eine Liste blättern oder einfach das Dropdown-Menü öffnen. Diese verbesserte Version erhöht Fenster nicht nach Namen, sondern nach Fenster-ID, wodurch die Leistung erheblich verbessert wird. Beachten Sie, dass die Art und Weise, wie ich .desktop-Dateien durchsuche, redundant ist, wenn ich den Befehl cut zweimal verwende, aber da mein Skript-Fu bisher nicht so gut ist, ist dies alles, was ich tun kann. Verbesserungsvorschläge sind willkommen!
Bonus:
Ich habe tatsächlich Albert gefunden , die Linux-Version von Alfred, habe es aber selbst nicht ausprobiert. Ein Besuch lohnt sich jedoch. Wie Jacob jedoch bereits bemerkte, ist es immer noch fehlerhaft.
Es gibt eine App namens Gnome-Do, die Alfred grafisch ähnelt, jedoch nicht die gleiche Funktionalität wie dieses Skript hat.
Lassen Sie mich wissen, ob Ihnen dieses Skript gefällt, ob es Probleme gibt, die behoben werden müssen, und vergessen Sie nicht, die Antwort zu aktualisieren, wenn Sie sie nützlich finden
quelle
dpkg --get-selectons
. Das Starten von libreoffice writer durch Eingabe von "writer" funktioniert nicht, Sie können jedoch einen Symlink in Ihrem Ordner "~ / bin", "/ bin" oder "/ usr / bin" erstellen oder einen Alias in ".bashrc" oder ".profile" verwenden.1. Dash the Second
Unten ein Skript, das als Alternative zu Dash verwendet werden kann, wenn es darum geht, Anwendungen wie in Ihrer Frage beschrieben auszuführen.
Es besteht aus einem Fenster mit der gleichen Funktionalität wie Dash. Wenn Sie ein oder mehrere Zeichen der Anwendung eingeben, wird die Anwendung in der Liste angezeigt. Drücken Sie Enter, um die Anwendung zu starten oder zu starten, je nachdem, ob sie bereits ausgeführt wird oder nicht.
Sie können es über eine Tastenkombination aufrufen oder ein Symbol im Launcher festlegen, um es ähnlich wie Dash (siehe weiter unten) zu verwenden, oder beides.
Das Drehbuch
Wie benutzt man
Das Skript muss
wmctrl
installiert sein:Dann:
dash_alternative.py
Hinzufügen zu einer Tastenkombination: Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
Erläuterung
Wenn das Skript ausgeführt wird, werden alle in dargestellten Anwendungen aufgelistet
/usr/share/applications
. Es durchsucht die.dektop
Dateien und erstellt eine Liste aller Anwendungsnamen (ab der ersten Zeile "Name =") und den Befehl zum Ausführen der Anwendung (ab der ersten Zeile "Exec =").Anschließend wird eine Zenity-Liste erstellt, in der alle Anwendungen sortiert dargestellt werden.
Bei jeder Auswahl einer Anwendung wird das Skript in der Liste der ausgeführten Prozesse angezeigt, wenn die Anwendung ausgeführt wird. In diesem Fall wird das entsprechende Fenster geöffnet. Wenn nicht, wird eine neue Instanz geöffnet.
Anmerkungen
Um das Skript am 12.04 auszuführen (da die ursprüngliche Frage markiert wurde
12.04
, ändern Sie einfach den shebang in#!/usr/bin/env python
und führen Sie ihn mit dem Befehl ausSoweit ich es getestet habe, funktioniert das Skript einwandfrei. Befehle und ihre (nicht-) entsprechenden Prozessnamen (zB
LibreOffice
<>soffice.bin
), verschiedene Fenstertypen (nautilus
hat mehrere verschiedene Fenstertypen, außer "echten" Fenstern), mehrere Pids pro Anwendung (Chromium
,Google-chrome
) können Ausnahmen verursachen, die ich in den Beispielen behoben habe über. Wenn jemand auf ein Problem stößt, erwähnen Sie es bitte.2. Zusätzlich: Einstellung als Alternative zum "echten" Dash zum Ausführen von Anwendungen
Speichern Sie das Symbol unten (Rechtsklick> Sichern unter) als
dash_alternative.png
Kopieren Sie den folgenden Code in eine leere Datei und speichern Sie ihn
~/.local/share/applications
unterdash_thesecond.desktop
. Stellen Sie die richtigen Pfade für/path/to/dash_alternative.py
(das Skript) und/path/to/dash_alternative.png
(das Symbol) einZiehen Sie die
.desktop
Datei auf den Launcher:quelle
.desktop
Dateien:~/.local/share/applications
. Ich dachte, ich würde die Suche auf global installierte Anwendungen beschränken.Für den Launcher (das vertikale Bedienfeld auf der linken Seite des Bildschirms) ist dies bereits das Standardverhalten, da es sich um die Taskwechseloberfläche handelt.
Für den Bindestrich (das große Bit, das beim Klicken auf das Ubuntu-Logo geöffnet wird) gibt es keine Möglichkeit, das Verhalten auf diese Weise zu ändern, ohne den Quellcode selbst vermutlich erheblich zu ändern.
Einige Apps tun dies jedoch möglicherweise bereits, da sie so konzipiert sind, dass sie sich so verhalten. Allerdings sind und müssen nicht alle Apps so implementiert werden.
Wenn Sie jedoch das Fenster mit Super+ öffnen Wund einen Anwendungsnamen eingeben, werden nur die Fenster für diese Anwendung angezeigt.
quelle