絶対理想主義!

ギークだったりオタクな話題を綴っていくつもりが、今の所備忘録と化してしまっている。

ノートPCのキーバインドカスタマイズ

七段キーボードを搭載したThinkPad X200sからX1Carbonに買い替えたけど、音量調整がFnに統合されてしまってシームレスに操作でできない。(Fnキーを押してからF1~F3で操作するか、ホームポジションから手を動かしてFnと同時押しする。同時押しも離れてて押しにくい) また、PrtScが変な位置にあったりAppキーが無かったりしてやはり(デスクトップ向けのキー配列に慣れた人間にとっては)とってもやりづらい。 今まで気づかなかったけど、明るさも片手で調整できたら楽そう。

x1 carbon 2018 キー配列 - Google 検索

この際キーバインドをカスタマイズしてX200s以上の操作性を実現しようじゃないかということで色々弄った。やったことは大した内容じゃないけど、最適化されたキーバインドを考えるのに結構時間がかかった。

ちなみに実際にやったことは、web上のtipsの組み合わせなので設定方法の詳説はしない。リンクを貼ったのでそっちを見てね。

さて、ここからキーバインドを考える。極力刻印と操作は一致させたいけどFn(1~12)キーは使うので単純な置換は使えない。 そこで私はまず使わない「半角/全角」、「カタカナひらがな」キーとの組み合わせで実現することにした(IMEのON/OFFは変換キー/無変換キーに割り当てている)。 ただそのまま組み合わせようとすると、元の半角/全角キーとしての機能が干渉してきてしまう。 そこで調べているとF13やF14というまあ使われないであろうキーを割り当てて回避するのが良さそうだ。

単純なキーの置換はChangeKeyというアプリで行える。
「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜

そして同時押しのキーバインドカスタマイズにはAutoHotKeyを利用するのが良いみたい。
AutoHotkey Downloads

全部AutoHotKeyでやればいいじゃないかという気もするが、確かAutoHotKeyでは触れないキーがあったとかじゃないかな。(忘れちゃった) この2つでキー周りの大抵のことはカスタマイズできそう。(除くFnキー。FnキーはBIOSで弄れなかったら無理

ただ、照度はAutoHotKeyから直接扱うことができずちょっと困った。調べているとGPD WIN向けのスクリプトを書いておられる方がいたのでそちらを流用した。

ついでにCapSLockをCtrlに変更したり、ホームポジションのままPgUpしたりPgDnしたり、linuxみたいにカーソル移動できるようにしたりした。

これでX200sの操作性超えられたんじゃないかな。 こういうカスタマイズって結局慣れの問題なんじゃないかって思うことも結構あったけど、いざカスタマイズしてない環境に戻ってしばらく触って操作自体は慣れてきても、全体の操作効率は悪いんだよね。とはいえ効率化するはずが効率化作業で人生終わってた、みたいにならないようには気をないとねwww

以下参考先と設定例。 AutoHotKeyでのスクリプトは長いので最後にある。

  • 参考

GPD WINの画面輝度をあれこれするAutoHotkeyスクリプト - Qiita

[Windows 10] 矢印キーに指を伸ばすエンジニアはザコ!とバカにされた(Change KeyとAutoHotkeyの導入) - Qiita

  • ChangeKeyでの設定

f:id:shino_asaka:20190303190733p:plain:w300

;; カタカナひらがな + j,i,l,k= ←↑→↓
F13 & h:: Send, {Blind}{Left}       ; 左キー
F13 & l:: Send, {Blind}{Right}      ; 右キー
F13 & j:: Send, {Blind}{Up}     ; 上キー
F13 & k:: Send, {Blind}{Down}       ; 下キー

;; F13 + Home,End = PageUp, PgDn
F13 & Home::Send {PgUp}
F13 & End::Send {PgDn}

;; 音量
F14 & F1::Send {Blind}{Volume_Mute}
F14 & F2::Send {Blind}{Volume_Down}
F14 & F3::Send {Blind}{Volume_Up}



;; 照度
;; https://qiita.com/diaphragm/items/9769c79789d7a9958f8a

prev_brightness := GetBrightness()

GetBrightness()
{
    WMI := "winmgmts:{impersonationLevel=impersonate}!\\.\root\WMI"
    MonitorBrightness := ComObjGet(WMI).ExecQuery("SELECT * FROM WmiMonitorBrightness WHERE Active=TRUE")

    for i in MonitorBrightness {
        brightness := i.CurrentBrightness
        break
    }

    Return, %brightness%
}

SetBrightness(value)
{
    WMI := "winmgmts:{impersonationLevel=impersonate}!\\.\root\WMI"
    MonitorBrightnessMethods := ComObjGet(WMI).ExecQuery("SELECT * FROM wmiMonitorBrightNessMethods WHERE Active=TRUE")

    if value < 0
        value := 0
    for i in MonitorBrightnessMethods {
        i.WmiSetBrightness(5, value)
        break
    }
}

; キーボードで明るさの変更
F14 & F5::SetBrightness(Round(GetBrightness()-10, -1)) ; 0%でもGetBrightness()で返ってくるのが何故か1なので適当に丸める
F14 & F6::SetBrightness(Round(GetBrightness()+10, -1))