この名前は、同様のユーティリティである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を追加する必要があるかもしれませんが、そこには機能が多すぎます。設定を編集するだけの方が便利です。