มีเพียงสารประกอบเท่านั้นที่สามารถสวยงามไม่เคยไม่มีอะไรเลย และทั้งหมด;
หลายส่วนจะมีความงามไม่ใช่ในตัวเอง
แต่เพียงแค่ทำงานร่วมกันเพื่อให้ยอดเยี่ยม
แต่ความงามในการรวมต้องการความงามในรายละเอียด:
มันไม่สามารถสร้างขึ้นจากความอัปลักษณ์; กฎหมายของมันจะต้องดำเนินการตลอด
- plotinus, ennead แรก
คุณเคยใช้ "คำสั่งพาเล็ต" ของข้อความ Sublime หรือ Atom หรือไม่? มันเป็นรายการของทุกสิ่งที่บรรณาธิการสามารถทำได้ที่เปิดขึ้นเมื่อกดคีย์และค้นหาการกระทำที่คุณกำลังมองหาเพียงแค่พิมพ์ตัวอักษรสองสามตัว มันเป็นพลังดิบที่ปลายนิ้วของคุณ
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 ) โปรดทราบว่าเส้นทางที่เกี่ยวข้องเป็นเส้นทางของ กระบวนการที่สามารถเรียกใช้งานได้ ซึ่งไม่เหมือนกันกับการเรียกใช้งานที่เปิดใช้งานเสมอไป ตัวอย่างเช่นแอปพลิเคชัน JavaScript GNOME ทั้งหมดเรียกใช้กระบวนการ /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 ) และส่งคืนอาร์เรย์ของเส้นทางวัตถุที่อ้างอิงคำสั่งที่แยกออกมาจากหน้าต่างนั้นเช่นเดียวกับชื่อของรถบัสที่ลงทะเบียน
กลไกที่อยู่เบื้องหลังวิธีนี้ค่อนข้างคล้ายกับนายทะเบียน AppMenu ของ Ubuntu แต่มีน้ำหนักเบาและเข้ากันได้กับ Wayland มากขึ้น ต้องเปิดใช้งานการลงทะเบียนหน้าต่างก่อนใช้วิธีนี้
ShowCommandPalette(commands) -> (bus_name, command_palette_path)
ใช้อาร์เรย์ของคำสั่ง (โครงสร้างของแบบฟอร์ม (path, label, accelerators) ) และเปิดหน้าต่างจานคำสั่งที่แสดงคำสั่งเหล่านั้น เส้นทางวัตถุที่ส่งคืนอ้างอิงวัตถุควบคุมที่ลงทะเบียนในชื่อบัสที่ส่งคืนซึ่งให้สัญญาณเกี่ยวกับการโต้ตอบของผู้ใช้กับหน้าต่าง
การโทรไปยังวิธีการเหล่านี้จะถูกประมวลผลโดย บริการ Plotinus D-Bus ซึ่งสามารถเริ่มต้นได้ด้วย
plotinus
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการใช้ D-BUS API จาก 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 ถูกคัดลอกคำต่อคำจากที่เก็บแพนธีออน-ติดตั้งของ Elementary
Vala ยังคงเป็นสิ่งที่ยิ่งใหญ่ที่สุดที่เคยเกิดขึ้นกับการพัฒนาเดสก์ท็อป Linux
ยินดีต้อนรับผู้ร่วมให้ข้อมูลเสมอ อย่างไรก็ตาม โปรดยื่นปัญหาที่อธิบายสิ่งที่คุณตั้งใจจะเพิ่มก่อนเปิดคำขอดึง โดยเฉพาะอย่างยิ่ง สำหรับคุณสมบัติใหม่! ฉันมีวิสัยทัศน์ที่ชัดเจนเกี่ยวกับสิ่งที่ฉันต้องการ (และไม่ต้องการ) Plotinus ดังนั้นการพูดคุยเกี่ยวกับการเพิ่มที่เป็นไปได้อาจช่วยให้คุณหลีกเลี่ยงการทำซ้ำและเสียงาน
โดยการมีส่วนร่วมคุณตกลงที่จะปล่อยการเปลี่ยนแปลงของคุณภายใต้ใบอนุญาตเดียวกันกับส่วนที่เหลือของโครงการ (ดูด้านล่าง)
ลิขสิทธิ์© 2016-2017 Philipp Emanuel Weidmann ([email protected])
ปล่อยภายใต้เงื่อนไขของใบอนุญาตสาธารณะ GNU ทั่วไปเวอร์ชัน 3