Pop Shell เป็นเลเยอร์ที่ขับเคลื่อนด้วยแป้นพิมพ์สำหรับ GNOME Shell ซึ่งช่วยให้การนำทางและการจัดการหน้าต่างรวดเร็วและสมเหตุสมผล คุณสมบัติหลักของ Pop Shell คือการเพิ่มการจัดการหน้าต่างแบบเรียงต่อกันขั้นสูง ซึ่งเป็นคุณสมบัติที่เป็นที่ต้องการอย่างมากในชุมชนของเรา สำหรับหลายๆ คน รวมทั้งพวกเราด้วยด้วย i3wm ได้กลายเป็นคู่แข่งชั้นนำของเดสก์ท็อป GNOME
การจัดการหน้าต่างแบบเรียงต่อกันใน GNOME นั้นแทบไม่มีอยู่จริง ซึ่งทำให้เดสก์ท็อปโต้ตอบได้ยากเมื่อความต้องการของคุณเกินหน้าต่างสองบานในเวลาที่กำหนด โชคดีที่ GNOME Shell เป็นเดสก์ท็อปที่ขยายได้ซึ่งมีพื้นฐานที่ทำให้สามารถใช้ตัวจัดการหน้าต่างเรียงต่อกันที่ด้านบนของเดสก์ท็อปได้
ดังนั้นเราจึงมองเห็นโอกาสในการพัฒนาการใช้งานเดสก์ท็อป GNOME เพื่อรองรับความต้องการของชุมชนของเราด้วย Pop Shell ได้ดียิ่งขึ้น การจัดการหน้าต่างการเรียงต่อกันขั้นสูงเป็นสิ่งจำเป็นสำหรับเดสก์ท็อป ดังนั้นเราจึงรวมการจัดการหน้าต่างการเรียงต่อกันแบบ i3 เข้ากับเดสก์ท็อป GNOME เพื่อสิ่งที่ดีที่สุดของทั้งสองโลก
ข้อเสนอ: สามารถอัปสตรีมไปยัง GNOME ได้
ปัญหา: เหตุใดเราจึงต้องการสิ่งนี้ใน GNOME
การติดตั้ง: สำหรับผู้ที่ต้องการติดตั้งสิ่งนี้ในการจำหน่าย
แนวทางแก้ไข:
คุณสมบัติที่ใช้ร่วมกัน: พฤติกรรมที่ใช้ร่วมกันระหว่างโหมดซ้อนและเรียงต่ออัตโนมัติ
โหมดลอยตัว: พฤติกรรมเฉพาะของโหมดลอยตัว
โหมดการเรียงต่อ: ลักษณะการทำงานเฉพาะของโหมดการเรียงต่ออัตโนมัติ
นักพัฒนา: คำแนะนำสำหรับการเริ่มต้นการพัฒนา
ข้อเสนอสำหรับการบูรณาการคุณสมบัติการจัดการหน้าต่างเรียงต่อกันจาก Pop Shell เข้ากับ GNOME อยู่ระหว่างการพัฒนา มันจะถูกสร้างขึ้นเป็นปัญหา GitLab บน GNOME Shell สำหรับการสนทนาในอนาคต เมื่อเราสละเวลาของเราในการผลิตต้นแบบที่ใช้งานได้ และเรียนรู้ว่าสิ่งใดใช้ได้ผลและไม่ได้ผลในทางปฏิบัติ
ตามหลักการแล้ว คุณสมบัติที่สำรวจใน Pop Shell จะพร้อมใช้งานสำหรับทุกสภาพแวดล้อมที่ใช้ Mutter ซึ่งขยายขีดความสามารถในการแบ่งครึ่งจอภาพที่มีอยู่ในปัจจุบันออกไปอย่างมาก เมื่อเริ่มต้นจากการเป็นส่วนขยายของเชลล์ ใครก็ตามที่ใช้ GNOME Shell จะสามารถติดตั้งสิ่งนี้ลงในระบบของตนได้ โดยไม่ต้องติดตั้ง GNOME fork เฉพาะของ Pop บนระบบของตน
เหตุใดจึงเป็นปัญหาสำหรับเรา และเหตุใดผู้ใช้ของเราจำนวนมากจึงเปลี่ยนมาใช้ i3wm
ปัจจุบัน GNOME รองรับการเรียงครึ่งจอเท่านั้น ซึ่งเรียงหน้าต่างหนึ่งไปด้านหนึ่งของหน้าจอ และอีกหน้าต่างหนึ่งไปอีกด้านหนึ่งของหน้าจอ หากคุณมีหน้าต่างมากกว่าสองบาน ควรวางไว้ในพื้นที่ทำงาน จอภาพ หรือสลับระหว่างหน้าต่างด้วย Alt
+ Tab
สิ่งนี้มีแนวโน้มที่จะทำงานได้ดีหากคุณมีแอปพลิเคชันเพียงเล็กน้อยเท่านั้น หากคุณต้องการหน้าต่างมากกว่าสองหน้าต่างในแต่ละครั้งบนจอแสดงผล ทางเลือกเดียวของคุณคือการลากหน้าต่างไปยังตำแหน่งด้วยตนเอง และปรับขนาดให้พอดีกัน ซึ่งเป็นกระบวนการที่ใช้เวลานานมากซึ่งสามารถทำให้เป็นอัตโนมัติและคล่องตัวได้อย่างง่ายดาย
สมมติว่าคุณโชคดีหรือโชคร้ายซึ่งเป็นเจ้าของจอแสดงผลกว้างพิเศษ หน้าต่างที่ขยายใหญ่สุดจะมีการตั้งค่าและการควบคุมต่างๆ มากมายกระจายอยู่ที่มุมซ้ายสุดและมุมขวาสุด แอปพลิเคชันอาจวางแผงที่มีปุ่มต่างๆ ไว้ทางซ้ายสุด ในขณะที่ปุ่มอื่นๆ จะถูกเลื่อนไปที่กึ่งกลางที่ห่างไกลหรือทางขวาสุด
การเรียงครึ่งจอในสถานการณ์นี้หมายความว่าแต่ละหน้าต่างจะมีขนาดใหญ่เท่ากับจอแสดงผล 2560x1440 หรือ 4K ทั้งหมด ไม่ว่าในสถานการณ์ใด ด้วยขนาดที่ใหญ่โตขนาดนั้น เมาส์จะไร้ประโยชน์โดยสิ้นเชิง และในทางปฏิบัติแอปพลิเคชันต่างๆ ก็ทนไม่ไหว
เมื่อคุณต่อสู้กับตัวจัดการหน้าต่าง จะเห็นได้อย่างรวดเร็วว่าความพยายามใด ๆ ในการจัดการหน้าต่างในลักษณะการซ้อนแบบดั้งเดิม — โดยที่คุณต้องย้ายหน้าต่างเข้าที่ด้วยตนเอง แล้วปรับขนาดด้วยตนเอง — นั้นไร้ประโยชน์ มนุษย์ไม่มีความแม่นยำหรือรวดเร็วเท่ากับอัลกอริธึมในการจัดตำแหน่งหน้าต่างให้ชิดกันบนจอแสดงผล
เดสก์ท็อป GNOME มาพร้อมกับคุณลักษณะการรวมเดสก์ท็อปที่เป็นประโยชน์มากมาย ซึ่งจะสูญหายไปเมื่อเปลี่ยนไปใช้เซสชัน i3wm แม้ว่าจะเป็นไปได้ที่จะเชื่อมต่อบริการเซสชันต่างๆ ของ GNOME เข้ากับเซสชัน i3wm แต่ประสบการณ์การใช้งานเดสก์ท็อป GNOME ส่วนใหญ่ยังคงสูญหายไปในกระบวนการนี้ ภาพรวมแอปพลิเคชัน แผง GNOME และส่วนขยาย GNOME
ที่แย่กว่านั้นคือผู้ใช้จำนวนมากไม่คุ้นเคยกับตัวจัดการหน้าต่างแบบเรียงต่อกันโดยสิ้นเชิง และอาจไม่เคยรู้สึกสบายใจที่จะเปลี่ยน "ไก่งวงเย็น" เป็นอันหนึ่งเลย ด้วยการเสนอการจัดการหน้าต่างแบบเรียงต่อกันเป็นคุณลักษณะที่สามารถเลือกใช้ได้ เราสามารถให้อำนาจแก่ผู้ใช้ในการควบคุมเดสก์ท็อปได้มากขึ้น เพื่อให้แนวคิดในการจัดการหน้าต่างแบบเรียงต่อกันกลายเป็นเรื่องง่าย
นอกจากนี้ยังมีผู้ที่ต้องการประสบการณ์การจัดการหน้าต่างแบบซ้อนแบบเดิม แต่พวกเขาก็ต้องการที่จะสามารถเลือกใช้การจัดการหน้าต่างแบบเรียงต่อกันขั้นสูงได้เช่นกัน ดังนั้นจึงควรเลือกใช้การจัดการหน้าต่างแบบเรียงต่อกันได้ตามความจำเป็น ระบบปฏิบัติการอื่นๆ ประสบความสำเร็จในการรวมคุณลักษณะการจัดการหน้าต่างแบบเรียงต่อกันเข้ากับประสบการณ์การจัดการหน้าต่างแบบเรียงซ้อนแบบเดิม และเรารู้สึกว่าเราสามารถทำเช่นนี้กับ GNOME ได้เช่นกัน
ใช้สาขาที่สอดคล้องกับเวอร์ชัน GNOME Shell ของคุณ ( git checkout branch_name
):
GNOME 3.36 ถึง 41: ใช้สาขา master_focal
GNOME 42 ถึง 44: ใช้สาขา master_jammy
GNOME 45: ใช้สาขา master_mantic
GNOME 46+: ใช้สาขา master_noble
ต้องใช้ GNU Make และ TypeScript เพื่อสร้างโครงการ
การทำงานที่เหมาะสมของเชลล์จำเป็นต้องแก้ไขแป้นพิมพ์ลัดเริ่มต้นของ GNOME สำหรับการติดตั้งแบบโลคัล ให้รัน make local-install
หากคุณต้องการถอนการติดตั้งส่วนขยาย คุณสามารถเรียกใช้ make uninstall
จากนั้นเปิดแผง "แป้นพิมพ์ลัด" ในการตั้งค่า GNOME เพื่อเลือกปุ่ม "รีเซ็ตทั้งหมด..." ในแถบส่วนหัว
โปรดทราบว่าหากคุณจัดแพ็คเกจสำหรับการแจกจ่าย Linux คุณสมบัติหลายอย่างใน Pop Shell จะไม่ทำงานนอกกรอบเนื่องจากจำเป็นต้องเปลี่ยนแปลงแป้นพิมพ์ลัดเริ่มต้นของ GNOME จำเป็นต้องติดตั้งในเครื่องหากคุณไม่ได้รวมเซสชัน GNOME ของคุณโดยไม่ได้ตั้งค่าหรือเปลี่ยนแปลงแป้นพิมพ์ลัดเริ่มต้นเหล่านี้
Fedora: sudo dnf install gnome-shell-extension-pop-shell xprop
Gentoo: emerge gnome-shell-extension-pop-shell
openSUSE Tumbleweed: sudo zypper install gnome-shell-extension-pop-shell
Arch Linux (ใช้ Yay เป็นตัวช่วย AUR):
yay -S gnome-shell-extension-pop-shell
สำหรับเวอร์ชันไบนารีที่คอมไพล์แล้ว: yay -S gnome-shell-extension-pop-shell-bin
สำหรับเวอร์ชันที่เก็บ GitHub: yay -S gnome-shell-extension-pop-shell-git
คุณสมบัติที่แชร์ระหว่างโหมดซ้อนและเรียงต่ออัตโนมัติ
สิ่งเหล่านี้เป็นกุญแจสำคัญของทางลัดจำนวนมากที่ใช้โดยตัวจัดการหน้าต่างแบบเรียงต่อกัน ต่อจากนี้ไปเอกสารนี้จะอ้างถึงคีย์เหล่านี้ว่า <Direction>
ซึ่งมีค่าเริ่มต้นเป็นคีย์ต่อไปนี้:
Left
หรือ h
Down
หรือ j
Up
หรือ k
Right
หรือ l
Super
+ q
: ปิดหน้าต่าง
Super
+ m
: ขยายหน้าต่างที่โฟกัสให้ใหญ่สุด
Super
+ ,
: ย่อหน้าต่างที่โฟกัสให้เล็กสุด
Super
+ Esc
: ล็อคหน้าจอ
Super
+ f
: ไฟล์
Super
+ e
: อีเมล
Super
+ b
: เว็บเบราว์เซอร์
Super
+ t
: เทอร์มินัล
โหมดนี้เปิดใช้งานด้วย
Super
+Return
โหมดการจัดการหน้าต่างจะเปิดใช้งานการควบคุมแป้นพิมพ์เพิ่มเติมเกี่ยวกับขนาดและตำแหน่งของหน้าต่างที่โฟกัสอยู่ในปัจจุบัน ลักษณะการทำงานของโหมดนี้เปลี่ยนแปลงเล็กน้อยขึ้นอยู่กับว่าคุณอยู่ในโหมดไทล์อัตโนมัติหรือในโหมดสแต็กเริ่มต้น ในโหมดเริ่มต้น โอเวอร์เลย์จะแสดงในตารางซึ่งแสดงถึงตำแหน่งที่เป็นไปได้ในอนาคตและขนาดของหน้าต่างที่โฟกัสของคุณ ลักษณะการทำงานนี้จะเปลี่ยนแปลงเล็กน้อยในโหมดเรียงต่ออัตโนมัติ โดยที่การปรับขนาดจะดำเนินการทันทีและการซ้อนทับจะแสดงเฉพาะเมื่อมีการสลับหน้าต่างเท่านั้น
การเปิดใช้งานสิ่งนี้จะทำให้มีพฤติกรรมต่อไปนี้:
<Direction>
ในโหมดเริ่มต้น การดำเนินการนี้จะย้ายการซ้อนทับที่แสดงไปรอบๆ ตามตาราง
ในโหมดไทล์อัตโนมัติ ระบบจะปรับขนาดหน้าต่าง
Shift
+ <Direction>
ในโหมดเริ่มต้น การดำเนินการนี้จะปรับขนาดภาพซ้อนทับ
ในโหมดไทล์อัตโนมัติ การดำเนินการนี้จะไม่ทำอะไรเลย
Ctrl
+ <Direction>
เลือกหน้าต่างในทิศทางที่กำหนดของการซ้อนทับ
เมื่อกด Return
ตำแหน่งหน้าต่างจะถูกสลับ
Shift
+ Ctrl
+ <Direction>
ในโหมดไทล์อัตโนมัติ การปรับขนาดในทิศทางตรงกันข้าม
O
: สลับระหว่างการปูกระเบื้องแนวนอนและแนวตั้งในโหมดปูกระเบื้องอัตโนมัติ
~
: สลับระหว่างการลอยและการปูกระเบื้องในโหมดไทล์อัตโนมัติ
Return
: ใช้การเปลี่ยนแปลงที่ได้รับการร้องขอ
Esc
: ยกเลิกการเปลี่ยนแปลงใดๆ ที่ถูกร้องขอ
เมื่อไม่อยู่ในโหมดการจัดการหน้าต่าง การกด Super
+ <Direction>
จะเลื่อนโฟกัสหน้าต่างไปยังหน้าต่างในทิศทางที่กำหนด ซึ่งคำนวณโดยอิงจากระยะห่างระหว่างศูนย์กลางของด้านข้างของหน้าต่างที่โฟกัสซึ่งหน้าต่างจะถูกเลื่อนไป กับด้านตรงข้ามของหน้าต่างที่อยู่รอบๆ
การสลับโฟกัสไปทางซ้ายจะคำนวณจากศูนย์กลางของฝั่งตะวันออกของหน้าต่างที่โฟกัสไปยังศูนย์กลางของฝั่งตะวันตกของหน้าต่างอื่นๆ ทั้งหมด หน้าต่างที่มีระยะห่างน้อยที่สุดคือหน้าต่างที่เราเลือก
Pop Shell มีตัวเรียกใช้งานแบบรวมซึ่งเชื่อมต่อโดยตรงกับบริการตัวเรียกใช้งานป๊อปของเรา JSON IPC ใช้เพื่อสื่อสารระหว่างเชลล์และตัวเรียกใช้งานในลักษณะอะซิงโครนัส ฟังก์ชันนี้ถูกแยกออกจากเชลล์เนื่องจากปัญหาด้านประสิทธิภาพและการบำรุงรักษา ตัวเรียกใช้งานใหม่เขียนด้วยภาษา Rust และอะซิงก์เต็มรูปแบบ ตัวเรียกใช้งานมีคุณสมบัติมากมายที่จะเป็นประโยชน์สำหรับการใช้งานตัวเรียกใช้งานเดสก์ท็อปนอกเหนือจากส่วนขยายของเชลล์
ช่องว่างช่วยปรับปรุงความสวยงามของหน้าต่างกระเบื้อง และทำให้ง่ายต่อการคว้าขอบของหน้าต่างใดหน้าต่างหนึ่งโดยเฉพาะ เราได้ตัดสินใจที่จะเพิ่มการรองรับช่องว่างภายในและภายนอก และทำให้การตั้งค่าเหล่านี้สามารถกำหนดได้ในเมนูป๊อปอัปของส่วนขยาย
Windows ที่มีการตกแต่งฝั่งเซิร์ฟเวอร์อาจซ่อนแถบชื่อเรื่องไว้โดยสิ้นเชิง ส่งผลให้มีพื้นที่หน้าจอเพิ่มเติมสำหรับแอปพลิเคชันของคุณ และมีสภาพแวดล้อมที่สะอาดตายิ่งขึ้น คุณสามารถสลับคุณลักษณะนี้ได้ในเมนูป๊อปอัปของส่วนขยาย Windows สามารถเคลื่อนย้ายได้ด้วยเมาส์โดยกด Super
ค้างไว้เมื่อคลิกและลากหน้าต่างไปยังตำแหน่งอื่น หรือใช้แป้นพิมพ์ลัดดั้งเดิมของ pop-shell Windows อาจปิดได้ด้วยการกด Super
+ Q
และขยายใหญ่สุดด้วย Super
+ M
นี่คือโหมดเริ่มต้นของ Pop Shell ซึ่งรวมการจัดการหน้าต่างแบบเรียงซ้อนแบบดั้งเดิมเข้ากับคุณสมบัติการจัดการหน้าต่างแบบเรียงต่อกัน
ในโหมดนี้ จอแสดงผลจะแบ่งออกเป็นตารางที่มีคอลัมน์และแถว เมื่อเข้าสู่โหมดไทล์ หน้าต่างจะชิดกับตารางนี้ทันทีที่วางไว้ จำนวนแถวและคอลัมน์สามารถกำหนดค่าได้ในเมนูป๊อปอัปของส่วนขยายในแผงควบคุม
คุณลักษณะเสริมเพื่อปรับปรุงประสบการณ์การปูกระเบื้องของคุณคือความสามารถในการสแน็ปหน้าต่างเป็นตารางเมื่อใช้เมาส์เพื่อย้ายและปรับขนาด ซึ่งให้ความแม่นยำเช่นเดียวกับการเข้าสู่โหมดการจัดการหน้าต่างเพื่อวางตำแหน่งหน้าต่างด้วยคีย์บอร์ดของคุณ แต่ให้ความสะดวกสบายและความคุ้นเคยของเมาส์ คุณสามารถเปิดใช้งานคุณลักษณะนี้ได้ผ่านเมนูป๊อปอัปของส่วนขยาย
โหมดนี้จะปิดใช้งานโดยค่าเริ่มต้น โดยจะจัดการหน้าต่างโดยใช้ตัวจัดการหน้าต่างแบบเรียงต่อกันแบบต้นไม้ เช่นเดียวกับ i3 แต่ละโหนดของทรีแสดงถึงสองกิ่ง สาขาอาจเป็นหน้าต่าง ทางแยกที่มีกิ่งก้านมากขึ้น หรือกองที่มีหน้าต่างหลายบาน แต่ละสาขาแสดงถึงพื้นที่สี่เหลี่ยมบนหน้าจอ และสามารถแบ่งย่อยได้โดยการสร้างสาขาเพิ่มเติมภายในสาขา เมื่อหน้าต่างถูกสร้างขึ้น หน้าต่างเหล่านั้นจะถูกกำหนดให้กับหน้าต่างหรือสแต็กที่ถูกโฟกัสอยู่ ซึ่งจะสร้างทางแยกใหม่บนหน้าต่าง หรือแนบหน้าต่างเข้ากับสแต็กที่โฟกัส เมื่อหน้าต่างถูกทำลาย จะมีการดำเนินการตรงกันข้ามเพื่อบีบอัดต้นไม้และจัดเรียงหน้าต่างใหม่ให้เป็นมิติใหม่
Super
+ O
สลับการวางแนวของการวางแนวการปูกระเบื้องของส้อม
Super
+ G
สลับหน้าต่างระหว่างลอยและเรียงต่อกัน
ดู #การปรับแต่งรายการโฟลตหน้าต่าง
มีไฟล์ $XDG_CONFIG_HOME/pop-shell/config.json
ซึ่งคุณสามารถเพิ่มโครงสร้างต่อไปนี้:
{ class: "<WM_CLASS String from xprop>", title: "<Optional Window Title>" }
ตัวอย่างเช่น การทำ xprop
บนการตั้งค่า GNOME (หรือศูนย์ควบคุม GNOME) ค่า WM_CLASS คือ gnome-control-center
และ Gnome-control-center
ใช้ค่าที่สอง (Gnome-control-center) ซึ่ง pop-shell จะอ่าน ช่อง title
เป็นทางเลือก
หลังจากใช้การเปลี่ยนแปลงใน config.json
คุณสามารถโหลดการเรียงต่อกันซ้ำได้หากไม่ได้ผลในครั้งแรก
เนื่องจากลักษณะที่มีความเสี่ยงของ JavaScript ธรรมดา ส่วนขยาย GNOME Shell นี้จึงเขียนด้วย TypeScript นอกเหนือจากการจัดหาการตรวจสอบประเภทคงที่และการจัดทำเอกสารด้วยตนเองและอินเทอร์เฟซแล้ว ยังช่วยให้เราสามารถเขียนไวยากรณ์ JavaScript สมัยใหม่ในขณะที่สนับสนุนการสร้างโค้ดสำหรับเป้าหมายเก่า
โปรดติดตั้งสิ่งต่อไปนี้เป็นการพึ่งพาเมื่อพัฒนา:
Node.js
LTS+ (เวอร์ชัน 12+)
npm
ล่าสุด (มาพร้อมกับ NodeJS)
npm install typescript@latest
ในขณะที่ทำงานกับเชลล์ คุณสามารถคอมไพล์ใหม่ กำหนดค่าใหม่ ติดตั้งใหม่ และรีสตาร์ท GNOME Shell ด้วยการบันทึกด้วย make debug
โปรดทราบว่าการดำเนินการนี้จะเชื่อถือได้เฉพาะในเซสชัน X11 เนื่องจาก Wayland จะออกจากหน้าจอเข้าสู่ระบบเมื่อรีสตาร์ทเชลล์
ยินดีต้อนรับการสนทนาใน Pop Chat
ได้รับอนุญาตภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU เวอร์ชัน 3.0 (ใบอนุญาตหรือ https://www.gnu.org/licenses/gpl-3.0.en.html)
การสนับสนุนใดๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในผลงานของคุณจะได้รับอนุญาตภายใต้ GNU GPLv3