ZMK firmwareの追加behavior定義
コメントでMod-tap機能を使用するとリピート付きのSpace and Shiftを定義できると教えてもらったので設定テスト。
以下のHold-Tapの説明を参考にして adv360.keymap に定義を追加する。 zmk.dev
behaviors{};
の中にsands挙動を追加する。*1
この定義の後、keymap{};
の中の狙ったキーの部分を「&sands LEFT_SHIFT SPACE」のように記載する。
最初のキー(LEFT_SHIFT)は長押し時の挙動で2番目のキー(SPACE)は単押し時の挙動なので、Space and Shiftの挙動になる。
behavior定義の際に flavor = "tap-unless-interrupted";
としているので、リピート機能付きになる *2
全体のイメージは以下の通り。
behaviors { sands: space_and_shift { compatible = "zmk,behavior-hold-tap"; label = "SPACE_AND_SHIFT"; #binding-cells = <2>; flavor = "tap-unless-interrupted"; tapping-term-ms = <200>; quick-tap-ms = <125>; global-quick-tap; bindings = <&kp>, <&kp>; }; }; keymap { compatible = "zmk,keymap"; default_layer { bindings = < &sands LEFT_SHIFT SPACE >; };
設定の意味については以下を参考に。 zmk.dev
とりあえずはyamy(窓使いの憂鬱)の以下の設定と似た感じにはできた😊 *3
# Space and Shift def option delay-of !!! = 5 # 最初のn回のリピートを無視 mod shift += !!!Space # リピート有り key ~R-*C-Space = Space key R-*C-Space = &Ignore
kinesis Advantage360 proのチャタリング
キーの押し方が悪いのか稀にチャタリングするようになった。ZMK firmwareの以下のページを参考にしてdebouncingのパラメータを変更した。 zmk.dev
./config/boards/arm/adv360 の下にある adv360_left_defconfig と adv360_right_defconfig に以下の設定を追加した。 (デフォルト値は両方とも5msなので、少し長くした)
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=7 CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=7
半分プラシーボ的な物もあるのかもしれんけど、チャタリングは出なくなった。 ファームウェアの更新はちょっと面倒だけど、こういう細かい調整ができるのがpro版の良いとこやね。
kinesis Advantage360のカスタマイズ
台風で家に籠っていたので、いろいろと設定した。
ビルド環境の用意
Kinesisのサポートページから Quick Start Guide と User's Manual をダウンロードする。 kinesis-ergo.com Quick Start Guideの「Custom Programing」 および USER'S MANUALの「6.0 Customizing your Keyboard」を参考にしてビルドできるところまで設定する。(後者の方が図入りで分かりやすい)
現在の設定
- 親指部分はAdvantage2で使用していたのと同じ設定に
- ESC単押しはESCのまま、他キーとの組み合わせ時はCTRLに (Mod-Tap)
- Alt単押しはAlt+Tab、他キーとの組み合わせ時はAltに (Mod-Tap)
- 左右のShiftとFnキーを入れ替え
- ファンクションキーは数字のnとFnが一致するように
- PageDownは日本語入力のON/OFFトグルに (Macro)
- USBとBluetoothの両方で接続されている場合USBが優先になる。これだとモバイルバッテリに接続して充電中にキーボードが使用できないのでMod3+o を &out OUT_TOG にしてUSB/Bluetoothの切り替えができるように
困っている点
Space and Shiftが使いづらい
Shiftキーを多用するのでSpace and Shift(スペースキーを単押ししたらSpace, 他キーと同時に押したらShiftとして動作)を使用している。
この動作をAdvantage360に設定する場合、Mod-Tapを使用して &mt LSHIFT SPACE のように書けばとりあえずは動作する。 しかし、この設定だとSPACEを押し続けた場合にリピートしてくれない。キーを離した時に1つだけスペースが入力される。
yamy/窓使いの憂鬱だと柔軟に設定できるので、当面はこちらで設定することに。
GUIレイアウトツールで同時押しの設定ができない
キーコード一覧にあるように、モディファイヤはShif(S), Ctrol(C), Alt(A), Win(G)キーが左右(L/R)それぞれで定義されている。
zmk.dev
たとえば、左Alt+TAB を定義したい場合、LA(TAB) と書けば良い。しかしGUIのレイアウト変更ツールではこの同時押しの設定ができない。
config/adv360.keymap を手動で編集する必要がある。
→ 再度試したみたらできた、どうやら書き方の問題らしい。たとえばモディファイヤとして左シフトを使用したい場合、key codeとしてLEFT_SHIFTを指定すると単押しの設定しかできない。モディファイヤとして使用する場合にはLSのように略称の方のkey codeを選択する。これで&kp LS(🚫)みたいな表示になるので、カッコ内をクリックしてどのキーと組み合わせるかを指定できる。
GUIレイアウトツールによる上書き
あるキーを手動で &mt LALT LA(TAB) のように同時押しに設定したとしてもGUIレイアウトツールは同時押し部分を認識してくれない。
GUIツールを使用すると&mt LALT TABのようなキー設定が生成されてしまい同時押し設定が無くなってしまう。 GUIツールを使用して設定ファイルを生成した後、毎回手動でファイルを修正する必要がある。
とりあえずの逃げとして、キーの設定を &mtや&kpにせずに ¯oに設定しておき、キーを押した時にマクロ側で同時押しになるように設定しておく。これだとGUIツールがconfig/adv360.keymapファイルを生成してもmacro側はそのまま残るので同時押し設定が消えることは無くなるがちょっと面倒。
Dell AW3418DWをSurface Book2に接続した際のメモ
これまでは 本体+2560x1440の外部モニタ環境で使ってきたが、手狭になってきたので3440x1440のモニタに置き替えた。 接続は以下のようにSurface dock経由で(mini)Display Portを使用。
[Surface Book2] -- [Surface dock] -- [モニタ]
購入前に気になっていた以下の点を確認したのでメモ。
本体+外部モニタ2枚の3枚構成で使えるか?
○ モニタの置き替え前にちょっとだけ3枚構成で試してみたが、少なくとも60Hzであれば問題なく使える。 気にしていたのは、公式ドキュメントにある外部モニタ2枚の時の最大画面解像度。公式にサポートされているのは 2560x1600 @60Hz x2枚まで。3840x1440 + 2560x1440 のモニタ2枚の場合でも60Hzで表示できるか心配だったがケーブルを接続するだけで問題なく使えた。
60Hz以上のリフレッシュレートで表示できるか?
○ 特別な設定なしでモニタ側仕様上限の120Hzまで使える。 Windowsのディスプレイの情報、AW3418DWのOSD表示、UFO Motion Tests
で確認したところ120Hzと表示される。画面表示も正常なので120Hzで正常に動いている。
2019-08-19追記
120Hzの状態で使っていると、surface book2本体ではなくsurface dockの側に問題が発生した。スリープからの復帰のタイミングで発生しやすい。症状は
などいろいろ。一旦この症状が発生すると、Surface Dockの電源を入れ直す必要がある。AW3418DW側の設定を変更してリフレッシュレートを115Hzにすると問題は発生しないので、115Hzで使用することにした。
nVIDIA G-SYNCは使用できるか?
× 当然使用できない。そもそもSurface Book2からDockにG-SYNC用の信号が出ているかさえ不明。
Dell Display Managerを使用できるか?
× AW3418DWはサポートされていない。最近のモニタなので当然サポートされていると思ったが、ソフトをインストールしても動作しない。 サポートされているモニタの一覧 www.dell.com によると、AlienwareでサポートされているのはAW2518HFのみ。
Surface Book2のキーボード設定 (その2)
以下のように設定したけど、Kinesisのテンキー部分がうまく動いていない。
emacsedit.mayuの設定でテンキー部分が設定されているっぽいので、.mayuで上書き定義した。これで完璧?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 窓使いの憂鬱 - dot.mayu # Copyright (C) 1999-2005, TAGA Nayuta <nayuta@users.sourceforge.net> # # まずキーボード定義を読み込む if ( USE104 ) include "104.mayu" # 104 キーボード設定 if ( USE109on104 ) include "109on104.mayu" # 104 キーボードを 109 キーボード風に endif else include "109.mayu" # 109 キーボード設定 if ( USE104on109 ) include "104on109.mayu" # 109 キーボードを 104 キーボード風に endif endif if ( USEdefault ) include "default.mayu" # Emacs ライクなさまざまな設定 endif keymap Global # このファイルをホームディレクトリにコピーしてから、 # 以下に自分の好みのキーバインディングを設定するとよい。 # このファイル自体を変更しないこと。 # IMEの制御 key A-Space = $ToggleIME # Alt-' ' でIMEをON/OFF #key S-SPACE = $ToggleIME # Shift-' ' でもIMEをON/OFF key IC-C-m = Enter # かな漢字変換中でもC-mによる改行を有効にする # MacOSっぽく、C-1, C-2で2枚の仮想デスクトップを切り替え key C-_1 = C-W-Left key C-_2 = C-W-Right # # ワンショットモディファイヤ # # Space and Shift mod shift += !!!Space # リピート有り key R-*Space = &Ignore # ESC + LeftControl mod Control += !!Esc key ~R-*C-Esc = Esc key R-*C-Esc = &Ignore # Enter + RightControl mod Control += !!Enter key ~R-*C-Enter = Enter key R-*C-Enter = &Ignore # Backspace + Alt mod Alt += !!!Backspace # リピート有り key ~R-*C-Backspace = Backspace key R-*C-Backspace = &Ignore # Altを単体で押した場合はAlt-Tabにする (なぜか右Altはうまく動かないのでAltは両方とも左Altにしておくこと) mod Alt += !!LeftAlt key ~R-*A-LeftAlt = A-Tab key R-*C-LeftAlt = &Ignore # C-[をEscに key C-LeftSquareBracket = Esc Escape # # SurfaceBookキーボード用 # # 変換・無変換をSpace and Shiftに mod shift += !!変換 key R-*変換 = &Ignore mod shift += !!E0無変換 key R-*E0無変換 = &Ignore # ひらがなをLeftAltに # key *E0ひらがな = $ToggleIME # ひらがな でIMEをON/OFF def subst *E0ひらがな = *LeftAlt mod Alt += !!E0ひらがな key ~R-*C-E0ひらがな = A-Tab key R-*C-E0ひらがな = &Ignore # 英数をEsc+Ctrlに def subst *E0英数 = *Esc mod Control += !!E0英数 key ~R-*C-E0英数 = Esc key R-*C-E0英数 = &Ignore # Enterキーが遠いので「む」キーもEnterとして使用 def key kinesis_sp = 0x56 # kinesisとの共存用に左手下の |\ は表記通りに使う def subst *kinesis_sp = *YenSign def subst *RightSquareBracket = *Enter # Surface Pen # def subst *LeftWindows = *RightWindows def key pen_single = 0x6b # 0x83 &VK (U-F20) key pen_single = &VK(U-F20) def key pen_double = 0x6a # 0x82 &VK (U-F19) key pen_double = &VK(U-F19) def key pen_hold = 0x69 # 0x81 &VK (U-F18) key pen_hold = &VK(U-F18) key _0 Num0 = _0 key _1 Num1 = _1 key _2 Num2 = _2 key _3 Num3 = _3 key _4 Num4 = _4 key _5 Num5 = _5 key _6 Num6 = _6 key _7 Num7 = _7 key _8 Num8 = _8 key _9 Num9 = _9 key NumHyphenMinus NumMinus = NumMinus key NumPlusSign NumPlus = NumPlus key NumFullStop NumPeriod = Period key NumLock = NumLock # # アプリ固有の設定 # # web browser window Mozilla /:MozillaWindowClass$/ : EmacsEdit window Chrome /chrome\.exe:/ : EmacsEdit window Edge /ApplicationFrameHost\.exe:/ : EmacsEdit key End = C-Tab key Home = C-S-Tab ## MS-Office window Outlook /OUTLOOK\.exe:/ : EmacsEdit window POWERPNT /POWERPNT\.exe:/ : EmacsEdit window Excel /EXCEL\.exe:/ : EmacsEdit ## explorer window Explorer /Explorer\.exe:/ : EmacsEdit ## Evernote window Evernote /Evernote\.exe:/ : EmacsEdit ## Kindle window Kindle /Kindle\.exe:/ : EmacsEdit