angelspie - gestión de ventanas X11, teclas de acceso rápido globales y más

El nombre es una referencia a Devilspie, una utilidad similar. Es notable por el hecho de que la configuración está escrita en el dialecto Lisp, a pesar de esto tiene capacidades muy limitadas. Especialmente para utilidades como wmctl, etc.





Puede hacer mucho más con la biblioteca wnck e incluso más con gdk.





Para las teclas de acceso rápido globales, usé libkeybinder, solía hacer esto en xlib "desnudo", pero es más conveniente (y portátil). Sin embargo, también se usa xlib / xtest para emular las pulsaciones de botones. Pero estas funciones son opcionales.





Elegí yaml como formato de configuración. Las versiones anteriores usaban una configuración de Python, pero decidí que yaml es más conveniente para los usuarios finales. Además, puede incrustar código en Python y entrar en él.





No entraré en detalles de la implementación. Hay mucha magia y metaprogramación, se genera parte del código.





Prefiero mostrar un ejemplo de una configuración que usa algunas de las capacidades. Por cierto, se pueden generar nuevas reglas desde la línea de comando, tomará el nombre y class_group de la ventana activa.





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

      
      



El ejemplo más simple. Al presionar F1 se emulará un clic con el botón derecho del mouse.





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



Al presionar F2, se hará clic derecho, v (guardar como) y se activará la regla de guardado automático





# 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
      
      



Cuando aparezca la ventana Guardar archivo, recordará el nombre del archivo y lo guardará. Esta regla se desactiva después de 2 segundos. El nombre del archivo se completará automáticamente solo cuando presione F2, no para ninguna ventana.





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. , .





Por cierto. aunque hay mucha magia en el código, creo que tiene una buena arquitectura. Me gustaría escuchar críticas. Pero aquí es importante el equilibrio entre la comprensibilidad del código y su versatilidad / compacidad. El énfasis está en este último.





El código está disponible en github y pypi. Por cierto. ¿Dónde más colocar el programa? Me gustaría transmitirlo a los usuarios de escritorio. Es posible que deba agregar una interfaz gráfica de usuario, pero hay demasiadas funciones allí. Es más conveniente simplemente editar el archivo config.








All Articles