Mouse
用於交換滑鼠主按鈕和輔助按鈕的腳本
這個答案顯示了交換滑鼠主要和次要按鈕的命令行。但是,我想要一個腳本在每次執行時自動交換滑鼠按鈕。有人可以提示我如何做到這一點,我對 bash 腳本幾乎一無所知。
如果不提供系統
xinput list
上的輸出,沒有人可以提供您可以直接使用的答案。這是因為xinput
可以顯示與*我如何將滑鼠按鈕從終端換成左撇子?*.例如,這是 OSX 上的輸出:
$ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ xquartz virtual pointer id=6 [slave pointer (2)] ⎜ ↳ pen id=8 [slave pointer (2)] ⎜ ↳ cursor id=9 [slave pointer (2)] ⎜ ↳ eraser id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ xquartz virtual keyboard id=7 [slave keyboard (3)]
這是我的 Debian/testing 的輸出:
$ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ VMware VMware Virtual USB Mouse id=7 [slave pointer (2)] ⎜ ↳ VirtualPS/2 VMware VMMouse id=9 [slave pointer (2)] ⎜ ↳ VirtualPS/2 VMware VMMouse id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=8 [slave keyboard (3)]
因此在一個系統上,可能有一個 id 可供選擇(xquartz 虛擬指針),而在另一個系統上則有三種可能性。如果你通讀這些,你會發現這裡引用的例子不是人為的:
鑑於變化(以及模糊的文件
xinput
),您可能無法自動執行有關獲取滑鼠設備 ID 的部分。假設您確實選擇了一個可用的標識符,並且為了討論,將其稱為“12”。腳本可以讀取
xinput get-button-map 12
成一個數組。一些腳本語言提供數組,例如
bash
. 但是有幾個陷阱:
- 在我的 OSX 系統上,它返回一個列表“1 2 3”,而在 Debian 系統上,它返回一個列表“1 2 3 4 5 6 7 8 9 10 11 12”。
- 你必須猜測額外的按鈕是否意味著什麼,並且
- 甚至三個按鈕編號的分配也可能不是明顯的左/中/右。
然後切換按鍵的腳本必須將其狀態保存在某個地方,例如,您的主目錄中的一個文件。一個腳本來管理它必須
- 使用目前按鈕初始化文件
- 根據您的切換按鈕方案更新它(有 3 個有“3!”可能的安排)
假設您有最簡單的配置(和解釋),您可以在腳本中執行以下操作:
#!/bin/sh id=$1 cfg=$HOME/.mousebuttons [ -f "$cfg" ] || xinput get-button-map $id | awk ' { printf "normal: %s\n", $0; }' >$cfg mode=$(awk '{print $1;}' <$cfg) # read and toggle list=$(awk '{printf "%d %d %d\n", $3, $2, $4; }' <$cfg) if [ "x$mode" = "xnormal" ] then mode=reverse else mode=normal fi # update the configuration echo "$mode $list" | awk '{ printf "%s %d %d %d\n", $1, $2, $3, $4; }' >$cfg xinput set-button-map $id $list # show result xinput get-button-map $id
該腳本接受一個參數(滑鼠設備的標識符)。對於給定的範例(並將腳本命名為“toggle-buttons”,使其可執行並將其放入您的
$PATH
):toggle-buttons 12
應該做的工作。