2018/09/14

Recent entries from same category

  1. Go言語で Lisp 処理系を作った。
  2. Go 言語のスライス挿入ベンチマーク
  3. Go 言語で変数のシャドウイングを避けたいなら shadow を使おう。
  4. Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック
  5. Oracle Cloud Function でしりとりした。

今日 Reddit で見付けた面白ネタ。

簡単そうだなと思ったので作ってみた。

とは言っても家にボタンらしきデバイスが無いので、カメラの自動シャッターボタンで代用。ダイソーで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

簡単ですね。

追記

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)はご自分で調べて下さい。

Bluetooth3.1 IOS Androidスマートフォン タブレットPC カメラシャッターリモコンコントロール ブラック Bluetooth3.1 IOS Androidスマートフォン タブレットPC カメラシャッターリモコンコントロール ブラック

ノーブランド エレクトロニクス / ¥276 (1970年01月01日)
 
発送可能時間:

Posted at by