فقط المركب يمكن أن يكون جميلًا ، ولا يخلو من الأجزاء ؛ وفقط.
الأجزاء العديدة سيكون لها الجمال ، وليس في حد ذاتها ،
ولكن فقط العمل معا لإعطاء إجمالي رائع.
ومع ذلك ، يتطلب الجمال في إجمالي الجمال بالتفاصيل:
لا يمكن بناؤه من القبح. يجب أن يعمل قانونها طوال الوقت.
- Plotinus ، أول ennead
هل استخدمت "لوحة الأوامر" الخاصة بـ Sublime Text أو Atom؟ إنها قائمة بكل ما يمكن أن يفعله هؤلاء المحررين الذي يفتح عند الضغط على مفتاح ويجد الإجراء الذي تبحث عنه فقط عن طريق كتابة بضعة رسائل. إنها قوة خام في أطراف أصابعك.
يجلب PlotInus هذه الطاقة إلى كل تطبيق على نظامك (أي ، إلى أولئك الذين يستخدمون مجموعة أدوات GTK+ 3). يقوم تلقائيًا باستخراج جميع الأوامر المتاحة عن طريق إدخال تطبيق تشغيل ، والتكيف على الفور مع تغييرات واجهة المستخدم وإظهار الإجراءات ذات الصلة فقط. لا يتطلب استخدام Plotinus أي تعديلات على التطبيق نفسه!
ما عليك سوى الضغط على Ctrl+Shift+P (قابل للتكوين) وأنت في العمل - إنه من الطبيعي جدًا أن تتساءل قريبًا كيف كنت تعيش بدونها.
لبناء Plotinus من Source ، تحتاج إلى ملفات تطوير 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 على الصعيدين العالمي و PER. تتبع إعدادات التطبيق الأسبقية على الإعدادات العالمية. في الأوامر أدناه ، يمكن أن يكون [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 بسيطة ولكنها كاملة للمطورين الذين يرغبون في استخدام وظائفها من برامجهم الخاصة. يتكون واجهة برمجة التطبيقات من طريقتين ، مكشوفة في حافلة الجلسة في 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
توضح الأمثلة التالية كيفية استخدام واجهة برمجة تطبيقات D-BUS من Python. أنها تتطلب تثبيت 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
ثم ، قم بتشغيل تطبيق (على سبيل المثال GEDIT) مع تمكين Plotinus. قم الآن بتشغيل البرنامج النصي مع مسار كائن النافذة كوسيطة ، أي
./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 حرفيًا من مستودع التثبيت في الابتدائية.
لا يزال فالا أعظم شيء يحدث على الإطلاق لتطوير سطح المكتب Linux.
المساهمون دائما موضع ترحيب. ومع ذلك ، يرجى تقديم مشكلة تصف ما تنوي إضافته قبل فتح طلب سحب ، خاصة بالنسبة للميزات الجديدة! لدي رؤية واضحة لما أريد (ولا أريد) أن يكون Plotinus ، لذلك قد تساعدك مناقشة الإضافات المحتملة على تجنب الازدواجية والعمل الضائع.
من خلال المساهمة ، فإنك توافق على إصدار التغييرات الخاصة بك بموجب نفس الترخيص مثل بقية المشروع (انظر أدناه).
حقوق الطبع والنشر © 2016-2017 Philipp Emanuel Weidmann ([email protected])
تم إصداره بموجب شروط رخصة GNU العامة ، الإصدار 3