私のThinkPadでタッチパッドを無効にするスクリプトがあります。
#!/usr/bin/env bash
xinput --disable 12
単に無効にする代わりに、タッチパッドの現在の状態を確認し、有効/無効を切り替えるようにスクリプトを調整するにはどうすればよいですか?
答え1
奇妙なことは、xinput
出力自体をフィルタリングできないことです。しかし、私たちはそうですgrep
!
xinput --list-props 12 | grep -q 'Device Enabled.*1$' && echo enabled || echo disabled
答え2
到着スイッチタッチパッドの場合、次のスクリプトでPerlシングルライナーを実行できます。
perl -e '$dev="SynPS/2 Synaptics TouchPad"; `xinput list-props $dev` =~ /^.*Device Enabled.+?(\d)$/m ; $1 ? `xinput --disable $dev` : `xinput --enable $dev`;
短い拡張:
- バックティックはシステム/Linuxコマンドを実行します。
- 「Device Enabled」という行を一致させると、正規表現は行の最後の数字を検索します(0...はオフを意味し、1...はオンを意味します)。
- 正規表現の /m は次のことを意味します。コマンド出力の各行を別々の要素として使用します。それ以外の場合、正規表現の^と$は行ではなく文字列の始まり/終わりを示します。
- 角かっこは一致する数値を変数$ 1に格納します。
- 今残っているのは三項演算子です:「if true」? "do this": "else to this"、つまり $1 が 0 または 1 と等しい場合 -> 無効または有効を意味します。
(「i3」ウィンドウマネージャで使用するには、次のように作成する必要があります。)
bindsym XF86TouchpadToggle exec --no-startup-id perl -e '{`xinput list-props 10` =~ /^.*Device Enabled.+?(\d)$/m and {$1 ? `xinput --disable 10` : `xinput --enable 10`}} '