Solo un compuesto puede ser hermoso, nunca algo desprovisto de piezas; y solo un todo;
Las varias partes tendrán belleza, no en sí mismas,
pero solo como trabajando juntos para dar un total atractivo.
Sin embargo, la belleza en un agregado exige belleza en detalles:
No se puede construir por fealdad; Su ley debe correr en todo momento.
- Plotino, First Ennead
¿Has utilizado la "paleta de comandos" de Text de Sublime o Atom? Es una lista de todo lo que esos editores pueden hacer que se abre al presionar una tecla y encuentra la acción que está buscando escribiendo algunas letras. Es una potencia cruda a tu alcance.
Plotinus aporta esa potencia a cada aplicación en su sistema (es decir, a aquellos que usan el kit de herramientas GTK+ 3). Extrae automáticamente todos los comandos disponibles introspectando una aplicación en ejecución, adaptando instantáneamente a los cambios de la interfaz de usuario y mostrando solo acciones relevantes. ¡El uso de Plotinus no requiere modificaciones en la aplicación en sí!
Simplemente presione Ctrl+Shift+P (configurable) y está en el negocio; se siente tan natural que pronto se preguntará cómo vivió sin él.
Para construir Plotinus a partir de la fuente, necesita GIT, CMake, Vala y los archivos de desarrollo GTK+ 3. Todos estos se obtienen fácilmente en la mayoría de las distribuciones modernas de Linux:
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
Debido a la complejidad y la torpeza que rodea las variables de entorno de Linux, Plotinus actualmente no está habilitado automáticamente. La forma más fácil de habilitar Plotinus para todas las aplicaciones en el sistema es agregar la línea.
GTK3_MODULES=[libpath]
a /etc/environment , donde [libpath] es la ruta completa y absoluta de libplotinus.so , que se puede encontrar utilizando el comando
whereis -b libplotinus
Alternativamente, puede probar Plotinus con aplicaciones individuales ejecutándolas con
GTK3_MODULES=[libpath] application
de una terminal.
Plotinus se puede configurar a nivel mundial y por aplicación. La configuración de la aplicación tiene prioridad sobre la configuración global. En los comandos a continuación, [application] puede ser
default , en cuyo caso la configuración se aplica a nivel mundial, o/usr/bin/gedit Ej usr.bin.gedit Tenga en cuenta que la ruta relevante es la ruta del ejecutable del proceso , que no siempre es idéntico al ejecutable que se está lanzando. Por ejemplo, todas las aplicaciones GNOME JavaScript ejecutan el proceso /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] debe ser una matriz de cadenas en el formato esperado por gtk_accelerator_parse , por ejemplo ["<Primary><Shift>P", "<Primary>P"] . Cada atajo en la matriz abre la paleta de comando.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ dbus-enabled [true/false]
Consulte la siguiente sección para más detalles.
Plotinus proporciona una API D-BUS simple pero completa para los desarrolladores que desean usar su funcionalidad a partir de su propio software. La API consta de dos métodos, expuestos en el bus de sesión en com.worldwidemann.plotinus :
GetCommands(window_path) -> (bus_name, command_paths)
Toma la ruta del objeto de una ventana GTK+ (que se puede obtener desde una ventana de Mutter a través de meta_window_get_gtk_window_object_path ) y devuelve una matriz de rutas de objetos que hace referencia a los comandos extraídos de esa ventana, así como el nombre del bus en el que están registrados.
El mecanismo detrás de este método es algo similar al registrador Appmenu de Ubuntu, pero más liviano y compatible con Wayland. El registro de la ventana debe habilitarse antes de usar este método.
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
Toma una matriz de comandos (estructuras de la forma (path, label, accelerators) ) y abre una ventana de paleta de comandos que muestra esos comandos. La ruta del objeto devuelto hace referencia a un objeto de control registrado en el nombre del bus devuelto que proporciona señales en la interacción del usuario con la ventana.
Las llamadas a estos métodos son procesadas por el servicio Plotinus D-Bus, que se puede iniciar con
plotinus
Los siguientes ejemplos demuestran cómo usar la API D-BUS de Python. Requieren que se instale Pydbus y se ejecute el servicio Plotinus D-BUS.
#!/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 ()Antes de ejecutar este ejemplo, habilite el registro de la ventana con
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
Luego, ejecute una aplicación (por ejemplo, GEDIT) con Plotinus habilitado. Ahora ejecute el script con la ruta del objeto de la ventana como argumento, es decir
./application_remote_control.py /org/gnome/gedit/window/1
Basado en este complemento de Argos, utiliza la paleta de comandos de Plotinus para mostrar una lista de aplicaciones disponibles en el sistema.
#!/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 documentación en los módulos GTK+ es esencialmente inexistente. Sin GTKParasite y Gnome-Globalmenu para aprender, habría sido mucho más difícil despegar este proyecto.
Los módulos CMake se copian textualmente del repositorio de Pantheon-Installer de Elementary.
Vala sigue siendo la mejor cosa que haya pasado con el desarrollo de escritorio de Linux.
Los contribuyentes siempre son bienvenidos. Sin embargo, presente un problema que describe lo que pretende agregar antes de abrir una solicitud de extracción, ¡ especialmente para nuevas funciones! Tengo una visión clara de lo que quiero (y no quiero) Plotinus, por lo que discutir posibles adiciones podría ayudarlo a evitar la duplicación y el trabajo desperdiciado.
Al contribuir, usted acepta publicar sus cambios bajo la misma licencia que el resto del proyecto (ver más abajo).
Copyright © 2016-2017 Philipp Emanuel Weidmann ([email protected])
Lanzado bajo los términos de la Licencia Pública General de GNU, Versión 3