Pop Shell adalah lapisan berbasis keyboard untuk GNOME Shell yang memungkinkan navigasi dan pengelolaan jendela dengan cepat dan masuk akal. Fitur inti Pop Shell adalah penambahan manajemen jendela ubin tingkat lanjut — sebuah fitur yang sangat dicari dalam komunitas kami. Bagi banyak orang — termasuk kami sendiri — i3wm telah menjadi pesaing utama desktop GNOME.
Manajemen jendela ubin di GNOME hampir tidak ada, yang membuat desktop menjadi canggung untuk berinteraksi ketika kebutuhan Anda melebihi dua jendela pada waktu tertentu. Untungnya, GNOME Shell adalah desktop yang dapat diperluas dengan fondasi yang memungkinkan penerapan pengelola jendela ubin di atas desktop.
Oleh karena itu, kami melihat peluang di sini untuk meningkatkan kegunaan desktop GNOME agar lebih mengakomodasi kebutuhan komunitas kami dengan Pop Shell. Manajemen jendela ubin tingkat lanjut adalah suatu keharusan untuk desktop, jadi kami telah menggabungkan manajemen jendela ubin seperti i3 dengan desktop GNOME untuk mendapatkan yang terbaik dari kedua dunia.
Proposal: Kemungkinan di-upstream ke GNOME
Masalahnya: Mengapa kita memerlukan ini di GNOME
Instalasi: Bagi mereka yang ingin menginstal ini pada distribusi mereka
Solusinya:
Fitur Bersama: Perilaku yang dibagikan antara mode penumpukan dan penataan ubin otomatis
Mode Mengambang: Perilaku khusus untuk mode mengambang
Mode Ubin: Perilaku khusus untuk mode ubin otomatis
Pengembang: Panduan untuk memulai pengembangan
Proposal untuk integrasi fitur pengelolaan jendela ubin dari Pop Shell ke GNOME saat ini sedang dikembangkan. Ini akan dibuat sebagai isu GitLab di GNOME Shell untuk diskusi di masa depan, setelah kita menginvestasikan waktu kita untuk memproduksi prototipe yang berfungsi, dan mempelajari apa yang berhasil dan tidak dalam praktiknya.
Idealnya, fitur-fitur yang dieksplorasi di Pop Shell akan tersedia untuk lingkungan apa pun menggunakan Mutter — jauh memperluas kemampuan ubin setengah monitor yang ada saat ini. Dengan memulai sebagai ekstensi shell, siapa pun yang menggunakan GNOME Shell dapat menginstal ini ke sistem mereka, tanpa harus menginstal fork GNOME khusus Pop pada sistem mereka.
Jadi, mengapa ini menjadi masalah bagi kami, dan mengapa begitu banyak pengguna kami beralih ke i3wm?
GNOME saat ini hanya mendukung separuh ubin, yang menempatkan satu jendela di satu sisi layar, dan jendela lainnya di sisi lain layar. Jika Anda memiliki lebih dari dua jendela, diharapkan untuk menempatkannya di ruang kerja, monitor yang terpisah, atau bergantian antar jendela dengan Alt
+ Tab
.
Ini cenderung berfungsi dengan baik jika Anda hanya memiliki sedikit aplikasi. Jika Anda memerlukan lebih dari dua jendela sekaligus pada satu tampilan, satu-satunya pilihan Anda adalah menyeret jendela secara manual ke posisinya, dan mengubah ukurannya agar pas berdampingan — sebuah proses yang sangat memakan waktu dan dapat dengan mudah diotomatisasi dan disederhanakan.
Misalkan Anda beruntung — atau mungkin tidak beruntung — pemilik layar ultra lebar. Jendela yang dimaksimalkan akan memiliki banyak preferensi dan kontrol yang tersebar di sudut paling kiri dan paling kanan. Aplikasi dapat menempatkan panel dengan tombol di paling kiri, sementara tombol lainnya digeser ke tengah atau paling kanan.
Setengah ubin dalam skenario ini berarti setiap jendela akan berukuran keseluruhan layar 2560x1440 atau 4K. Dalam skenario mana pun, pada ukuran ekstrim seperti itu, mouse menjadi tidak berguna sama sekali — dan aplikasi menjadi tidak tertahankan untuk digunakan — dalam praktiknya.
Saat Anda berjuang melawan pengelola jendela, dengan cepat menjadi jelas bahwa segala upaya untuk mengelola jendela dengan cara penumpukan tradisional — di mana Anda perlu memindahkan jendela secara manual ke tempatnya, dan kemudian mengubah ukurannya secara manual — adalah sia-sia. Manusia tidak seakurat atau secepat algoritma dalam menyelaraskan jendela satu sama lain di layar.
Desktop GNOME hadir dengan banyak fitur integrasi desktop yang berguna, yang hilang saat beralih ke sesi i3wm. Meskipun dimungkinkan untuk menghubungkan berbagai layanan sesi GNOME ke sesi i3wm, sebagian besar pengalaman desktop GNOME masih hilang dalam prosesnya. Ikhtisar aplikasi, panel GNOME, dan ekstensi GNOME.
Lebih buruk lagi, banyak pengguna yang sama sekali tidak terbiasa dengan pengelola jendela ubin, dan mungkin tidak pernah merasa nyaman mengganti "cold turkey" ke pengelola jendela tersebut. Dengan menawarkan pengelolaan ubin jendela sebagai fitur yang dapat diikutsertakan, kami dapat memberdayakan pengguna untuk mendapatkan kontrol yang lebih besar atas desktop mereka, sehingga gagasan pengelolaan jendela ubin tiba-tiba dapat diakses.
Ada juga orang yang menginginkan pengalaman manajemen jendela susun tradisional, namun mereka juga ingin dapat memilih manajemen jendela ubin tingkat lanjut. Jadi, dimungkinkan untuk memilih manajemen jendela ubin jika diperlukan. Sistem operasi lain telah berhasil mengombinasikan fitur pengelolaan jendela susunan dengan pengalaman pengelolaan jendela susunan tradisional, dan kami merasa bahwa kami juga dapat melakukan hal ini dengan GNOME.
Gunakan cabang yang sesuai dengan versi GNOME Shell Anda ( git checkout branch_name
):
GNOME 3.36 hingga 41: Gunakan cabang master_focal
.
GNOME 42 hingga 44: Gunakan cabang master_jammy
.
GNOME 45: Gunakan cabang master_mantic
.
GNOME 46+: Gunakan cabang master_noble
.
GNU Make dan TypeScript juga diperlukan untuk membangun proyek.
Fungsionalitas shell yang tepat memerlukan modifikasi pintasan keyboard default GNOME. Untuk instalasi lokal, jalankan make local-install
.
Jika Anda ingin menghapus instalasi ekstensi, Anda dapat menjalankan make uninstall
, lalu buka panel "Pintasan Keyboard" di Pengaturan GNOME untuk memilih tombol "Reset Semua.." di bilah header.
Perhatikan bahwa jika Anda membuat paket untuk distribusi Linux Anda, banyak fitur di Pop Shell tidak akan langsung berfungsi karena memerlukan perubahan pada pintasan keyboard default GNOME. Instalasi lokal diperlukan jika Anda tidak mengemas sesi GNOME Anda dengan pintasan keyboard default ini tidak disetel atau diubah.
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 (Menggunakan Yay sebagai pembantu AUR):
yay -S gnome-shell-extension-pop-shell
Untuk versi biner yang telah dikompilasi: yay -S gnome-shell-extension-pop-shell-bin
Untuk versi repositori GitHub: yay -S gnome-shell-extension-pop-shell-git
Fitur yang dibagi antara mode susun dan ubin otomatis.
Ini adalah kunci dari banyak pintasan yang digunakan oleh pengelola jendela ubin. Dokumen ini selanjutnya akan merujuk pada kunci-kunci ini sebagai <Direction>
, yang defaultnya adalah kunci-kunci berikut:
Left
atau h
Down
atau j
Up
atau k
Right
atau l
Super
+ q
: Tutup jendela
Super
+ m
: Memaksimalkan jendela fokus
Super
+ ,
: Meminimalkan jendela fokus
Super
+ Esc
: Layar kunci
Super
+ f
: File
Super
+ e
: Email
Super
+ b
: Peramban Web
Super
+ t
: Terminal
Mode ini diaktifkan dengan
Super
+Return
.
Mode manajemen jendela mengaktifkan kontrol keyboard tambahan atas ukuran dan lokasi jendela yang sedang difokuskan. Perilaku mode ini sedikit berubah berdasarkan apakah Anda berada dalam mode ubin otomatis, atau dalam mode penumpukan default. Dalam mode default, hamparan ditampilkan dalam bentuk kisi, yang mewakili kemungkinan lokasi dan ukuran jendela fokus Anda di masa mendatang. Perilaku ini sedikit berubah dalam mode ubin otomatis, yang mana pengubahan ukuran dilakukan segera dan overlay hanya ditampilkan saat menukar jendela.
Mengaktifkan ini memungkinkan perilaku berikut:
<Direction>
Dalam mode default, ini akan memindahkan overlay yang ditampilkan berdasarkan grid
Dalam mode ubin otomatis, ini akan mengubah ukuran jendela
Shift
+ <Direction>
Dalam mode default, ini akan mengubah ukuran overlay
Dalam mode ubin otomatis, ini tidak akan menghasilkan apa pun
Ctrl
+ <Direction>
Memilih jendela pada arah overlay tertentu
Ketika Return
ditekan, posisi jendela akan ditukar
Shift
+ Ctrl
+ <Direction>
Dalam mode ubin otomatis, ukurannya akan berubah ke arah yang berlawanan
O
: Beralih antara ubin horizontal dan vertikal dalam mode ubin otomatis
~
: Beralih antara mengambang dan bersusun dalam mode ubin otomatis
Return
: Menerapkan perubahan yang diminta
Esc
: Membatalkan perubahan apa pun yang diminta
Saat tidak berada dalam mode manajemen jendela, menekan Super
+ <Direction>
akan mengalihkan fokus jendela ke jendela dalam arah yang ditentukan. Hal ini dihitung berdasarkan jarak antara bagian tengah sisi jendela fokus tempat jendela digeser, dan sisi berlawanan dari jendela yang mengelilinginya.
Mengalihkan fokus ke kiri akan menghitung dari tengah sisi timur jendela fokus ke tengah sisi barat semua jendela lainnya. Jendela dengan jarak paling kecil adalah jendela yang kita pilih.
Pop Shell menyediakan peluncur terintegrasi yang berinteraksi langsung dengan layanan peluncur pop kami. JSON IPC digunakan untuk berkomunikasi antara shell dan peluncur secara asinkron. Fungsionalitas ini dipisahkan dari shell karena masalah kinerja dan pemeliharaan. Peluncur baru ini ditulis dalam Rust dan sepenuhnya async. Peluncur ini memiliki fitur ekstensif yang akan berguna untuk mengimplementasikan peluncur desktop di luar ekstensi shell.
Celah meningkatkan estetika jendela ubin dan memudahkan untuk menangkap tepi jendela tertentu. Kami telah memutuskan untuk menambahkan dukungan untuk celah dalam dan luar, dan membuat pengaturan ini dapat dikonfigurasi di menu popup ekstensi.
Windows dengan dekorasi sisi server mungkin memiliki bilah judul yang sepenuhnya tersembunyi, sehingga menghasilkan ruang layar tambahan untuk aplikasi Anda, dan lingkungan yang lebih bersih secara visual. Fitur ini dapat diaktifkan di menu popup ekstensi. Windows dapat dipindahkan dengan mouse dengan menahan Super
saat mengklik dan menyeret jendela ke lokasi lain, atau menggunakan pintasan keyboard asli pop-shell. Windows dapat ditutup dengan menekan Super
+ Q
, dan dimaksimalkan dengan Super
+ M
.
Ini adalah mode default Pop Shell, yang menggabungkan manajemen jendela susun tradisional, dengan fitur manajemen jendela ubin opsional.
Dalam mode ini, tampilan dibagi menjadi grid kolom dan baris. Saat memasuki mode ubin, jendela akan dijepret ke kisi ini saat ditempatkan. Jumlah baris dan kolom dapat dikonfigurasi di menu popup ekstensi di panel.
Fitur opsional untuk meningkatkan pengalaman penataan ubin Anda adalah kemampuan untuk memasang jendela ke grid saat menggunakan mouse untuk memindahkan dan mengubah ukurannya. Ini memberikan presisi yang sama seperti memasuki mode manajemen jendela untuk memposisikan jendela dengan keyboard Anda, namun dengan kenyamanan dan keakraban dengan mouse. Fitur ini dapat diaktifkan melalui menu popup ekstensi.
Dinonaktifkan secara default, mode ini mengelola jendela menggunakan pengelola jendela ubin berbasis pohon. Mirip dengan i3, setiap simpul pohon mewakili dua cabang. Sebuah cabang dapat berupa sebuah jendela, sebuah garpu yang berisi lebih banyak cabang, atau sebuah tumpukan yang berisi banyak jendela. Setiap cabang mewakili area persegi panjang di layar, dan dapat dibagi lagi dengan membuat lebih banyak cabang di dalam cabang. Saat jendela dibuat, jendela tersebut ditugaskan ke jendela atau tumpukan yang secara aktif difokuskan, yang membuat garpu baru pada jendela, atau melampirkan jendela ke tumpukan yang terfokus. Saat jendela dihancurkan, tindakan sebaliknya dilakukan untuk mengompresi pohon dan mengatur ulang jendela ke dimensi barunya.
Super
+ O
Mengalihkan orientasi orientasi ubin garpu
Super
+ G
Mengalihkan jendela antara mengambang dan bersusun.
Lihat #menyesuaikan daftar float jendela
Ada file $XDG_CONFIG_HOME/pop-shell/config.json
di mana Anda dapat menambahkan struktur berikut:
{ class: "<WM_CLASS String from xprop>", title: "<Optional Window Title>" }
Misalnya, melakukan xprop
pada Pengaturan GNOME (atau Pusat Kontrol GNOME), nilai WM_CLASS adalah gnome-control-center
dan Gnome-control-center
. Gunakan nilai kedua (Gnome-control-center), yang akan dibaca oleh pop-shell. Bidang title
bersifat opsional.
Setelah menerapkan perubahan pada config.json
, Anda dapat memuat ulang ubin jika pertama kali tidak berfungsi.
Karena sifat JavaScript biasa yang berisiko, ekstensi GNOME Shell ini ditulis dalam TypeScript. Selain menyediakan kelas dan antarmuka pengecekan tipe statis dan dokumentasi mandiri, ini memungkinkan kami menulis sintaksis JavaScript modern sambil mendukung pembuatan kode untuk target lama.
Silakan instal yang berikut ini sebagai dependensi saat mengembangkan:
Node.js
LTS+ (v12+)
npm
terbaru (dilengkapi dengan NodeJS)
npm install typescript@latest
Saat mengerjakan shell, Anda dapat mengkompilasi ulang, mengkonfigurasi ulang, menginstal ulang, dan memulai ulang GNOME Shell dengan login dengan make debug
. Perhatikan bahwa ini hanya berfungsi dengan baik di sesi X11, karena Wayland akan keluar ke layar login saat shell dimulai ulang.
Diskusi diterima di Pop Chat
Berlisensi di bawah Lisensi Publik Umum GNU, Versi 3.0, (LISENSI atau https://www.gnu.org/licenses/gpl-3.0.en.html)
Kontribusi apa pun yang dengan sengaja Anda kirimkan untuk dimasukkan ke dalam karya Anda akan dilisensikan di bawah GNU GPLv3.