Apenas um composto pode ser bonito, nunca algo desprovido de partes; e apenas um todo;
as várias partes terão beleza, não em si mesmas,
mas apenas como trabalhando juntos para dar um total de um total.
No entanto, a beleza em um agregado exige beleza em detalhes:
Não pode ser construído a partir da feiúra; Sua lei deve ser executada o tempo todo.
- Plotinus, primeiro Ennead
Você já usou a "Paleta de comando" do Sublime Text ou Atom? É uma lista de tudo o que esses editores podem fazer que abre na imprensa de uma tecla e encontra a ação que você está procurando apenas digitando algumas letras. É energia bruta na ponta dos dedos.
O Plotinus traz esse poder para todos os aplicativos do seu sistema (ou seja, para aqueles que usam o kit de ferramentas GTK+ 3). Ele extrai automaticamente todos os comandos disponíveis, introspectando um aplicativo em execução, adaptando -se instantaneamente às alterações da interface do usuário e mostrando apenas ações relevantes. Usar Plotinus não requer modificações no próprio aplicativo!
Basta pressionar Ctrl+Shift+P (configurável) e você está no negócio - é tão natural que logo você se perguntará como você já viveu sem ele.
Para construir o Plotinus a partir da fonte, você precisa de arquivos de desenvolvimento Git, Cmake, Vala e GTK+ 3. Tudo isso é facilmente obtido na maioria das distribuições modernas do 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
Devido à complexidade e falta de jeito em torno das variáveis de ambiente Linux, o Plotinus não está atualmente ativado automaticamente. A maneira mais fácil de ativar o Plotinus para todas as aplicações no sistema é adicionar a linha
GTK3_MODULES=[libpath]
para /etc/environment , onde [libpath] é o caminho completo e absoluto de libplotinus.so , que pode ser encontrado usando o comando
whereis -b libplotinus
Como alternativa, você pode tentar plotinus com aplicativos individuais executando -os com
GTK3_MODULES=[libpath] application
de um terminal.
O Plotinus pode ser configurado globalmente e por aplicativo. As configurações de aplicativos têm precedência sobre as configurações globais. Nos comandos abaixo, [application] pode ser
default , nesse caso, a configuração é aplicada globalmente, ou/usr/bin/gedit -> usr.bin.gedit ). Observe que o caminho relevante é o caminho do processo executável , que nem sempre é idêntico ao executável que está sendo lançado. Por exemplo, todos os aplicativos JavaScript GNOME executam o processo /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] devem ser uma matriz de strings no formato esperado por gtk_accelerator_parse , por exemplo ["<Primary><Shift>P", "<Primary>P"] . Cada atalho na matriz abre a paleta de comando.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ dbus-enabled [true/false]
Consulte a seção a seguir para obter detalhes.
O Plotinus fornece uma API D-BUS simples, mas completa, para desenvolvedores que desejam usar sua funcionalidade de seu próprio software. A API consiste em dois métodos, expostos no ônibus da sessão em com.worldwidemann.plotinus :
GetCommands(window_path) -> (bus_name, command_paths)
Pega o caminho do objeto de uma janela GTK+ (que pode ser obtida a partir de uma janela murmora via meta_window_get_gtk_window_object_path ) e retorna uma matriz de caminhos de objeto que referenciam comandos extraídos dessa janela, bem como o nome do barramento no qual são registrados.
O mecanismo por trás desse método é um pouco semelhante ao AppMenu Registrar do Ubuntu, mas mais leve e compatível com Wayland. O registro da janela deve ser ativado antes de usar esse método.
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
Pega uma variedade de comandos (estruturas do formulário (path, label, accelerators) ) e abre uma janela da paleta de comando exibindo esses comandos. O caminho do objeto retornado faz referência a um objeto de controle registrado no nome do barramento retornado que fornece sinais na interação do usuário com a janela.
As chamadas para esses métodos são processadas pelo serviço Plotinus D-Bus, que pode ser iniciado com
plotinus
Os exemplos a seguir demonstram como usar a API D-BUS da Python. Eles exigem que o Pydbus seja instalado e o serviço Plotinus D-Bus esteja em execução.
#!/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 executar este exemplo, ative o registro da janela com
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
Em seguida, execute um aplicativo (por exemplo, GEDIT) com o Plotinus ativado. Agora execute o script com o caminho do objeto da janela como um argumento, ou seja,
./application_remote_control.py /org/gnome/gedit/window/1
Com base neste plug -in do Argos, usa a paleta de comando da Plotinus para exibir uma lista de aplicativos disponíveis no 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 ()A documentação nos módulos GTK+ é essencialmente inexistente. Sem GTKParasite e Gnome-Globalmenu para aprender, teria sido muito mais difícil tirar esse projeto do chão.
Os módulos CMake são copiados literalmente do repositório do Pantheon-Installer da Elementary.
O VALA ainda é a melhor coisa que já aconteceu ao desenvolvimento da área de trabalho do Linux.
Os colaboradores são sempre bem -vindos. No entanto, registre um problema descrevendo o que você pretende adicionar antes de abrir uma solicitação de tração, especialmente para novos recursos! Tenho uma visão clara do que quero (e não quero) Plotinus, portanto, discutir possíveis adições pode ajudá -lo a evitar duplicação e trabalho desperdiçado.
Ao contribuir, você concorda em liberar suas alterações sob a mesma licença do restante do projeto (veja abaixo).
Copyright © 2016-2017 Philipp Emanuel Weidmann ([email protected])
Lançado sob os termos da licença pública geral da GNU, versão 3