Saya sangat bergantung pada wmctrl untuk beralih antar windows, pada dasarnya untuk menghindari mengetik alt-tab berkali-kali. Saya selalu menggunakan satu ruang kerja tetapi sekarang saya ingin mulai menggunakan lebih dari satu.
Saya bertanya-tanya apakah mungkin untuk mengubah konteks wmctrl sehingga ketika saya mengetik wmctrl -l
, hanya jendela dari ruang kerja saat ini yang ditampilkan, bukan semua jendela dari semua ruang kerja.
Misalnya, dengan asumsi saya membuka jendela Firefox di ruang kerja 1. Saya memiliki pintasan keyboard di ctrl+alt+f
yang mengeksekusi wmctrl -a firefox
, yang beralih ke Firefox. Jika saya membuka jendela Firefox baru di ruang kerja 2 dan ketik ctrl+alt+f
, itu akan beralih ke jendela di ruang kerja 1, yang bukan yang saya inginkan.
Adakah saran/ide tentang cara mengatasi ini?
EDIT :Saya menggunakan compiz (Unity)
Jawaban yang Diterima:
Jika Anda menggunakan Compiz (jalankan wmctrl -m
jika tidak yakin), wmctrl hanya melihat 1 desktop (bidang ke-2 dari wmctrl -l, yaitu 0) tetapi Anda dapat menggunakan opsi geometri (-G) untuk mengetahui jendela apa pada desktop virtual apa. Semua jendela di desktop Anda saat ini akan memiliki posisi x antara 0 dan lebar layar Anda. Sama untuk posisi y antara 0 dan tinggi layar Anda.
Jadi Anda bisa menggunakan sesuatu seperti itu
#!/bin/bash
SCREEN_W=$(xwininfo -root | sed -n 's/^ Width: (.*)$/1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^ Height: (.*)$/1/p')
NAME='Navigator.Firefox'
wmctrl -xlG | awk -v W="$SCREEN_W" -v H="$SCREEN_H" -v NAME="$NAME" '$7==NAME && $3>=0 && $3<W && $4>=0 && $4<H {print $1}' | while read WINS; do wmctrl -ia "$WINS"; done
exit 0
Anda dapat membuat hardcode lebar dan tinggi layar Anda jika Anda mau, dan NAME jika Anda menginginkan satu baris.
Saya tidak yakin bagaimana Anda ingin menangani beberapa jendela yang cocok dengan NAME. Itu akan memfokuskan mereka semua.
Untuk metacity, nomor desktop windows dapat ditemukan menggunakan wmctrl -l
dan menangkap bidang ke-2.