Apakah mungkin untuk menetapkan bahasa keyboard default untuk aplikasi tertentu? Saya tahu bahwa ada opsi untuk selalu memulai aplikasi dengan bahasa keyboard standar tetapi ini bukan yang saya inginkan.
Saya mencari sesuatu yang mirip dengan "ruang kerja tetap" yang dapat Anda atur menggunakan CompizConfig (Anda mengatur Chrome untuk selalu terbuka di X1Y1, terminal di X2Y1 dll). Sesuatu di mana saya akan mengatur Chrome: Ceko, terminal: Inggris, Spotify: Inggris, ...
Jawaban:
pengantar
Skrip di bawah ini menetapkan bahasa untuk setiap program yang ditentukan pengguna, sesuai dengan posisi bahasa itu di menu bahasa. Misalnya, jika pesanan saya adalah: Inggris (1), Cina (2), dan Rusia (3), saya dapat mengatur Firefox untuk memiliki bahasa 2, terminal untuk memiliki bahasa 1, dan LibreOffice untuk memiliki bahasa 3.
Skrip terdiri dari dua bagian: bagian pertama adalah skrip aktual yang berfungsi, skrip kedua berfungsi sebagai elemen pengontrol. Idenya adalah untuk menjalankan skrip pengaturan bahasa sebagai aplikasi start-up dan kapan pun Anda perlu mengubah bahasa secara manual - klik dua kali pintasan ke skrip pengontrol.
Prasyarat
wmctrl
program dengansudo apt-get install wmctrl
.Naskah
Script Pengendali
File peluncur (.desktop) untuk skrip set-lang.sh
File peluncur (.desktop) untuk set-lang-controller.sh
Membuat skrip berfungsi
bin
. Anda dapat melakukannya di manajer file atau menggunakan perintahmkdir $HOME/bin
di terminalbin
folder buat dua file:set-lang.sh
danset-lang-control.sh
. Simpan skrip keset-lang.sh
dan skrip pengontrol keset-lang-control.sh
. Jadikan kedua skrip dapat dieksekusisudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
file. Satu adalahset-lang.desktop
. Harus ditempatkan di.config/autostart
direktori tersembunyi . Yang kedua adalahset-lang-controller.desktop
, bisa diletakkan dibin
folder Anda . Selanjutnya seret dan sematkan ke peluncurset-lang-controller.desktop
file. Ini akan menjadi jalan pintas untuk menghentikan sementara dan melanjutkan eksekusi skrip.Perhatikan bahwa baris tersebut
Exec=
harus diubah agar nama pengguna Anda yang sebenarnya ada di jalur ke skrip (karena itu adalah direktori home Anda yang sebenarnya). Misalnya, milik sayaExec=/home/serg/bin/set-lang.sh
Penjelasan dan penyesuaian:
Script itu sendiri berjalan dalam infinite while dan memeriksa jendela aktif saat ini. Jika jendela aktif saat ini cocok dengan salah satu opsi dalam struktur kasus, kami beralih ke bahasa yang sesuai. Untuk menghindari pengaturan konstan, setiap bagian dari struktur case memiliki pernyataan if yang memeriksa apakah bahasa telah diatur ke nilai yang diinginkan.
Mengklik ganda pada peluncur untuk
set-lang-controller.sh
akan memeriksa statusset-lang.sh
skrip; jika skrip sedang berjalan - skrip akan dijeda, dan jika skrip dijeda akan dilanjutkan. Pemberitahuan akan ditampilkan dengan pesan yang sesuai.Untuk menyesuaikan skrip, Anda dapat membuka aplikasi yang diinginkan, menjalankan
wmctrl -lx
dan mencatat kolom ketiga - kelas jendela. Output sampel:Pilih kelas jendela yang sesuai untuk setiap program. Selanjutnya, buka bagian skrip yang memungkinkan penyesuaian dan tambahkan dua entri untuk PROG_CLASS dan LANG. Selanjutnya tambahkan entri yang sesuai dalam struktur kasus.
Misalnya, jika saya ingin menambahkan, LibreOffice's Writer, saya membuka jendela LibreOffice Writer, pergi ke terminal dan jalankan
wmctrl -lx
. Ini akan memberi tahu saya bahwa jendela Writer memiliki kelaslibreoffice.libreoffice-writer
. Selanjutnya saya akan pergi ke script, tambahkanPROG_CLASS_4=libreoffice.libreoffice-writer
danLANG4=3
di area yang sesuai. Perhatikan nomor yang cocok 4. Selanjutnya, pergi ke struktur kasus, dan tambahkan entri berikut antara yang terakhir;;
danesac
:Sekali lagi, perhatikan tanda $ dan nomor yang cocok 4.
Juga, jika skrip berjalan sebagai item autostart dan Anda ingin menghentikannya sementara untuk menyesuaikannya, gunakan
pkill set-lang.sh
dan lanjutkan dengannohup set-lang.sh > /dev/null 2&>1 &
Catatan kecil: cara lain untuk mengetahui kelas jendela untuk suatu program (hal-hal yang berjalan sebelum braket putaran tunggal dalam struktur kasus) adalah dengan menggunakan ini
xprop
danawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
sumber
kill -STOP $(pgrep set-lang.sh)
dan kemudian melanjutkan skrip dengankill -CONT $(pgrep set-lang.sh)
. Dengan begitu Anda dapat menjeda, beralih bahasa secara normal, dan kemudian melanjutkan.~/bin
tidak memerlukan path (atau ekstensi, karena itu$PATH
setelah login ulang, lihat: lintian.debian.org/tags/script-with-language-extension .html ), dan Anda dapat menggabungkan stop / start dalam satu.desktop
file; baik dalam daftar cepat atau fungsi sakelar. terlihat cukup sempurna untukku.Anda dapat menginstalnya
gxneur
dengan menjalankanPerangkat lunak ini dapat secara otomatis beralih tata letak, tetapi tidak sempurna dengan itu.
Tetapi memiliki alat yang sangat bagus untuk mengatur switch tata letak manual.
Anda dapat melakukan apa yang Anda inginkan. Untuk mengatur tata letak spesifik untuk aplikasi tertentu.
sumber
Script di bawah ini adalah versi yang diedit dari ini , yang diposting sebagai solusi serupa untuk satu aplikasi (
gnome-terminal
) beberapa waktu lalu.Script ini sebagian ditulis ulang untuk pertanyaan ini, untuk dapat menggunakannya untuk secara otomatis mengatur bahasa untuk beberapa aplikasi.
Cara menggunakan dalam praktik; secara otomatis ingat mengatur bahasa per aplikasi
Jika skrip dimulai untuk pertama kalinya, bahasa saat ini dianggap sebagai bahasa default, yang diingat dalam file tersembunyi:
~/.lang_set
.Maka penggunaannya sederhana: jika Anda menjalankan mis
gedit
di jendela paling depan, dan mengatur bahasa yang berbeda, bahasa itu secara otomatis terhubunggedit
sejak saat itu, sampai Anda mengubah bahasa lagi dengangedit
di depan.Jumlah bahasa / aplikasi tertentu pada prinsipnya tidak terbatas; jalankan saja aplikasi dan atur bahasa dengan jendela aplikasi di depan. Aplikasi akan secara otomatis diatur dan diingat tanpa mengedit kode.
Didorong acara?
Meskipun skrip berjalan dalam satu lingkaran, konsumsi sumber daya minimal. Event driven berarti acara tersebut adalah perubahan di jendela paling depan. Saya tidak melihat opsi lain selain "memata-matai" jendela paling depan selain memeriksa satu lingkaran.
Naskah
Cara mengatur
Script menggunakan keduanya
xdotool
danwmctrl
:Salin skrip di atas ke dalam file kosong, simpan sebagai
set_language.py
Tes-jalankan dengan perintah:
Jika semua berfungsi seperti yang diharapkan, tambahkan ke Aplikasi Startup: Tambah ke Aplikasi Startup: Dash> Aplikasi Startup> Tambah. Tambahkan perintah:
sumber