Mouse

用於交換滑鼠主按鈕和輔助按鈕的腳本

  • December 15, 2019

這個答案顯示了交換滑鼠主要和次要按鈕的命令行。但是,我想要一個腳本在每次執行時自動交換滑鼠按鈕。有人可以提示我如何做到這一點,我對 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

應該做的工作。

引用自:https://unix.stackexchange.com/questions/284703