Nur eine Verbindung kann schön sein, niemals etwas ohne Teile; und nur ein Ganzes;
Die verschiedenen Teile werden Schönheit haben, nicht an sich.
aber nur als zusammenarbeiten, um eine hübsche Gesamtzahl zu verleihen.
Schönheit in einem Gesamtbedarf erfordert Schönheit im Detail:
Es kann nicht aus Hässlichkeit konstruiert werden; Sein Gesetz muss durchgehend laufen.
- Plotinus, erster Ennead
Haben Sie "Befehlspalette" von Sublime Text oder Atom verwendet? Es handelt sich um eine Liste von allem, was diese Redakteure tun können, die sich im Druck einer Taste öffnen, und findet die Aktion, nach der Sie nur suchen, indem Sie ein paar Buchstaben eingeben. Es ist rohe Kraft an Ihren Fingerspitzen.
Plotinus bringt diese Leistung für jede Anwendung in Ihrem System (dh an diejenigen, die das GTK+ 3 -Toolkit verwenden). Es extrahiert automatisch alle verfügbaren Befehle, indem sie eine laufende Anwendung nachdrückt, sofort an UI -Änderungen anpasst und nur relevante Aktionen angezeigt wird. Die Verwendung von Plotinus erfordert keine Änderungen an der Anwendung selbst!
Drücken Sie einfach Strg+Shift+P (konfigurierbar) und Sie sind im Geschäft - es fühlt sich so natürlich an, dass Sie sich bald fragen, wie Sie jemals ohne sie gelebt haben.
Um Plotin aus der Quelle zu erstellen, benötigen Sie GIT-, CMAKE-, VALA- und GTK+ 3 -Entwicklungsdateien. Alle diese sind bei den meisten modernen Linux -Verteilungen leicht zu erhalten:
sudo dnf install git cmake vala gtk3-devel
sudo apt-get install git cmake valac libgtk-3-dev
git clone https://github.com/p-e-w/plotinus.git
cd plotinus
mkdir build
cd build
cmake ..
make
sudo make install
Aufgrund der Komplexität und Ungeschicklichkeit, die Variablen für die Linux -Umgebungsvariablen umgibt, ist Plotin derzeit nicht automatisch aktiviert. Der einfachste Weg, Plotin für alle Anwendungen auf dem System zu ermöglichen, besteht darin, die Linie hinzuzufügen
GTK3_MODULES=[libpath]
zu /etc/environment , wo [libpath] der vollständige, absolute Weg von libplotinus.so ist, der mit dem Befehl gefunden werden kann
whereis -b libplotinus
Alternativ können Sie Plotinus mit individuellen Anwendungen ausprobieren, indem Sie sie mit dem ausführen
GTK3_MODULES=[libpath] application
von einem Terminal.
Plotinus kann sowohl global als auch pro Anwendung konfiguriert werden. Anwendungseinstellungen haben Vorrang vor globalen Einstellungen. In den folgenden Befehlen kann [application] entweder sein
default , in diesem Fall wird die Einstellung weltweit angewendet oder/usr/bin/gedit -> usr.bin.gedit ). Beachten Sie, dass der relevante Pfad der Pfad der ausführbaren Prozesse ist, die nicht immer identisch mit der ausführbaren Datei ist. Beispielsweise führen alle GNOME JavaScript -Anwendungen den Prozess /usr/bin/gjs aus.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ enabled [true/false]
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ hotkeys '[keys]'
[keys] muss eine Reihe von Zeichenfolgen im Format sein, das von gtk_accelerator_parse , z. ["<Primary><Shift>P", "<Primary>P"] erwartet wird. Jede Abkürzung im Array öffnet die Befehlspalette.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ dbus-enabled [true/false]
Weitere Informationen finden Sie im folgenden Abschnitt.
Plotinus bietet Entwicklern eine einfache, aber vollständige D-Bus-API, die ihre Funktionalität von ihrer eigenen Software verwenden möchten. Die API besteht aus zwei Methoden, die im Sitzungsbus von com.worldwidemann.plotinus ausgesetzt sind:
GetCommands(window_path) -> (bus_name, command_paths)
Nimmt den Objektpfad eines GTK+ -Fofens (das z. B. aus einem Murmelfenster über meta_window_get_gtk_window_object_path erhalten werden kann) und gibt ein Array von Objektpfaden zurück, die Befehle verweisen, die aus diesem Fenster extrahiert werden, sowie der Name des Busses, auf dem sie registriert sind.
Der Mechanismus hinter dieser Methode ähnelt dem AppMenu -Registrar von Ubuntu, aber leichter und kompatibler mit Wayland. Die Fensterregistrierung muss aktiviert sein, bevor diese Methode verwendet wird.
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
Nimmt eine Reihe von Befehlen (Strukturen des Formulars (path, label, accelerators) ) und öffnet ein Befehlspalettenfenster, in dem diese Befehle angezeigt werden. Der zurückgegebene Objektpfad verweist auf ein im zurückgegebener Busnamen registriertes Steuerungsobjekt, das Signale für die Benutzerinteraktion mit dem Fenster enthält.
Aufrufe dieser Methoden werden vom Plotinus-D-Bus-Dienst verarbeitet, der mit gestartet werden kann
plotinus
Die folgenden Beispiele zeigen, wie die D-Bus-API von Python verwendet wird. Sie verlangen, dass Pydbus installiert und der Plotinus-D-Bus-Dienst ausgeführt wird.
#!/usr/bin/env python
import sys
from pydbus import SessionBus
bus = SessionBus ()
plotinus = bus . get ( "com.worldwidemann.plotinus" )
bus_name , command_paths = plotinus . GetCommands ( sys . argv [ 1 ])
commands = [ bus . get ( bus_name , command_path ) for command_path in command_paths ]
for i , command in enumerate ( commands ):
print ( "[%d] %s -> %s" % ( i , " -> " . join ( command . Path ), command . Label ))
index = raw_input ( "Number of command to execute: " )
if index :
commands [ int ( index )]. Execute ()Bevor Sie dieses Beispiel ausführen, aktivieren Sie die Fensterregistrierung mit
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
Führen Sie dann eine Anwendung (zB Gedit) mit aktiviertem Plotinus aus. Führen Sie nun das Skript mit dem Fensterobjektpfad als Argument aus, dh
./application_remote_control.py /org/gnome/gedit/window/1
Basierend auf diesem Argos -Plugin verwendet die Befehlspalette von Plotinus eine Liste der im System verfügbaren Anwendungen.
#!/usr/bin/env python
import os , re
from pydbus import SessionBus
from gi . repository import GLib , Gio
applications = {}
for app_info in Gio . AppInfo . get_all ():
categories = app_info . get_categories ()
if categories is None :
continue
# Remove "%U" and "%F" placeholders
command_line = re . sub ( "% \ w" , "" , app_info . get_commandline ()). strip ()
app = ( app_info . get_name (), command_line )
for category in categories . split ( ";" ):
if category not in [ "GNOME" , "GTK" , "" ]:
if category not in applications :
applications [ category ] = []
applications [ category ]. append ( app )
break
commands = []
command_lines = []
for category , apps in sorted ( applications . items ()):
for app in sorted ( apps ):
commands . append (([ category ], app [ 0 ], []))
command_lines . append ( app [ 1 ])
bus = SessionBus ()
plotinus = bus . get ( "com.worldwidemann.plotinus" )
bus_name , command_palette_path = plotinus . ShowCommandPalette ( commands )
command_palette = bus . get ( bus_name , command_palette_path )
loop = GLib . MainLoop ()
def command_executed ( index ):
os . system ( command_lines [ index ])
command_palette . CommandExecuted . connect ( command_executed )
def closed ():
# Wait for CommandExecuted signal
GLib . timeout_add ( 500 , loop . quit )
command_palette . Closed . connect ( closed )
loop . run ()Die Dokumentation zu GTK+ -Modulen ist im Wesentlichen nicht vorhanden. Ohne Gtkparasit und Gnome-Globalmenu wäre es viel schwieriger gewesen, dieses Projekt in Gang zu bringen.
Die CMAKE-Module werden wörtlich aus dem Pantheon-Installer-Repository von Elementary kopiert.
Vala ist immer noch das Beste, was die Linux -Desktop -Entwicklung jemals passieren kann.
Mitwirkende sind immer willkommen. Bitte stellen Sie jedoch ein Problem ein, in dem Sie beschreiben, was Sie hinzufügen möchten, bevor Sie eine Pull -Anfrage öffnen, insbesondere für neue Funktionen! Ich habe eine klare Vorstellung davon, was ich für Plotinus sein möchte (und nicht möchte). Daher kann es sein, dass Sie potenzielle Ergänzungen diskutieren können, um Doppelarbeit und Verschwendung zu vermeiden.
Durch den Beitrag erklären Sie sich damit einverstanden, Ihre Änderungen unter derselben Lizenz wie der Rest des Projekts zu veröffentlichen (siehe unten).
Copyright © 2016-2017 Philipp Emanuel Weidmann ([email protected])
Veröffentlicht unter den Bestimmungen der GNU General Public Lizenz, Version 3