只有一个化合物可以是美丽的,从来没有任何零件。而且只有一个;
几个部分将拥有美丽,而不是自己,
但是,只有共同努力,可以给出一个共同的总和。
然而,总体中的美需要详细的美:
它不能是出于丑陋而建造的;它的定律必须贯穿。
- Plotinus,首先
您是否使用过Sublime Text's或Atom的“ Command Palette”?这是这些编辑可以做的所有事情的列表,这些列表在按键的印刷机上打开,并通过输入几个字母来找到您正在寻找的操作。触手可及的原始力量。
Plotinus将该电源带给您系统上的每个应用程序(即使用GTK+ 3工具包的应用程序)。它通过内省运行的应用程序自动提取所有可用命令,立即适应UI更改并仅显示相关操作。使用Plotinus不需要对应用程序本身进行任何修改!
只需按Ctrl+Shift+P (可配置),您就可以从事业务 - 很自然,您很快就会想知道没有它的生活。
要从源构建Plotinus,您需要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环境变量周围的复杂性和笨拙,Plotinus当前未自动启用。为系统上所有应用程序启用Plotinus的最简单方法是添加行
GTK3_MODULES=[libpath]
到/etc/environment , [libpath]是libplotinus.so的完整,绝对的路径,可以使用命令找到它
whereis -b libplotinus
另外,您可以通过运行单个应用程序来尝试使用Plotinus
GTK3_MODULES=[libpath] application
从终端。
可以在全球和每个应用程序上配置Plotinus。应用程序设置优先于全球设置。在下面的命令中, [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为想要从自己的软件中使用其功能的开发人员提供了简单但完整的D-BUS API。 API由两种方法组成,在com.worldwidemann.plotinus上的会话总线上暴露于:
GetCommands(window_path) -> (bus_name, command_paths)
获取GTK+窗口的对象路径(例如,可以通过meta_window_get_gtk_window_object_path从穆特窗口获得,并返回引用从该窗口中提取的命令的对象路径数组,以及已注册的总线名称。
这种方法背后的机制与Ubuntu的AppMenu注册服务商有些相似,但与Wayland更轻巧和兼容。在使用此方法之前,必须启用窗口注册。
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
采用一系列命令( (path, label, accelerators) ),并打开显示这些命令的命令调色板窗口。返回的对象路径引用在返回的总线名称上注册的控制对象,该对象在与窗口的交互时提供了信号。
plotinus d-Bus服务处理这些方法的调用,可以从
plotinus
以下示例演示了如何使用Python的D-BUS API。他们要求安装Pydbus,并且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 ()在运行此示例之前,请使用
gsettings set com.worldwidemann.plotinus:/com/worldwidemann/plotinus/default/ dbus-enabled true
然后,使用启用Plotinus运行一个应用程序(例如GEDIT)。现在以窗口对象路径作为参数运行脚本,即
./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存储库中逐字复制的。
Vala仍然是Linux桌面开发中最伟大的事情。
总是欢迎贡献者。但是,请提出一个问题,描述您打算在打开拉动请求之前要添加的内容,尤其是对于新功能!我对我想要(并且不想)Plotinus的内容有一个清晰的愿景,因此讨论潜在的添加可能有助于您避免重复和浪费的工作。
通过贡献,您同意在与项目其余部分相同的许可下发布更改(请参见下文)。
版权所有©2016-2017 Philipp Emanuel Weidmann([email protected])
根据GNU通用公共许可证的条款发布,版本3