Seul un composé peut être beau, jamais rien dépourvu de pièces; et seulement un tout;
Les plusieurs parties auront de la beauté, pas en elles-mêmes,
Mais seulement comme travaillant ensemble pour donner un total de tout au total.
Pourtant, la beauté dans un agrégat exige la beauté en détail:
il ne peut pas être construit par laideur; Sa loi doit être diffusée tout au long.
- Plotin, First ennead
Avez-vous utilisé la «palette de commande» de SUBLIME Text ou Atom? C'est une liste de tout ce que ces éditeurs peuvent faire qui s'ouvre à la presse d'une touche et trouve l'action que vous recherchez simplement en tapant quelques lettres. C'est de la puissance brute au bout des doigts.
Plotin apporte cette puissance à chaque application sur votre système (c'est-à-dire à ceux qui utilisent la boîte à outils GTK + 3). Il extrait automatiquement toutes les commandes disponibles en introspelant une application en cours d'exécution, en s'adaptant instantanément aux modifications de l'interface utilisateur et en affichant uniquement les actions pertinentes. L'utilisation de Plottinus ne nécessite aucune modification de l'application elle-même!
Appuyez simplement sur Ctrl + Shift + P (configurable) et vous êtes en affaires - il vous semble si naturel que vous vous demanderez bientôt comment vous avez vécu sans lui.
Pour construire Plotin à partir de la source, vous avez besoin de fichiers de développement GIT, CMake, Vala et GTK + 3. Tous ces éléments sont facilement obtenus sur la plupart des distributions Linux modernes:
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
En raison de la complexité et de la maladresse entourant les variables d'environnement Linux, Plotin n'est actuellement pas activé automatiquement. Le moyen le plus simple d'activer Plotin pour toutes les applications du système est d'ajouter la ligne
GTK3_MODULES=[libpath]
à /etc/environment , où [libpath] est le chemin complet et absolu de libplotinus.so , qui peut être trouvé en utilisant la commande
whereis -b libplotinus
Alternativement, vous pouvez essayer Plotinus avec des applications individuelles en les exécutant avec
GTK3_MODULES=[libpath] application
à partir d'un terminal.
Plottinus peut être configuré à la fois à l'échelle mondiale et par application. Les paramètres d'application ont priorité sur les paramètres globaux. Dans les commandes ci-dessous, [application] peut être soit
default , auquel cas le paramètre est appliqué à l'échelle mondiale, ou/usr/bin/gedit -> usr.bin.gedit ). Notez que le chemin pertinent est le chemin de l' exécutable de processus , qui n'est pas toujours identique à l'exécutable lancé. Par exemple, toutes les applications GNOME JavaScript exécutent le processus /usr/bin/gjs .
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ enabled [true/false]
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ hotkeys '[keys]'
[keys] Doit être un tableau de chaînes dans le format attendu par gtk_accelerator_parse , par exemple ["<Primary><Shift>P", "<Primary>P"] . Chaque raccourci du tableau ouvre la palette de commande.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ dbus-enabled [true/false]
Voir la section suivante pour plus de détails.
Plottinus fournit une API D-BUS simple mais complète pour les développeurs qui souhaitent utiliser ses fonctionnalités à partir de leur propre logiciel. L'API se compose de deux méthodes, exposées dans le bus de session à com.worldwidemann.plotinus :
GetCommands(window_path) -> (bus_name, command_paths)
Prend le chemin d'objet d'une fenêtre GTK + (qui peut être obtenu par exemple à partir d'une fenêtre de murmure via meta_window_get_gtk_window_object_path ) et renvoie un tableau de chemins d'objet faisant référence aux commandes extraites de cette fenêtre, ainsi que le nom du bus sur lequel ils sont enregistrés.
Le mécanisme derrière cette méthode est quelque peu similaire au registraire AppMenu d'Ubuntu, mais plus léger et compatible avec Wayland. L'enregistrement des fenêtres doit être activé avant d'utiliser cette méthode.
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
Prend un tableau de commandes (structures de la forme (path, label, accelerators) ) et ouvre une fenêtre de palette de commandes affichant ces commandes. Le chemin d'objet retourné fait référence à un objet de contrôle enregistré sur le nom de bus retourné qui fournit des signaux sur l'interaction utilisateur avec la fenêtre.
Les appels à ces méthodes sont traités par le service D-BUS Plottinus, qui peut être démarré avec
plotinus
Les exemples suivants montrent comment utiliser l'API D-BUS de Python. Ils nécessitent que PyDBUS soit installé et le service D-BUS Plotinus est en cours d'exécution.
#!/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 ()Avant d'exécuter cet exemple, activez l'enregistrement des fenêtres avec
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
Ensuite, exécutez une application (par exemple GEDIT) avec le tracé activé. Maintenant, exécutez le script avec le chemin d'objet de fenêtre comme argument, c'est-à-dire
./application_remote_control.py /org/gnome/gedit/window/1
Sur la base de ce plugin Argos, utilise la palette de commandes de Plottinus pour afficher une liste d'applications disponibles sur le système.
#!/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 ()La documentation sur les modules GTK + est essentiellement non existante. Sans gtkparasite et gnome-globalmenu pour apprendre, il aurait été beaucoup plus difficile de faire décoller ce projet.
Les modules CMake sont copiés textuellement du référentiel de panthéon-installer de l'élémentaire.
Vala est toujours la plus grande chose jamais arrivée au développement de Linux Desktop.
Les contributeurs sont toujours les bienvenus. Cependant, veuillez déposer un problème décrivant ce que vous avez l'intention d'ajouter avant d'ouvrir une demande de traction, en particulier pour les nouvelles fonctionnalités! J'ai une vision claire de ce que je veux (et je ne veux pas) du Plotin, donc discuter des ajouts potentiels pourrait vous aider à éviter la duplication et le travail gaspillé.
En contribuant, vous acceptez de libérer vos modifications sous la même licence que le reste du projet (voir ci-dessous).
Copyright © 2016-2017 Philipp Emanuel Weidmann ([email protected])
Selon les termes de la licence publique générale GNU, version 3