angelspie-X11ウィンドウ管理、グローバルおよびその他のホットキー

この名前は、同様のユーティリティであるdevilspieへの参照です。設定がLisp方言で書かれているという事実は注目に値しますが、それにもかかわらず、機能は非常に限られています。特にwmctlなどのユーティリティの場合。





wnckライブラリを使用すると、さらに多くのことができます。gdkを使用するとさらに多くのことができます。





グローバルホットキーの場合、私はlibkeybinderを使用しました。これは、「ベア」xlibで実行していましたが、より便利です(そして移植性があります)。ただし、xlib / xtestも使用されます-ボタンの押下をエミュレートします。ただし、これらの機能はオプションです。





設定形式としてyamlを選択しました。古いバージョンではpythonconfigを使用していましたが、エンドユーザーにとってはyamlの方が便利だと判断しました。さらに、Pythonにコードを埋め込んでshすることができます。





実装の詳細については説明しません。多くの魔法とメタプログラミングがあり、コードの一部が生成されます。





むしろ、いくつかの機能を使用する構成の例を示したいと思います。ちなみに、新しいルールはコマンドラインから生成でき、アクティブウィンドウの名前とclass_groupを取得します。





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

      
      



最も単純な例。F1を押すと、マウスの右ボタンクリックがエミュレートされます。





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



F2キーを押すと、右クリックしてv(名前を付けて保存)し、自動保存ルールをアクティブにします





# 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
      
      



[ファイルの保存]ウィンドウが表示されると、ファイル名が記憶されて保存されます。このルールは2秒後に無効になります。ファイル名は、F2キーを押したときにのみ自動入力され、ウィンドウは自動入力されません。





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





ところで。コードには多くの魔法がありますが、アーキテクチャは優れていると思います。批判を聞きたい。しかし、ここでは、コードのわかりやすさとその汎用性/コンパクトさのバランスが重要です。後者に重点が置かれています。





コードはgithubとpypiで入手できますところで。プログラムを他にどこに配置しますか?デスクトップユーザーにも伝えたいと思います。GUIを追加する必要があるかもしれませんが、そこには機能が多すぎます。設定を編集するだけの方が便利です。








All Articles