今日 Reddit で見付けた面白ネタ。
押したら golang の
— mattn (@mattn_jp) September 13, 2018
if err != nil {
}
を入力するボタン。便利やん。https://t.co/wfnOnSS48r pic.twitter.com/R2Ot9T3jt4
簡単そうだなと思ったので作ってみた。
とは言っても家にボタンらしきデバイスが無いので、カメラの自動シャッターボタンで代用。ダイソーで300円くらいで売ってます。
Linux で User Input (入力キャラクタデバイス) は /dev/input/ 配下のデバイスファイルを介してやり取りされます。以前この uinput を簡単に扱えるデーモンを作ったのでそちらを使います。
GitHub - mattn/uinputd: uinput launcher
uinputd uinput daemon Usage Run uinputd with specifying configuration file like below. -1 uinputd A f...
https://github.com/mattn/uinputd
まずは空の ~/.config/uinputd
というファイルを作り uinputd -v
で起動します。するとデバイス名と物理デバイス名が表示されるので ~/.config/uinputd
を YAML で以下の様に設定します。
- device: XX:XX:XX:XX:XX:XX
release: echo 押した
再度 uinputd を起動し、デバイスとなるボタンを押すと「押した」と表示されると思います。ここまで出来たらあとは、フォアグラウンドウィンドウで動いている gvim に対して if err != nil...
を送りつけるコマンドを作ります。
#!/bin/bash
PROC=$(readlink /proc/$(xdotool getwindowfocus getwindowpid)/exe)
NAME=$(basename $PROC)
if [[ $NAME = "vim"* ]] || [[ $NAME = "gvim"* ]]; then
$PROC --servername GVIM --remote-send "if err != nil {<nl>}<esc>O"
fi
これを ~/bin/vim-iferr
というファイルに保存して実行権限を付け、先程の ~/.config/uinputd に設定します。
- device: XX:XX:XX:XX:XX:XX
release: /home/mattn/bin/vim-iferr
自分で作ってみた。 pic.twitter.com/xZ9HuHiPcF
— mattn (@mattn_jp) September 13, 2018
簡単ですね。
追記
AB Shutter 3 のデフォルトのキーマッピングが邪魔だという方は以下のファイルを作ればok
/etc/udev/hwdb.d/90-sbutton.hwdb
evdev:input:b0005v248Ap8266*
KEYBOARD_KEY_c00e9=unknown
KEYBOARD_KEY_70028=unknown
ベンダーID(v)や、プロダクトID(p)はご自分で調べて下さい。