angelspie - manajemen jendela X11, global, dan lebih banyak hotkey

Nama tersebut mengacu pada devilspie, utilitas serupa. Perlu dicatat bahwa konfigurasi ditulis dalam dialek Lisp, meskipun ini memiliki kemampuan yang sangat terbatas. Terutama untuk utilitas seperti wmctl, dll.





Anda dapat melakukan lebih banyak dengan perpustakaan wnck, dan bahkan lebih banyak lagi dengan gdk.





Untuk hotkey global, saya menggunakan libkeybinder, saya biasa melakukan ini pada xlib "telanjang", tetapi lebih nyaman (dan portabel). Namun, xlib / xtest juga digunakan - untuk meniru penekanan tombol. Tetapi fungsi-fungsi ini opsional.





Saya memilih yaml sebagai format konfigurasi. Versi yang lebih lama menggunakan konfigurasi python, tetapi saya memutuskan bahwa yaml lebih nyaman untuk pengguna akhir. Selain itu, Anda dapat menyematkan kode dalam python dan sh ke dalamnya.





Saya tidak akan membahas detail implementasinya. Ada banyak keajaiban dan metaprogramming, beberapa kode dihasilkan.





Saya lebih suka menunjukkan contoh konfigurasi yang menggunakan beberapa kemampuan. Omong-omong, aturan baru dapat dibuat dari baris perintah, itu akan mengambil nama dan class_group dari jendela aktif.





click_with_F1:
  if:
    key: F1
  then:
    click: 3

      
      



Contoh paling sederhana. Menekan F1 akan meniru klik tombol kanan mouse.





save_image:
  if:
    key: F2
    class_group: Google-chrome
  then:
    - click: 3
    - sleep: 0.1
    - press: v
    - enable: autosave
      
      



Menekan F2 akan klik kanan, v (save as) dan aktifkan aturan simpan otomatis





# Would type "filename" and press alt+s to save when Save file dialog of chrome appears. But only after we pressed F2.
autosave:
  if:
    name: Save File
    class_group: Google-chrome
    enabled: false
  then:
    - press: f i l e n a m e Alt+S
# Disable autosaving every 2 secs.
timer_test:
  if:
    event: timer 2
  then:
    disable: autosave
      
      



Ketika jendela Save File muncul, ia akan mengingat nama file dan menyimpannya. Aturan ini dinonaktifkan setelah 2 detik. Nama file akan terisi otomatis hanya ketika Anda menekan F2, bukan untuk jendela apa pun.





print_debug:
  if:
      event: never
  then:
    debug:
    
win_changed:
  if:
    event: active_window_changed
  then:
    echo: "window changed {name} {class_group}"
switched_to_xterm:
  if:
    name:
      contains: mc
    class_group: XTerm
  then:
    - maximize:
    - disable: win_changed
    - trigger: print_debug
not_in_mc:
  if:
    or:
      class_group:
        ne: xterm
      name:
        contains_not: mc
  then:
    - sh: date
    - py: from datetime import datetime;print(datetime.now())

      
      



print_debug trigger, . . wnck gdk. wnck. if , sh.





- . . , . , .





, , - mpv. , .





Ngomong-ngomong. meskipun ada banyak keajaiban dalam kodenya, saya pikir itu memiliki arsitektur yang bagus. Saya ingin mendengar kritik. Tapi di sini keseimbangan antara pemahaman kode dan keserbagunaan / kekompakannya penting. Penekanannya adalah pada yang terakhir.





Kode tersedia di github dan pypi. Ngomong-ngomong. di mana lagi untuk menempatkan program? Saya ingin menyampaikannya untuk pengguna desktop. Anda mungkin perlu menambahkan gui, tetapi ada terlalu banyak fitur di sana. Lebih mudah untuk hanya mengedit konfigurasi.








All Articles