ErgoDoxEZによるネズミを動かす鍵となるものは

一昔前は、マウスなんて存在せずにコンピュータを使っていた。
他に使う入力装置は、キーボードだけだ。
これを聞けば、Vimの話かと思うかも知れないが、今回は違う。
キーボードがマウスの代わりになる話だ。

# ネズミの鍵たち
マウスキーは、マウスの代わりになるキーコードのことで、マウスポインタを動かすだけでなく、最大五つのボタンも用意しているため、マウスを持ち歩く必要がなくなりそうな予感が・・・。
移動する場合は、外部キーボードより、外部マウスとノートパソコンなどを持ち歩くよね・・・。

今回のマウスキーの仕組みは、[X Window System](https://ja.wikipedia.org/wiki/マウスキー "ウィキペディア")を使っているとのこと。

通常のキーボードでもテンキーがマウスの代わりになる？


# 2種類の使い方
2つの方法で使える。

1. rules.mkを使う。
1. キーマップにキーコードを設定する。

## rules.mk
これを設定することで、どのように使えるようになるのか分からない。

```ErgoDoxEZ:rules.mk
MOUSEKEY_ENABLE = yes
```

## キーコードの設定
これが一般的だろう。

### マウスカーソル移動
これも説明不要なぐらい普通に設定できるはず。

`KC_MS_UP`：マウスカーソルを上に移動する(エイリアス：`KC_MS_U`)。
`KC_MS_DOWN`：マウスカーソルを上に移動する(エイリアス：`KC_MS_D`)。
`KC_MS_LEFT`：マウスカーソルを上に移動する(エイリアス：`KC_MS_L`)。
`KC_MS_RIGHT`：マウスカーソルを上に移動する(エイリアス：`KC_MS_R`)。

### マウスボタン
クリックするのは、普通は左クリック・右クリックの2種類だ。
ホイール付きのマウスが一般的だが、そのホイールをクリックできるものも一般的だろう。
あとは何かな・・・。

`KC_MS_BTN1`：マウスの左クリック(エイリアス：`KC_BTN1`)。
`KC_MS_BTN2`：マウスの左クリック(エイリアス：`KC_BTN2`)。
`KC_MS_BTN3`：マウスの中クリック(エイリアス：`KC_BTN3`)。ホイールボタンのクリック
`KC_MS_BTN4`：マウスボタンの機能不明(エイリアス：`KC_BTN4`)。
`KC_MS_BTN5`：マウスボタンの機能不明(エイリアス：`KC_BTN5`)。

### マウスのホイール操作
クリックとは違う操作方法だ。

`KC_MS_WH_UP`：ホイールを上げる(エイリアス：`KC_WH_U`)。要は、先頭に近づく動きをする。分かりにくい例えは、Excelで言えば、左の番号が若くなる。ブラウザで言えば、タイトルに移動する。(分かりやすい例えがあれば教えて欲しい)
`KC_MS_WH_DOWN`：ホイールを下げる(エイリアス：`KC_WH_D`)。末尾(後尾?)に向かって移動する。上記の`KC_MS_WH_UP`とは逆の動きをする。

以下2種類は最も欲する機能(水平スクロール)なのだが、動かない。いわゆるチルトホイールと言われるホイールだ。
`KC_MS_WH_LEFT`：ホイールを左に傾ける(エイリアス：`KC_WH_L`)。Excelで言えば、左に移動する。アルファベットがAに近づく。
`KC_MS_WH_RIGHT`：ホイールを右に傾ける(エイリアス：`KC_WH_R`)。Excelで言えば、右に移動する。アルファベットのAから遠ざかる。

XWindowsシステムを理解している人であれば、使いこなせるのかも知れない。

### マウスのアクセラレーション
何を言っているのか分からない。

`KC_MS_ACCEL0`：アクセラレーションを0にする。
`KC_MS_ACCEL1`：アクセラレーションを1にする。
`KC_MS_ACCEL2`：アクセラレーションを2にする。

動かしたが、変化したように見えなかった。

# マウスカーソルの移動速度
標準では、以下の通りになっている(おぼろげな理解度)。

[遅延](#mousekey_delay)：300ミリ秒	MOUSEKEY_DELAY
[間隔](#mousekey_interval)：50ミリ秒	MOUSEKEY_INTERVAL
[最高速度](#mousekey_max_speed)：10ミリ秒	MOUSEKEY_MAX_SPEED
[最大時間](#mousekey_time_to_max)：20ミリ秒	MOUSEKEY_TIME_TO_MAX
[ホイールの最大速度](#mousekey_wheel_max_speed)：8ミリ秒	MOUSEKEY_WHEEL_MAX_SPEED
[ホイールの最大時間](#mousekey_wheel_time_to_max)：40ミリ秒	MOUSEKEY_WHEEL_TIME_TO_MAX

値を極端に大きくした場合、対象はC言語なので、許容できる値を簡単に超えてしまい、コンパイルエラーになるかも知れない。
気をつけること。

## MOUSEKEY_DELAY
キー押下してから実際にマウスカーソルが反応するまでの反応速度のこと。
値を大きくすれば、反応が遅れる(遅延が大きくなる)。

遅延させてうれしいことは、細かい作業がしやすくなることだろうか。
しかし、0で十分だと思う。遅くするにしても10とかの二桁までだろう。

## MOUSEKEY_INTERVAL
キー押下してから実際にマウスカーソルが反応するまでの待機時間のこと。
値を大きくすれば、待機時間が増えるため、ゆっくりしたマウスカーソル移動になる。
逆に、値を小さくすれば、マウスカーソルが素早く動く。

たとえて言えば、ゲーミングマウスのDPIの値と逆の動きをする。
DPIでは、値を大きくすれば、マウスカーソルは素早く動く。
今回の設定値を大きくすれば、マウスカーソルはゆっくり動く。
そんな感じかな。




## MOUSEKEY_MAX_SPEED
設定した値の速度で移動する。
大きな値を設定した場合、まさに目にもとまらぬ早さで動く(こっちがDPIの例に相応しいか)。
しかし、使い方がよく分からない。

DELAYとINTERVALの値を大きくした場合、結局今回の設定値を大きくしても遅く動くようになってしまった。



## MOUSEKEY_TIME_TO_MAX
キーを押し続ける時間分早くマウスカーソルが移動するようになる？
原理はよく分からないが、値を大きくした場合、それなりに早く動くように思う。
しかし、値を小さくした場合、マウスカーソルの動きを目視できないほど、すさまじい勢いで移動する。

どういうこと!?

個人的には、大きい値の方が好みだと言える。



## MOUSEKEY_WHEEL_MAX_SPEED
マウスホイールの移動を設定する。

値が小さい場合、移動は小さい。ブラウザ移動で言えば、1行ずつ移動する。
値を大きくした場合、巨人の大ジャンプをするかのごとく移動するため、お勧めしない。
~~界王拳10倍~~ 値を10倍にすれば、移動量も10倍になる(当たり前か)。



## MOUSEKEY_WHEEL_TIME_TO_MAX
マウスホイールの移動時間を設定する。
上記のSpeed設定と違いがよく分からない。

値を小さくした場合、移動が早くなるため、移動距離は大きい。
その逆に、値を大きくした場合、ゆっくり動くため、移動距離は小さい。

個人的には値を大きくしたい。











# 感想
調べたはいいが、あまり使わないだろうな。そもそも設定は理解できていない。
マウスがないときのいざという隠し球として使うぐらいだろう。
それを考えれば、キーボードを使い始める前に、時間を掛けて設定しておくだけで十分だろう。
必要があれば使うだろうが、それでも設定したことを忘れそうな気がする。

横スクロールが有効であれば活用価値はあったのだが・・・。


以上だ。