Beberapa waktu yang lalu, saya sempat membahas tentang mengulik kompositor tinywl. Setelah 2 bulan lebih, saya ingin berbagi perkembangannya. Sebelumnya saya menyebutnya sebagai tinywl-next
dan sekarang saya melakukan rebrand menjadi TinyWay.
TinyWay, apa saja yang berbeda dengan tinywl-next ?
Ada beberapa hal dan fitur yang membedakan TinyWay dengan tinywl-next, di antaranya :
- Manipulasi jendela.
- Mengatur warna latar / background.
- Beralih ke VT / virtual terminal.
- Zona eksklusif.
- Pseudo minimize.
- Rule / aturan untuk jendela spesifik.
- Screenshot / tangkapan layar dengan
grim
secara default.
Menggunakan TinyWay dalam aktifitas menulis kode dan berselancar.
Manipulasi jendela.
Manipulasi yang saya maksud di sini adalah mengatur posisi (move) dan mengubah ukuran jendela (resize). Untuk lebih jelasanya adalah sebagai berikut.
- Memindah jendela.
TinyWay dapat memindah posisi jendela ke arah kiri, kanan, atas dan bawah, sesuai jumlah langkah / step yang dikehendaki. Tidak berhenti sampai di situ, TinyWay juga bisa memindah jendela ke pojok kiri, kanan, atas dan bawah.
Memindah posisi jendela.
- Mengatur ukuran jendela.
TinyWay dapat mengatur ukuran / me-resize jendela ke arah kiri (mengurangi ukuran), kanan (menambah ukuran), atas (mengurangi ukuran) dan bawah (menambah ukuran), sesuai jumlah langkah / step yang dikehendaki.
Fitur manipuasi jendela ini (move dan resize) cukup berguna pada jendela yang tidak memiliki dekorasi / undecorated. Jendela yang undecorated tidak bisa dipindah dan di-resize dengan kursor, tapi masih bisa dipindah dan di-resize dengan fungsi manipulasi jendela lewat keybind.
Resize ukuran jendela.
Mengatur warna latar / background.
Secara bawaan / default, tinywl memiliki warna latar / background berwarna hitam. Saya berpikir akan lebih menarik jika kita bisa mengatur warna latar sesuai keingian kita. Saya selanjutnya mencari referensi dan akhirnya mendapatkan satu contoh penerapan fitur yang saya cari. Saya melihat pada kompositor tinywl_plus dari keshto, dan mengadaptasi fitur untuk mengatur warna latar / background. Warna latar bisa diatur lewat berkas header config_tinywl.h, kita hanya perlu menspesifikasikan warna dalam format RGBA.
Sebagai contoh, warna biru muda.
static const float back_color[] = { 0.0, 0.3, 0.5, 1.0 };
Code language: JavaScript (javascript)
TinyWay dengan warna latar / background hijau muda.
Beralih ke VT / virtual terminal.
Salah satu fitur yang cukup umum untuk window manager serta kompositor wayland adalah fitur beralih / berpindah ke virtual terminal. Sebelum fitur ini saya tambahkan, ketika ingin beralih ke virtual terminal, saya perlu menjalankan perintah ini.
$ sudo chvt 2
Dalam penerapan fitur beralih ke virtual terminal ini, saya mendapatkan saran dan referensi dari Marcus Britanicus beliau adalah pengembang QTgreet yang ternyata menggunakan tinywl juga. Sebenarnya ada beberapa referensi dari kompositor wayland yang lain, tetapi kebanyakan menggunakan pustaka wlroots versi 0.16.x, sedangkan saya menggunakan wlroots versi 0.17.x. Untuk membuat fungsi beralih ke virtual terminal, wlroots versi 0.17.x memiliki format yang berbeda.
Zona eksklusif.
Tinyway memiliki satu area / zona kosong tersendiri, saya menyebutnya sebagai zona eksklusif
. Penambahan fitur zona eksklusif saya maksudkan untuk memberi ruang untuk panel / bar. Kebutuhan akan panel/bar cukup penting bagi saya, karena dengan adanya panel/bar, saya bisa tahu indikator baterai, waktu, menambah launcher. Dengan adanya zona eksklusif, panel / bar tidak akan tertimpa oleh jendela lain ketika jendela lain di-maximize. Zona eksklusif dapat di-toggle on/off dan di-toggle posisinya (atas / bawah).
TinyWay dengan zona eksklusif di bagian atas, untuk menaruh panel/bar.
Pseudo minimize.
Salah satu efek penerapan fitur mengatur warna latar / background adalah fitur pseudo minimize
. Pseudo minimize
atau minimize yang palsu, saya menyebutnya palsu karena memang ini bukan minimize sebenarnya. Fungsi dari pseudo minimize ini sebenarnya adalah mengirim jendela ke posisi paling bawah. Berhubung posisi paling bawah itu masih tertutupi background warna, maka jendela yang dikirim ke posisi paling bawah akan tertutupi oleh background warna dan membuat jendela terkesan tersembunyi / minimize. Dengan bantuan dan saran Consolatis (Salah satu anggota pengembang labwc), jendela yang di-minimize akan dihapus fokus keyboardnya, sehingga jendela tidak akan aktif.
TinyWay: Me-minimize jendela yang aktif.
Rule / aturan untuk jendela spesifik.
Sempat saya singgung tentang panel/bar, panel/bar (yang kompatibel dan berjalan baik di TinyWay) diperlakukan seperti jendela biasa. Jadi panel/bar akan berpotensi akan terkena fungsi manipulasi jendela ketika tidak sengaja mendapatkan fokus. Untuk mengatasi hal tersebut, saya membuat sebuah rule / aturan yang spesifik untuk jendela tertentu, misal untuk panel/bar. Dengan adanya rule / aturan, jendela yang spesifik akan diperlakukan berbeda dengan jendela lain, misal tidak bisa ditutup / close lewat keybind dan sebagainya.
Screenshot / tangkapan layar dengan grim
secara default.
Saya sering membutuhkan dokumentasi berupa gambar dan gambar itu salah satunya saya dapatkan lewat screenshot. Saya merasa fitur screenshot akan cukup menarik jika diterapkan pada window manager / kompositor wayland, jadi saya terapkan saja pada TinyWay. Ada dua pilihan untuk screenshot pada TinyWay, screenshot layar penuh (fullscreen) dan screenshot untuk jendela yang sedang aktif. Untuk screenshot layar penuh, TinyWay akan memanggil tool grim. Sedangkan untuk screenshot jendela yang sedang aktif, TinyWay akan mengambil informasi geometri jendela yang aktif. Properti jendela tersebut akan digunakan grim untuk mengambil gambar sesuai geometri yang diberikan.
Kendala, issue dan bug ?
TinyWay masih dalam masa pengembangan yang cukup aktif, oleh karena itu berbagai kendala, issue dan bug cukup diharapkan / expected. Berikut ini adalah di antaranya :
- Jendela tanpa dekorasi / undecorated tidak bisa di-handle selain dengan keybind.
Jendela yang undecorated hanya bisa di-handle dengan keybind, untuk move dan resize.
- Crash ketika menggunakan virtual keyboard.
- Belum menerapkan / mendukung protokol
layer_shell
. - Belum mendukung berbagi layar / screenshare.
Jika ingin turut serta mencoba dan melaporkan bug / issue, bisa berkunjung ke laman repositori di sini.
Penutup.
Demikian tadi sedikit ulasan tentang TinyWay. Semoga bisa menjadi alternatif kompositor wayland yang sederhana. Jika ada yang memiliki dan sedang mengembangkan projek yang serupa, bisa berbagai di kolom komentar. Terima kasih dan sampai berjumpa pada bahasan selanjutnya !
Leave a Reply