機能 #812
未完了UHK 80 のキーマップ改善 (2025-08)
nop_thread さんが約2ヶ月前に追加. 5日前に更新.
0%
説明
現状のキーマップにいくらか不満があるので、改善したい。
NO nop_thread さんが約2ヶ月前に更新 操作 #1
- 関連している 設備・備品 #611: キーボード: UHK 80 を追加
NO nop_thread さんが約2ヶ月前に更新 · 編集済み 操作 #2
- 題名 を UHK80 キーマップ改善 (2025-08) から UHK 80 のキーマップ改善 (2025-08) に変更
- backslash / vertical bar の位置が悪い
- UHK 60 での設定に合わせて右下 (右 Shift の下) にしてみたり、右 Shift の右にしてみたり、key cluster module の右のキーにしてみたりなどいろいろ試しているが、どれもしっくりこない。
- key cluser module の右や右 Shift の下は割と押しづらいし、右 Shift の右に至っては誤爆率も高い。
- 左手の親指キー2つがほぼ不使用
- 左から Fn2, Mouse となっているが、マウスレイヤーなんて全く使っていない (左右 module で事足りる) し、Fn2 も左右の親指位置に置いてある割には全く使っていない
- 左右の最下段親指4キーのうちまともに使っているのは右手の Fn だけ (UHK 60 での癖)
- ここの残り3つのキー、また Fn2 以降のレイヤーは実質完全に空いているので是非活用したい。
- Escape がもっと良い位置にほしい
- Neovim やら SKK やら Vim mode の zsh やらに貼り付いて生活しているため、 Esc の利用頻度は異常に高い。これを左上ではなくもっと良い位置に置くべき。
- SKK の羃等なモード変更用のキーがほしい
- SKK で Hiragana モードから Latin モードに戻るときの
l
は羃等でない (複数回押すとl
が入力されてしまう)。たまに誤爆する。 - うっかり
S-l
で Wide Latin モードに入ると Wide Latin → Hiragana → Latin の2遷移が必要になるため、これも稀に誤爆して嫌な気持ちになるし、誤爆でなくとも戻るのがダルい。 - なんなら Henkan がモード遷移にしか使われないのも勿体ない。仮名系のモード中は Henkan を Shift 相当にできれば嬉しい可能性がある (そうか?)
- たとえば「日本」とするとき
Henkan Shift-n i h o n SPC
とするよりHenkan-n i h o n SPC
にできないか? - 「くさ」であれば同時押しなしで
Henkan c u s a
で良い。これは従来通り。
- たとえば「日本」とするとき
- Hiragana モードへの移行と Latin モードへの移行どちらが高頻度かというと、まあ実際は均衡していてほぼ同頻度ということになる (厳密には Esc で抜ける分 Latin への
l
での移行が若干少ない) ので、一方だけをShift+(モード遷移キー)
とかに割り当てるのはおそらくあまり賢くない。 - Wide Latin や半角カタカナモードへの遷移が C-q とかで誤爆すると嫌という問題は、基本的なモード遷移をぜんぶ UHK 側の Fn なり Fn2 なりのレイヤーを使って行うようにするという乱暴な手でも解決できそうなので、検討に値する。
- SKK で Hiragana モードから Latin モードに戻るときの
- 最上段が実質不使用 (#note-16)
NO nop_thread さんが約2ヶ月前に更新 操作 #3
基本的なモード遷移をぜんぶ UHK 側の Fn なり Fn2 なりのレイヤーを使って行うようにするという乱暴な手でも解決できそう
Linux (というか libskk バックエンド) 環境であれば rules で勝手なキーを使えるので、なにかいい感じに普通のキーボードに非搭載になってそうなキーコードを探してきて使えばいい。
変換
と 無変換
は Hiragana と Latin あたりで使いたいので、 ひらがな/カタカナ
キーに Shift か Ctrl の組み合わせをする (計4通り) とかが無難?
4通りあれば Wide Latin, Katakana, Hankaku Katakana への遷移には事足りる。
変換、無変換は普通の JIS 配列キーボードでは無変換が左親指で変換が右親指なので、それぞれ割り当ててやると良いか。
しかし親指の良い位置をそんなことに使うのも勿体なく感じるが……同時押しか長押しで Shift とか Ctrl としても使えるようにしてやれば少しはマシ?
NO nop_thread さんが約2ヶ月前に更新 操作 #4
nop_thread さんは #note-3 で書きました:
変換、無変換は普通の JIS 配列キーボードでは無変換が左親指で変換が右親指なので、それぞれ割り当ててやると良いか。
変換を始めるとき基本的に子音で開始する方が多いため、 Henkan 兼 Shift にするなら左手にある方が有利かもしれない。
しかし 変換
を左にすると他のキーボードを使うとき絶対に混乱する。(今更か?)
どうしたものか。
NO nop_thread さんが約2ヶ月前に更新 操作 #5
nop_thread さんは #note-3 で書きました:
しかし親指の良い位置をそんなことに使うのも勿体なく感じるが……
勿体なさで言うなら l
で済むものに親指キーを割り当てる方が余程勿体ないか。
NO nop_thread さんが約2ヶ月前に更新 · 編集済み 操作 #6
nop_thread さんは #note-2 で書きました:
なんなら Henkan がモード遷移にしか使われないのも勿体ない。仮名系のモード中は Henkan を Shift 相当にできれば嬉しい可能性がある (そうか?)
tap=Henkan(tap), hold=Henkan(tap)+Shift(hold) にすればモード遷移と変換開始を単一キーにまとめられるのでは? と思ったが、これだと変換開始はいい感じにうまくいくが送り仮名等の開始で意図せぬ Henkan が挟まってしまう。
Henkan は今のところ commit コマンドにしているため送り仮名の前の preedit で確定されてしまう。
Henkan を commit でなくす手もあるが、そうすると今度は commit に何か割り当てる必要が出てくる。
C-m
が commit-unhandled に、そして C-l
とかが何故か commit になっており、これで良い気はしないでもないが、そもそも Henkan を commit にしているのは Hiragana モードへの遷移キーを commit にするとある意味一貫しているという理由もあるので、その性質を捨てるのは惜しい気もする。
どうせ左右の Shift は捨てられない気がするので、べつに Henkan はモード遷移 (羃等) と commit の2機能あるから十分に活用されているということで良い気がする。
NO nop_thread さんが約2ヶ月前に更新 操作 #7
nop_thread さんは #note-6 で書きました:
tap=Henkan(tap), hold=Henkan(tap)+Shift(hold) にすればモード遷移と変換開始を単一キーにまとめられるのでは? と思ったが、これだと変換開始はいい感じにうまくいくが送り仮名等の開始で意図せぬ Henkan が挟まってしまう。
Henkan は今のところ commit コマンドにしているため送り仮名の前の preedit で確定されてしまう。
べつに送り仮名でまで使える必要はなく、 Latin からいきなり変換に突入できるだけでも便利のはず。
やはり欲しい。
NO nop_thread さんが約2ヶ月前に更新 · 編集済み 操作 #8
数字キー等を長押しで F<n> キーになるのは便利そう。
追記: だめだった (→ #note-24)
NO nop_thread さんが約2ヶ月前に更新 操作 #9
左手の Shift の下部右側の Mod とかも全く使っていない。
LShift の下部左側の LSuper もよく考えると使っていない。
Mod が右手の一番良い位置にあるので全部そちらでやっており、 RSuper もその右隣で良い位置にあるのでそれで済んでいる。
NO nop_thread さんが約2ヶ月前に更新 · 編集済み 操作 #10
Tips:
ifHold <COMMAND>
は postponeKeys delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased <COMMAND>
で代替できる。
(→ 問題あり: #note-21)
(ただし <COMMAND> かその後でちゃんと postpone されていないイベントを発する必要がある。)
hold timeout のデフォルトは 200 (ms) だが、後者の形式で書けばグローバルな hold timeout とは独立して自由に調整できる。
NO nop_thread さんが約2ヶ月前に更新 操作 #11
home row mods という概念を知ったが、 https://mastodon.cardina1.red/@lo48576/115079670226464139 のとおり懸念があるのでたぶんやらない。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #12
Esc を modifier として使って同時押しすることは基本的になさそう (かつ他のキーと重なるほど高速に打つ場面もそうなさそう) なので、親指 Esc は dual role にできそう。
NO nop_thread さんが約1ヶ月前に更新 操作 #13
- ステータス を 新規 から 進行中 に変更
- 開始日 を 2025/08/23 にセット
- 前回確認日 を 2025/08/23 から 2025/08/24 に変更
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #14
- 優先度 を 通常 から 低め に変更
手癖ゆえ Modifier は空押しを想定しないといけないのが難しい。
たとえば漫然と Mod (これは UHK の Mod layer 的な意味での Mod) キーなどを押し込んで、少し考えてやっぱり何もしないことにして Mod を離す、などという手癖がある。
これのせいで、素朴な (タイムアウトなしの) dual-role key にしてしまうと空押しで tap 扱いの誤爆が発生して困るということになる。
マクロを使って timeout を自分で実装すれば問題ないといえばないが……。
あるいは secondary roles の resolution strategy をデフォルトの Simple ではなく Advanced にして何か弄れば解決できたりするのだろうか?
→ Advanced strategy にして Timeout action を Secondary にしてやれば所望の動作を得られた。
NO nop_thread さんが約1ヶ月前に更新 操作 #15
nop_thread さんは #note-8 で書きました:
数字キー等を長押しで F<n> キーになるのは便利そう。
数字キーの double tap からの hold で primary role (つまり数字キー) 長押し扱いにすべきか悩んだが、以下の理由から結局やめた。
- 数値の桁数は非常に重要なので、数字を連打する機会はそうそうない。
どうしても連打で我慢できないほど沢山打ちたい場合はコピペか vim 等を使うだろう。 - 現状のセットアップ (tap は digit、 hold は F<n>) だと double tap まで待たずに済むので、数字キーを連打してもキーを離した時点で数字が入力される。
しかし double tap primary を有効にしてしまうと、連打の2回目が tap か hold かによって1回目の押下が tap だったか hold の prefix だったかが決まる。
つまり数字の入力が、最初の押下から1回分以上遅延する。さすがにこの遅延は気持ち悪い。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #16
F<n> はたまに必須ながら頻度は低いので、 Mod+digit や digit 長押しで打てるのに最上段を占有させておく意味は薄い。
最上段も何か活用したいところ。
どうせ最上段の Esc も遠すぎて使ってないし。
今のところ使っている F<n> の一覧:
- F2
- GUI ファイラでのファイル名変更
- 利便性のために事実上必須
- GUI ファイラでのファイル名変更
- F3
- 再検索
- ごく稀にしか使わない
- GUI ファイラ (pcmanfm) での左右ペイン分割
- ごく稀にしか使わない
- 再検索
- F5
- ブラウザやファイラでの表示更新
- C-r で代用可能
- ブラウザやファイラでの表示更新
- F6
- ブラウザでのロケーションバーとコンテンツ領域の間でのフォーカス移動
- ロケーションバーへの移動は C-l で代用可能だが、戻ってくるのが Tab 連打などになり面倒なので事実上必須
- ブラウザでのロケーションバーとコンテンツ領域の間でのフォーカス移動
- F12
- tuigreet ログインマネージャでのシャットダウン/再起動メニュー
- 代替キーを知らないのでおそらく必須
- tuigreet ログインマネージャでのシャットダウン/再起動メニュー
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #17
レイヤーについて:
今のところ Mod レイヤーは基本的に破壊的な効果の小さいキー (典型的にはナビゲーション系のもの) を集めており、 Fn レイヤーには破壊的な効果の大きい (典型的には文字、Delete、Bksp) を集めている。
とはいえ Fn に置くものが少なすぎて (まともに使っているのは Delete, Bksp, PrintScreen, キーマップ切り替えしかない) あまりに無駄なので、これも何か考えたいところ。
とはいえ Mod+h (on Dvorak layout) で ←
にしていて Fn+h で Bksp にしていたり、 Mod+s で →
にしていて Fn+s で PrintScreen にしていたりなど、普段使いしているものが微妙に位置被りしているため、それをどうにかしないことには統合も難しい。
PrintScreen などべつにどこにあろうが大した問題ではないが (なんなら UHK 80 の右側キーと最上段が余っているのでそこに tap で割り当てても良いくらいだ)、 Mod+h と Fn+h は重度に活用しているため非常に悩ましい。
カーソル移動をホームポジションの1段上にずらして Mod+gcrl にする手もあるが、そもそも Mod+h は Vim の hjkl に合わせてこの位置に置いてあるものなので、さすがに譲れない。
Fn+h は一部のアプリ等が C-h を奪っていく場合に (あるいは非 GTK 系でそもそも C-h を削除にできない場合に) C-h と近い感覚で削除をできると嬉しいのでここに置いてある。
これも h と同じ場所にあることが重要なので移動には慎重になってしまう。
NO nop_thread さんが約1ヶ月前に更新 操作 #18
nop_thread さんは #note-17 で書きました:
レイヤーについて:
今のところ Mod レイヤーは基本的に破壊的な効果の小さいキー (典型的にはナビゲーション系のもの) を集めており、 Fn レイヤーには破壊的な効果の大きい (典型的には文字、Delete、Bksp) を集めている。
とはいえ Fn に置くものが少なすぎて (まともに使っているのは Delete, Bksp, PrintScreen, キーマップ切り替えしかない) あまりに無駄なので、これも何か考えたいところ。
基本的に副作用の有無や強さに関係なく、キーの押下 (あるいはせいぜい modifier と他のキーのコンボ) は全部 Mod に持ってきて、普通のキーの挙動の範疇に収まらないマクロ等を Fn 系レイヤーに持っていくのは悪くない使い分けな気がしている。
こうすると押しやすさの面でも Mod だけ優遇しておけばよく Fn は二の次にできるので考えやすいかもしれない。
NO nop_thread さんが約1ヶ月前に更新 操作 #19
- 前回確認日 を 2025/08/24 から 2025/08/25 に変更
素朴な hold で Mod、 double tap の二度目で hold すると Fn になるようにしてみた。これなら Mod と Fn をまとめられるので、空いた良い位置に Backspace を入れられる。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #20
RShift の右 (Enter の下部右側) はホームポジションから打とうとすると誤爆しやすいため、ここに記号等を置くのはあまり良くない。
やはりキーボード右下の矢印キーの隙間を埋めるような左右対象な何らかの機能を置いておくのが良さそう。
(UHK 80 のデフォルトでは Alt+← または Alt+→ になっているが、これは trackball module の History Backward/Forward 等の方が使いやすいのでいらない。)
NO nop_thread さんが約1ヶ月前に更新 操作 #21
nop_thread さんは #note-10 で書きました:
Tips:
ifHold <COMMAND>
はpostponeKeys delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased <COMMAND>
で代替できる。
(ただし <COMMAND> かその後でちゃんと postpone されていないイベントを発する必要がある。)
hold timeout のデフォルトは 200 (ms) だが、後者の形式で書けばグローバルな hold timeout とは独立して自由に調整できる。
問題が発覚した。
たとえば postponeKeys delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased tapKey f12 ; tapKey =
としたとき、 press e
, press ]
, release e
, release ]
の順でイベントを発生させても、キーボード側からは press e
, press ]
, relaese ]
, release e
の順でイベントが発射されてしまい、OS 側に e が長押しと認識されて連打扱いになってしまうことがある。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #22
nop_thread さんは #note-21 で書きました:
nop_thread さんは #note-10 で書きました:
Tips:
ifHold <COMMAND>
はpostponeKeys delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased <COMMAND>
で代替できる。
(ただし <COMMAND> かその後でちゃんと postpone されていないイベントを発する必要がある。)
hold timeout のデフォルトは 200 (ms) だが、後者の形式で書けばグローバルな hold timeout とは独立して自由に調整できる。問題が発覚した。
たとえばpostponeKeys delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased tapKey f12 ; tapKey =
としたとき、 presse
, press=
, releasee
, release=
の順でイベントを発生させても、キーボード側からは presse
, press=
, relaese=
, releasee
の順でイベントが発射されてしまい、OS 側に e が長押しと認識されて連打扱いになってしまうことがある。
postponeKeys まわりを弄ってみたり tap ではなく press と release に分解してみたりいろいろ試してみたが、 key release の順序を変えられないのはどうしようもなさそう。
尤もタイピングにおいては基本的に keypress しか見ていないはずなので、この点自体が問題とまでは今のところ考えていない。
問題の本質は、 press =
が確定するまでの待機中に release e
も保留されてしまうこと。
delayUntilReleaseMax はマクロを起動したキーが release されるかタイムアウトまで待ってしまうので、「別のキーが release されたので、メインのキーが release されていないしタイムアウトもしていないが delay をやめる」ということができない。
これは delayUntilReleaseMax を postponeKeys で修飾してしまっているせいだが、この postpone は普通のキーが後から押された場合の対応に必要。
具体的には、この postpone をなくして delayUntilReleaseMax 200 ; ifNotInterrupted ifNotReleased tapKey f12 ; tapKey =
としている場合、 press =
, press e
, release =
, release e
のように打った際に press e
, press =
, release =
, release e
のようなイベント列として発出され、 =e
と打ったのに OS 側には e=
として出ていってしまう。
これは絶対に許容できない。
NO nop_thread さんが約1ヶ月前に更新 操作 #23
nop_thread さんは #note-22 で書きました:
問題の本質は、 press
=
が確定するまでの待機中に releasee
も保留されてしまうこと。
delayUntilReleaseMax はマクロを起動したキーが release されるかタイムアウトまで待ってしまうので、「別のキーが release されたので、メインのキーが release されていないしタイムアウトもしていないが delay をやめる」ということができない。
タイムアウトを短くする手もあるが、そもそも数字キーは F<n> キーとして使うのはメインではないため、発動しやすくするのは誤爆防止の面でもあまり望ましいと思えない。
ちなみに OS 側は xset r rate 200 50
(Xorg の場合) で設定しているので、 key repeat 発動まで 200 ms の遅延、発動したら 50/s のリピートとなっている。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #24
nop_thread さんは #note-8 で書きました:
数字キー等を長押しで F<n> キーになるのは便利そう。
結局、文字のように振る舞うキーに2種類の non-modifier なスキャンコードを割り当てるのはタイピング体験への悪影響が大きすぎる (遅延が大きくなったり key repeat 発動までのラグを小さくしづらい等) ので避けることにする。
F<n> は素直に Mod+<n> (あるいは Mod+何か or Fn+なにか) で打てば良い。
NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #25
nop_thread さんは #note-24 で書きました:
結局、文字のように振る舞うキーに2種類の non-modifier なスキャンコードを割り当てるのはタイピング体験への悪影響が大きすぎる (遅延が大きくなったり key repeat 発動までのラグを小さくしづらい等) ので、避けることにする。
うまくいかなかった実装の供養:
postponeKeys delayUntilReleaseMax $fnnumHoldTimeout
ifNotInterrupted ifNotReleased final tapKey f10
tapKey 0
NO nop_thread さんが約1ヶ月前に更新 操作 #26
nop_thread さんは #note-12 で書きました:
Esc を modifier として使って同時押しすることは基本的になさそう (かつ他のキーと重なるほど高速に打つ場面もそうなさそう) なので、親指 Esc は dual role にできそう。
Esc を特定回数高速連打することはありそうなので、 modifier としての同時押しは良いとしても連打を邪魔しないよう注意する必要はある。
NO nop_thread さんが約1ヶ月前に更新 操作 #27
- 前回確認日 を 2025/08/25 から 2025/09/04 に変更
Mod はたまに無意識にダブルタップホールドしてしまっているらしく、 Fn に誤爆している。
また、もともと Fn レイヤーに切り替えるために使っていた親指キーも Fn のつもりで押してしまい Bksp に誤爆している。
鳴れてくれば癖が出なくなるかもしれないが、そこまでする価値があるだろうか……
NO nop_thread さんが25日前に更新 · 編集済み 操作 #28
- 前回確認日 を 2025/09/04 から 2025/09/13 に変更
同時押しについて、忌避してきたが条件次第では結構許容できる気がしてきた。
そもそもターミナル上での開発では Enter や Bksp を C-m や C-h で既に代用していることが結構あるわけで (あとは Delete も C-d)、少なくとも小指 Ctrl だと運指の同期がとりやすいから許容できるという説明はできる。
親指で同期がとりづらく感じるのは何故か、あるいは同期しやすい条件は何なのかというのがわかれば、記号や頻出キーの割当を Fn や Mod レイヤーに持ってくることに不都合はなさそう。
その Fn と Mod レイヤーだが、これまでは Mod を押しやすい位置にしてナビゲーション系のキーに使っており、 Fn には二級市民として特殊なキー (PrintScreen, Del など) を持たせていた。
しかしタイピングがメインでしかも vim であることを考えると、ナビゲーションに方向キーや C-f, C-b 等は特に必要としていない気もする。
(意識して確かめたことはないが、普通に考えて左方向キーよりも Bksp の方が頻度は高いだろう……。)
もちろん vim 外でも共通して Mod レイヤーを優先して使うなら価値はあるが、怠惰ゆえ労働などで UHK を使わずにいることがあることからその習慣も徹底していない。
つまり、本当は一部の文字キーや Del, Esc 等を Mod レイヤー (に相当する「タイピング補助用レイヤー」) に配置して、物理キーの代替としてよりもナビゲーション等の機能面を重視する割当は利便性で劣る Fn レイヤー (に相当する「利便性用機能レイヤー」) に配置するのが、より妥当なのではないかという気がしている。
しばらくナビゲーション系の割当の使用頻度を意識して使ってみるのが良いかもしれない。
NO nop_thread さんが23日前に更新 操作 #29
nop_thread さんは #note-28 で書きました:
しかしタイピングがメインでしかも vim であることを考えると、ナビゲーションに方向キーや C-f, C-b 等は特に必要としていない気もする。
どうやらそうでもなかった。
まず vim でないブラウザや他アプリ等で左方向キーはよく使う。
そのうえ、 vim でも左方向キーは typo 修正や括弧飛ばしなどいろいろな場面でよく使う。
つまり方向キーくらいの小さなナビゲーションはテキスト入力において頻出なので、できれば同じレイヤーか同等に操作しやすいレイヤーに入れたい。
NO nop_thread さんが23日前に更新 操作 #30
- 前回確認日 を 2025/09/13 から 2025/09/15 に変更
NO nop_thread さんが23日前に更新 操作 #31
左手の親指が実質 Space と日本語入力有効化の専用になっていることに慣れており、左手の Space の左のキー (現状では Fn) がかなり使いづらい。
慣れの問題かもしれないが……。
逆に右手の親指の Mod が使いやすいのは良いとして、その右にある Super は結構使い慣れているため、本当はこれを他の layer キーにすべきなのかもしれない。
いくら tiling WM を使っているからといって、さすがに Super が良い位置を使いすぎでは……?
とはいえホームポジションから移動することなく Shift キーも同時に活用してウィンドウの切り替えや移動やレイアウト変更やターミナルの起動ができるのは、実際便利ではある。
小指で最下段を押していてはこうはいかない。
NO nop_thread さんが17日前に更新 操作 #32
- 関連している braindump #831: UHK のキーマップ解説 (2025-09) を追加
NO nop_thread さんが17日前に更新 · 編集済み 操作 #33
- 前回確認日 を 2025/09/15 から 2025/09/21 に変更
nop_thread さんは #note-31 で書きました:
逆に右手の親指の Mod が使いやすいのは良いとして、その右にある Super は結構使い慣れているため、本当はこれを他の layer キーにすべきなのかもしれない。
いくら tiling WM を使っているからといって、さすがに Super が良い位置を使いすぎでは……?
Super_R を最下行の下 (4行しかない親指キー) に追いやってみたが、案外どうにかなっている。
押しづらさ的にもこのくらいなら許容できそう。
もともと Super_R があった場所には Fn2 (主にナビゲーション系のものが多い) の layer キーを置いている。
これで Mod と Fn2 の両方が使いやすくなった。
NO nop_thread さんが17日前に更新 操作 #34
「A」の左の Ctrl が勿体ない気がしたので、というより正確には「特定のショートカットを期待しており Ctrl+something を期待していない場合」がたまにあることに気付いたので、これもマクロで別物にしてどうなるか試してみている。
基本的には modifier として振る舞い、 Fn3 に何か割当があればそれを使い、ない場合は Ctrl の同時押しとして機能するようにしてある。
(ダブルタップホールドすると生の Ctrl として振る舞うようにすることで、本当に Ctrl そのものが必要な場合のフォールバックとしている。)
マクロが少々荒削りで期待どおりの挙動にならない場合はあるが、結構うまくいっているので期待できそう。
今のところ具体的には、 {smart-ctrl}+m は C-m でなく Enter に、 {smart-ctrl}+h は C-h ではなく Backspace に、 {smart-ctrl}+d は C-d ではなく Delete とするという3つの割当が Fn3 に入っている。
ただし C-d を奪ってしまうと Vim でのスクロールやターミナルでのシェル等からの脱出に微妙に支障があるため、どうしたものか検討中。
NO nop_thread さんが17日前に更新 操作 #35
そもそも modifier としての機能をレイヤーでなくマクロで実現する (しかも単に modifier として振る舞わせるだけでなく組み合わせの結果にまで干渉する) というのがかなり無理のある実装らしいということに気付いてきた。
しかも smart ctrl については press Ctrl → press h → press c → release h → release c のような綺麗な直列でない入力に対しての振舞や実装を考えるのが面倒すぎる。
smart ctrl はおとなしく Fn3 layer をそのまま使うのが良さそうか。
そもそもレイヤー丸ごと利用にしなかったのは base layer をコピーしてきて ctrl フラグを立てて回るのが面倒だっただけなので、挙動に関する動機ではない。
NO nop_thread さんが17日前に更新 · 編集済み 操作 #36
バグってる smart ctrl マクロ供養:
// NOTE: Buggy!
ifDoubletap final holdKey leftControl
begin:
postponeKeys {
// Wait for the next another key.
// FIXME: Unexpected loop happens here when
// saved key is pressed too long.
// Maybe because the key release event being
// discarded outside the loop? idk.
ifNotPending 1 ifNotReleased goTo $currentAddress
// If released, break the loop and do the finalization.
ifReleased goTo release
// Save the key to wait for its release later.
setVar smartCtrlSavedKey $queuedKeyId.0
//setLedTxt 200 "get queued key $smartCtrlSavedKey"
toggleLayer fn3
ifKeyDefined $smartCtrlSavedKey setVar smartCtrlLayerActive 0
else {
// Not defined in fn3 layer. Use Left Control as a modifier.
setVar smartCtrlLayerActive 1
untoggleLayer
pressKey leftControl
}
}
// Wait for the pending event to be processed.
ifKeyPendingAt 1 $smartCtrlSavedKey goTo $currentAddress
// Wait for the current (non-smart-ctrl) key to be released.
ifKeyActive $smartCtrlSavedKey goTo $currentAddress
// Clean up for the temporary activation of a layer or a modifier.
if ($smartCtrlLayerActive) releaseKey leftControl
else untoggleLayer
// Repeat until the smart ctrl key is released.
goTo begin
release:
// No finalization required.
NO nop_thread さんが17日前に更新 · 編集済み 操作 #37
nop_thread さんは #note-35 で書きました:
smart ctrl はおとなしく Fn3 layer をそのまま使うのが良さそうか。
そもそもレイヤー丸ごと利用にしなかったのは base layer をコピーしてきて ctrl フラグを立てて回るのが面倒だっただけなので、挙動に関する動機ではない。
single tap (hold) で Fn3、 double tap (hold) で Ctrl になるようにしてみたが、これはこれで Mod との組み合わせで面倒があるかもしれない。
Mod-h で Backspace になっているのを Fn3-Mod-h で Ctrl-Backspace にしたいが、 Mod layer の A の左を Ctrl にすると Mod, Fn3, H で Ctrl-Backspace にできるが、 Fn3, Mod, H だと Backspace だけになってしまう。
マクロ側で対処可能か?
……こういうことを考えていると、 layer よりもマクロで振り分けできた方が良い気がしてきてしまう。
本当にどうしたものか。
NO nop_thread さんが17日前に更新 操作 #38
nop_thread さんは #note-35 で書きました:
そもそも modifier としての機能をレイヤーでなくマクロで実現する (しかも単に modifier として振る舞わせるだけでなく組み合わせの結果にまで干渉する) というのがかなり無理のある実装らしいということに気付いてきた。
やはりこれだった。
というか、マクロか否かによらず「Ctrl や Shift のような modifier の状態を実際の物理キーの状態と直結させず操作する」というのがかなり筋が悪い設計らしいということに気付きはじめた。
A の左の Ctrl が良い位置にあって勿体ないところまでは事実だが、だからといってこれを Ctrl のようなそうでもないような特殊なキーとして定義しようとしたのが良くなかった。
A の左は素直に Fn3 などの別レイヤーにして、さらには Mod+Fn3 などについても別レイヤー Fn4 等として用意するのが妥当な気がしている。
NO nop_thread さんが17日前に更新 操作 #39
nop_thread さんは #note-38 で書きました:
A の左の Ctrl が良い位置にあって勿体ないところまでは事実だが、
とはいえ左小指を使う以上は両手と組み合わせる可能性のあるタイピングの場面で使うには相性が悪く、この辺りはやはり Ctrl とか Super のような二軍の修飾キーにしておく方がマシそうだし、この2つなら Ctrl の方が良い。
素直に Ctrl のままにしておくか。
マクロで苦労 (マ苦労) するのではなく、C-h や C-d や C-m を使う手癖をなおして Mod-h,d,m を使うようにするのがたぶん正攻法。
NO nop_thread さんが10日前に更新 · 編集済み 操作 #40
nop_thread さんは #note-29 で書きました:
nop_thread さんは #note-28 で書きました:
しかしタイピングがメインでしかも vim であることを考えると、ナビゲーションに方向キーや C-f, C-b 等は特に必要としていない気もする。
どうやらそうでもなかった。
まず vim でないブラウザや他アプリ等で左方向キーはよく使う。
そのうえ、 vim でも左方向キーは typo 修正や括弧飛ばしなどいろいろな場面でよく使う。
つまり方向キーくらいの小さなナビゲーションはテキスト入力において頻出なので、できれば同じレイヤーか同等に操作しやすいレイヤーに入れたい。
方向キーを Fn レイヤーに入れていたが、 Mod-h の Bksp との併用が特に多く、別レイヤーにあると効率が悪い。
方向キーは Mod に入れるべきだろう。
そうなると、 Mod-h を Bksp にして Mod-g を Left にするか、 Mod-h を Left にして Bksp を別のところに移動するかが問題。
NO nop_thread さんが10日前に更新 操作 #41
- 前回確認日 を 2025/09/21 から 2025/09/28 に変更
NO nop_thread さんが10日前に更新 · 編集済み 操作 #42
nop_thread さんは #note-40 で書きました:
そうなると、 Mod-h を Bksp にして Mod-y を Left にするか、 Mod-h を Left にして Bksp を別のところに移動するかが問題。
他に良いキーが思い付かない。
空いていてそこそこ押しやすいものでいうと Mod-u とかだが、覚えられる気がしない (mnemonic にするのを諦めて体で覚えるべきなのかもしれないが)。
とはいえ実際ブラウザ等でも Mod-h より C-h を使ってしまう頻度の方が高いので、実は大して Mod-h にこだわる意味もなさそうではある。
しかし U かぁ……
NO nop_thread さんが10日前に更新 操作 #43
nop_thread さんは #note-40 で書きました:
そうなると、 Mod-h を Bksp にして Mod-g を Left にするか、 Mod-h を Left にして Bksp を別のところに移動するかが問題。
Mod-g は Escape を置くのに悪くないのではと思っていたので、 arrow で潰すのもそれはそれで少々惜しい気がしている。
まあ親指が Mod から離れられないことを考えると上の段の人差し指位置は意外に使い勝手が良くないので、そんなに勿体なくもないかもしれないが。
(それはそれで Left を置いておくにはどうなんだという話もある。)
NO nop_thread さんが10日前に更新 · 編集済み 操作 #44
nop_thread さんは #note-42 で書きました:
空いていてそこそこ押しやすいものでいうと Mod-u とかだが、覚えられる気がしない (mnemonic にするのを諦めて体で覚えるべきなのかもしれないが)。
backslash と vertical bar を mod layer の押しやすい場所に置いてみる実験をしていたが、位置を忘れて迷うことがかなり多かったので、押しやすさは二の次で必然性 (あるいは良質な mnemonic) は事実上必須と考えている。
仮令必然性のない場所に体を慣らすことができたとて、今度は割当を変更したり移動したりができなくなって将来余計に困る可能性が結構あるので、あまり無茶はしたくない。
NO nop_thread さんが5日前に更新 · 編集済み 操作 #45
- 前回確認日 を 2025/09/28 から 2025/10/03 に変更
現状の決めかねている事項の実験メモ。
以下キーの名前は全て Dvorak 配列での位置。
- backslash については試行錯誤中。
- Mod+quote の位置に backquote を置いてあるので隣の Mod+comma の位置に backslash を置いても良いのだが、ちょっと連想が弱すぎて定着させる自信がない。
- Mod+slash の位置は微妙に遠いが backslash との対称性や出現頻度を考えると割とありかもしれない。
- backquote については Mod+semicolon と Mod+quote を試しているが、どっちもどっち。
- quote との対称性で Mod+quote の方が連想しやすいが、 Mod+semicolon も不思議と違和感はない。
- Mod+h, Left, Backspace がどうなるべきか未だ考えが定まらない。
- とりあえず癖を抜くべく、今は何も置いていない。
- 同時に、 Left と Backspace をどこに置くべきかも良い考えが出てこない。
- Delete が Mod+d にあるので、 Backspace が同じ右手の近い位置にあると意外とまとまりが感じられることが経験的にわかっている。
- 仮で Mod+u に Backspace を置いてみているが、良い位置なのに連想ができず全然使えない。強いて言えば undo かなと思って苦し紛れで u を選んだが、やっぱり Backspace は undo ではないだろ。
- Escape の位置が定まらない。
- Mod+e を End にしているのでここは使えない。
- 暫定的に Mod+o に置いているが、良くないかもしれない。 Vim の C-o からの連想だったが、このまえ実際に C-o と Escape を混同して操作をミスした。
- 連想をまったく考えないなら、 Mod+t, Mod+c, Mod+r あたりは空いておりそこそこ打ちやすいので候補。
- とはいえ、 Mod を右手で押すことが多い以上は頻度の高い Esc を左手も込みで打ちたい気持ちが若干ある。
- Mod+semicolon もなしではないが、下段はアクセスが良くないのでちょっと Esc には力不足かも。
- Emacs の C-g からの連想で Mod+g もありではあるが、 Emacs bind が全く体に染み付いていないので咄嗟に出てこないのと、 Mod+h を Backspace にした場合に備えて Mod+g と Mod+l で Left と Right にする案があるので、癖が付かないように今のところは Mod+g に割り当てず保留中。
- Key cluster module がない場合の Int4 (Henkan) と Int5 (Muhenkan) をどうするか決めかねている。
- Mod+j は Down にしておきたい。
- j との位置的な対称性で Mod+period に仮置きしているが、こんな良い位置にあっても結局 key cluster module を使うので勿体ないし、 Int5 (Muhenkan) の置き場所と関連付けるのが難しそう。 (Int5 (Muhenkan) を Mod+colon にするのはさすがに勿体ない。)
- Int5 (Muhenkan) については本当にアイデアがない。たぶん Int4 (Henkan) を先に決めてそれをもとに考えた方が良い。
- Mod+x あたりは位置としては程々に使い勝手が悪くて丁度良さそうなのだが、そうすると Int4 と Int5 を並べて置くことはできなくなる。 Mod+x と Fn+x とかにしてみるか?
- Mod+s は良さげといえば良さげな位置だが特にこれといって割り当てたいものがない。
- (後述の PrtScn はありといえばありだが、そこまで強い考えではない。)
- h と s で Left と Right にするのも過去には試したことがあるが、 h と l でも大して不自由していないし Vim では当たり前のように使っているので、変な癖がつきそうな h と s にしない方が良い気がしている。仮令 h と s にしたとて l を Right 以外にすることも (手癖のせいで) たぶんできない。
- Mod+i を Tab にするか Insert にするかで悩んでいる。
- 実際 Tab は利用頻度の割には微妙な位置にあるので、 Mod+i にする価値はある。 C-i との連想もできるので使いやすいはず。
- 一方、 Insert も Shift+Insert で (というか、それに限って) たまに使う。 Windows でもそうだし、 Linux でも稀に使う。
- Insert がこんなに良い位置にいるべきかというと流石にそうは思わないが、では他にどこに置くかというと良い候補がない。 Mod+p は C-PgUp で確定しているし。
- Mod+minus あたりは場所としては悪くないが、関連性は皆無。
- ScrLk の位置はどうするか
- Mod+s は位置が良すぎるのでありえない。
- 仮で (というか過去に何故かそうしていたので惰性で) Mod+equal に置いているが、これでも良い位置すぎないか?
- たぶん「とりあえず仮で端に」と思って Mod+slash とかに PrnScn を置いていたことがあり、その隣として Mod+equal に ScrLk が追いやられたという経緯。
- Mod layer からは完全に排してしまっても良い気すらしている。
- PrtScn については候補はあるが決めかねている。
- yank だと思えば Mod+y も良いし、 screen capture だと思えば Mod+s でも良いし、 capture だと思えば Mod+c でも良いし、 record だと思えば Mod+r でも良い。
- Key cluster module の押しづらいキー (上とか) あたりに単体で割り当てるのもありなので、たぶん Mod layer に置いても利用頻度は低くなる。良すぎる位置を使うのは勿体ない。