Bagaimana Anda menerapkan tata letak dengan autostarting aplikasi di window manager i3?

23

Ini adalah tindak lanjut dari pertanyaan sebelumnya tentang cara melakukan autostart aplikasi pada ruang kerja individual dengan window manager i3 dan apa yang dapat dan tidak bisa dilakukan di dalam ~/.i3/configfile konfigurasi.

Pertama, solusi yang disediakan berdasarkan dokumentasi Linux Arch dan pembaruan yang disediakan oleh op di mana ia mendorong logika lebih lanjut:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

Yang juga menarik adalah pertukaran ini tentang memanfaatkan sebagian dari itu secara langsung di baris perintah tanpa menduplikasi:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

Tapi saya belum pernah melihat konfigurasi yang autostarts banyak windows / aplikasi di setiap ruang kerja sesuai dengan tata letak vertikal atau horizontal yang diinginkan. Tujuan saya adalah untuk memulai kembali konfigurasi sederhana ini yang saya gunakan:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

Jadi itu dimulai dengan sesuatu seperti ini di configfile:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

Tetapi bagaimana Anda bisa mencapai tipe tata letak dan pemisahan vertikal / horizontal yang Anda inginkan? Saya mencoba, tetapi tidak jelas bagaimana Anda "mencampur" eksekusi dan tata letak. Sintaks terasa aneh untuk memulai karena Anda mengeksekusi i3-imgdalam konfigurasi i3. Apakah Anda menggunakan split h(atau v) - layout split v- exec layout split v- focus down(atau kanan) di antara setiap execpanggilan ??

Untuk ruang kerja tunggal, konfigurasi memulai semua aplikasi baik secara vertikal maupun horizontal dan sepertinya saya tidak dapat memengaruhi tata letak - atau splitperintah terakhir dalam rantai memutuskan apakah windows ditambahkan secara vertikal atau horizontal. i3-msgtampaknya mengabaikan bagian dari perintah yang tidak diformat dengan benar dalam beberapa kasus sehingga sulit untuk di-debug. Ini semakin diperparah oleh fakta bahwa Anda benar-benar harus keluar dari X dan startxlagi setiap kali untuk memverifikasi hasil karena hanya menyegarkan konfigurasi dengan mod+shift+Rtidak akan memotongnya bahkan jika Anda menutup semuanya di setiap ruang kerja.

Apa cara yang tepat untuk mengkonfigurasi ini? Adakah yang punya solusi yang mengimplementasikan sesuatu seperti itu? The dokumentasi cukup bagus tetapi tidak memberikan bahwa saya dapat melihat contoh rinci yang bercampur pelaksanaan dan tata letak pada beberapa ruang kerja.

Komunitas
sumber
Juga memperluas ini .
Seseorang tidak perlu menggunakan FF atau urxvt untuk memberikan solusi. Tidak ada yang istimewa tentang program-program itu sejauh yang saya tahu sehingga seseorang dapat mereproduksi tata letak # 2 dengan program apa pun, menyimpan file json, menghapusnya, melihat apakah itu dapat diluncurkan dari file konfigurasi saat login, maka cukup ganti nama program sebelum mengirimkan jawaban ...
dapatkah Anda mengunggah bagian dalam file i3 Anda dalam kombinasi dengan layout json yang disimpan / dikembalikan? Saya memiliki masalah yang sama .. tapi jangan mulai bekerja. Apakah Anda menggunakan multi display dalam file config / json Anda?

Jawaban:

11

Saya percaya bahwa Anda mencari fitur hemat tata letak baru yang diperkenalkan di i3 v4.8 (2014-06-15). Dokumentasi yang ditautkan tampaknya cukup menyeluruh.

Mengutip dari dokumentasi:

Penyimpanan / pemulihan tata letak memungkinkan Anda memuat file tata letak JSON sehingga Anda dapat memiliki tata letak dasar untuk mulai bekerja setelah menyalakan komputer Anda. Kasus penggunaan dinamis juga muncul di pikiran: jika Anda sering (tetapi tidak selalu!) Memerlukan tata letak terminal dengan perintah ping / traceroute untuk mendiagnosis masalah jaringan, Anda dapat dengan mudah mengotomatiskan membuka jendela ini hanya dalam tata letak yang tepat.

... dan catatan rilis :

tl; dr: ekspor 1 tata letak Anda saat ini sebagai file JSON, muat ke dalam sesi i3 baru, dapatkan jendela placeholder yang akan diganti oleh aplikasi yang sebenarnya setelah Anda memulainya.


1. Anda mungkin memerlukan paket perl-anyevent-i3 dan perl-json-xs untuk menggunakan i3-save-treeutilitas.

damien
sumber
3
Fitur tata letak sangat menantang untuk digunakan. Konsep placeholder window mereka yang "menelan" aplikasi berarti bahwa jika Anda ingin berkali-kali aplikasi yang sama seperti lxterminalatau urxvtuntuk satu ruang kerja, maka Anda harus membedakannya menggunakan --name somethingketika Anda mengeksekusinya di .i3 / config. Contoh dalam dokumen ini berfungsi tetapi ketika saya menggunakan ekspor dari salah satu ruang kerja saya, sepertinya saya tidak dapat membuatnya berfungsi. Anda menggunakan kelas untuk nama dan contoh untuk apa yang Anda gunakan dengan --name. Dalam hal ini saya hanya bisa berharap untuk alat gui dengan serius, karena format json memiliki banyak tanda kurung di dalamnya !!
1
Saya sekarang diperbarui ke 4,8 dan saya cukup senang dengan fitur baru ini. Saya selalu memiliki beberapa masalah dengan memulai segalanya dengan andal saat masuk dari .i3/configjuga dengan versi sebelumnya, tetapi begitu saya masuk dengan benar, semuanya bekerja dengan baik. Apa yang saya lakukan adalah mengatur beberapa tata letak dan menyimpannya, kemudian hanya mengedit variabel kelas dari file json. Maka sesuatu seperti i3-msg workspace 2\; append_layout mylayout.json\;dan kemudian i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditharus mengembalikan tata letak pertama yang Anda inginkan. // Terima kasih telah meningkatkan jawaban saya, btw.
damien