Только соединение может быть красивым, никогда что -то лишено из частей; и только целое;
Несколько частей будут иметь красоту, а не сами по себе,
но только как работая вместе, чтобы дать все возможное.
Тем не менее, красота в совокупном требует красоты в деталях:
Это не может быть построено из уродства; Его закон должен работать повсюду.
- Плотин, первая эннида
Вы использовали «Командную палитру» Sublime Text или Atom? Это список всего, что эти редакторы могут сделать, открывается в прессе клавиши и находит действие, которое вы ищете, просто набрав несколько букв. Это сырая сила у вас кончиков пальцев.
Plotinus привносит это питание для каждого приложения в вашей системе (то есть к тем, которые используют инструментарий GTK+ 3). Он автоматически извлекает все доступные команды, индивидуализируя запущенное приложение, мгновенно адаптируясь к изменениям пользовательского интерфейса и демонстрируя только соответствующие действия. Использование Plotinus не требует модификаций самого приложения!
Просто нажмите Ctrl+Shift+P (настраивается), и вы в бизнесе - это настолько естественно, что вы скоро задаетесь вопросом, как вы когда -либо жили без него.
Чтобы построить план из источника, вам нужны файлы разработки GIT, Cmake, Vala и GTK+ 3. Все это легко получить на большинстве современных распределений 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
Из -за сложности и неуклюжи, окружающих переменные среды Linux, в настоящее время пластин не включен автоматически. Самый простой способ включить Плотин для всех приложений в системе - добавить линию
GTK3_MODULES=[libpath]
к /etc/environment , где [libpath] является полным, абсолютным путем libplotinus.so , который можно найти с помощью команды
whereis -b libplotinus
В качестве альтернативы, вы можете попробовать Плотин с отдельными приложениями, запустив их с
GTK3_MODULES=[libpath] application
из терминала.
Плотин может быть настроен как глобально, так и на приложение. Настройки приложения имеют приоритет по сравнению с глобальными настройками. В приведенных ниже командах [application] может быть либо
default , в этом случае настройка применяется во всем мире, или/usr/bin/gedit -> usr.bin.gedit ). Обратите внимание, что соответствующий путь - это путь исполняемого процесса , который не всегда идентичен запуска исполняемому файлу. Например, все приложения Gnome JavaScript запускают процесс /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] должен быть массивом строк в формате, ожидаемом gtk_accelerator_parse , например, ["<Primary><Shift>P", "<Primary>P"] . Каждый ярлык в массиве открывает палитру команд.
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/[application]/ dbus-enabled [true/false]
См. Следующий раздел для деталей.
Plotinus предоставляет простой, но полный API D-BUS для разработчиков, которые хотят использовать свои функции из своего собственного программного обеспечения. API состоит из двух методов, выставленных на сессионной шине в com.worldwidemann.plotinus :
GetCommands(window_path) -> (bus_name, command_paths)
Берет путь объекта окна GTK+ (который, например, можно получить из окна Mutter через meta_window_get_gtk_window_object_path ) и возвращает массив пути объекта, извлеченные из этого окна, а также имя автобуса, на которой они зарегистрированы.
Механизм этого метода несколько похож на регистратор Appmenu от Ubuntu, но более легкий и совместим с Wayland. Регистрация окна должна быть включена перед использованием этого метода.
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
Берет массив команд (структуры формы (path, label, accelerators) ) и открывает окно палитры командной палитры, отображающее эти команды. Возвращенный путь объекта ссылается на объект управления, зарегистрированный на возвращенном имени шины, который предоставляет сигналы для взаимодействия с пользователем с окном.
Вызовы к этим методам обрабатываются службой D-BUS Plotinus, которая может быть начата с
plotinus
Следующие примеры демонстрируют, как использовать API D-BUS от Python. Они требуют, чтобы Pydbus был установлен, а услуга D-BUS Plotinus для работы.
#!/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 ()Прежде чем запустить этот пример, включите регистрацию окна с
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
Затем запустите приложение (например, GEDIT) с включенным Plotinus. Теперь запустите сценарий с помощью пути объекта Window в качестве аргумента, т.е.
./application_remote_control.py /org/gnome/gedit/window/1
Основываясь на этом плагине Argos, использует командную палитру Plotinus для отображения списка приложений, доступных в системе.
#!/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 ()Документация по модулям GTK+ по сути не существует. Без gtkparasite и gnome-globalmenu учиться, было бы намного труднее получить этот проект с земли.
Модули Cmake копируются дословно из репозитория Pantheon-Installer от Pantheon.
Вала по -прежнему величайшая вещь, которая когда -либо случалась с разработкой настольных компьютеров Linux.
Участники всегда приветствуются. Тем не менее, пожалуйста, подайте проблему, описывающую, что вы собираетесь добавить перед открытием запроса на вытяжение, особенно для новых функций! У меня есть четкое видение того, что я хочу (и не хочу) Плотина, поэтому обсуждение потенциальных дополнений может помочь вам избежать дублирования и потраченной впустую работы.
Способствуя, вы соглашаетесь выпустить свои изменения по той же лицензии, что и остальная часть проекта (см. Ниже).
Copyright © 2016-2017 Филипп Эмануэль Вейдманн ([email protected])
Выпущено в соответствии с условиями общей публичной лицензии GNU, версия 3