smzht / fakeymacs

Emacs-like key bindings for Keyhac
MIT License
111 stars 49 forks source link

HHKB Studio の下段にあるマウス用ボタンを Fn キーとして使いたい #35

Closed smzht closed 9 months ago

smzht commented 10 months ago

HHKB Studio の下段には 3つのボタン(キー)があり、左から LButton、Fn2、RButton が割り当てられています。真ん中のボタン(Fn2 キー)は押しながらトラックポイントを動かすとスクロールが働くようになっている他、Fn キーとしても使えるボタンとなっており、とても汎用的なボタンとなっています。一方、LButton と RButton はただのマウスのボタンとしてしか働きません。キーマップ変更ツールという専用ソフトを使って他のキーに置き換えることはできますが、そうするとマウスのボタンが使えなくなってしまいます。そこで LButton もしくは RButton を SpaceSN の拡張機能を使って、単押しではマウスボタンとして働き、他のキーと一緒に押した場合は Fn キーとして働くようにできないか考えました。 本 Issue では、この実現方法について説明します。

smzht commented 10 months ago

今回は RButton を Fakeymacs の Fn キーとして設定してみます。LButton でも試しましたが、ボタン(キー)の位置やドラッグ&ドロップの利用の観点から RButton を Fn キーとするのが良いと判断しました。

1.キーマップ変更ツールで標準レイヤーの RButton に Pause を割り当てる

今回は、ほぼ利用されていないキーとして Pause を選択しました。Keyhac では、LButton や RButton に対し機能を割り当てることはできないようなので、別のキーに置き換える必要があります。

2.Fakeymacs の SpaceFN 拡張機能を有効にする

config_personal.py の最後に SpaceFN 拡張機能を設定する if 文のブロックがあります。 ここを次のとおりに置き換えます。

# SpaceFN を実現する設定を行う
if 1:
    keymap_spacefn = keymap.defineWindowKeymap()

    define_key(keymap_spacefn, "Pause",   self_insert_command("RButton"))
    define_key(keymap_spacefn, "S-Pause", self_insert_command("S-RButton"))
    define_key(keymap_spacefn, "C-Pause", self_insert_command("C-RButton"))
    define_key(keymap_spacefn, "A-Pause", self_insert_command("A-RButton"))

    fc.space_fn_key = "Pause"
    fc.space_fn_window_keymap_list = [keymap_spacefn]
    fc.space_fn_delay_seconds = 0
    exec(readConfigExtension(r"space_fn\config.py"), dict(globals(), **locals()))

3.SpaceFN 拡張機能の設定をする

fakeymacs_extensions/space_fn 配下に行き、_config_personal2.py を config_personal.py に複写します。 (_config_personal1.py を複写する方法もありますが、その違いは README を参照ください。)

また、複写した config_personal.py の中に次の設定を追加します。(追加する場所はどこでも構いませんが、初めのところに追加するのが良いと思います。)

define_key_fn(keymap_spacefn, "U0-Space", self_insert_command("D-RButton"))

4.タスクバーから Keyhac のアイコンを右クリックし、設定のリロードを行う

smzht commented 10 months ago

基本的な使い方は以下のとおりです。

※ RButton+Space でドラッグモードに入った場合は、必ず RButton の単押しで操作を終了してください。RButton の単押しをしないとドラッグモードが終了しません。ご注意願います。

smzht commented 10 months ago

ここまで説明していることは、マウス中央ボタン(Fn2 キー)のレイヤーを使うことでもほぼ同様のことが実現できます。しかし、Fakeymacs の SpaceFN 拡張機能には、次に記載されている機能があります。

この機能が親指で使える Space 以外のキーを使って実現できるというのは便利ではないかと思います。また、SpaceFN 拡張機能のために Space を使う必要がなくなるため、Space に対して N-KRO などの複雑な設定を行わなくてよくなり、精神衛生上うれしいところです。

smzht commented 10 months ago

この設定を使ってみて感じることは、ページのスクロールが Fn2キー+トラックポイントより、Rbutton+i,k(上矢印、下矢印) の方が使いやすことです。Rbutton+h,n で PageUp、PageDown もできるので、ブラウザのページめくりには本設定の方を使っています。またこの設定は、SpaceFN 用のキーに Space を使うことで、HHKB Studio 以外のキーボードでも使える方法です。会社、自宅で HHKB Studio 以外のキーボードを使っている場合などに、つぶしが効く方法ではないかと思っています。

smzht commented 10 months ago

今後、変わるかもしれませんが、現在落ち着いている HHKB Studio のキー設定です。

Fn3 レイヤーのモディファイアキーの設定を標準レイヤーの同じ位置のモディファイアキーと右左逆のキーに設定することで、Fn3 キーを押しながらモディファイアキーを使った操作をしたとき、Windows ショートカットのキー操作が行えるようになります。Fakeymacs の SpaceFN 拡張機能で実現している機能を HHKB Studio 単体で行えることとなります。(2つ上のコメントを書いた後に気づいた機能(使い方)です。)

smzht commented 10 months ago

以下は、PFU さんに要望を出そうと考えてる機能です。

これができると、RButton に Fn3 キーを割り当て、その Oneshot 設定に RButton の機能を設定すると、Fn3 キーの単押しで RButton、Fn3 キーを押しながらのトラックポイントの操作で RButton を使ったドラッグ&ドロップが実現できます。そして、Fn3 キーとしての機能も使えることとなります。

上記の対応が難しい場合、次点の要望として次のものがあります。

例えば、標準レイヤーのマウス右ボタン に Fn3 キーを割り当てます。このままだと、標準レイヤーのマウス右ボタンからは RButton の機能が失われますが、Fn3+Space などに RButton を割り当てることは可能です。そして Fn3+Space を押した状態でトラックポイントを動かしたときに、スクロールではなく、マウスカーソルの移動が機能すれば、RButton を使ったドラッグ&ドロップが実現します。

できれば、初めの要望が実現されれば嬉しいですが、次点の対応でも Fakeymacs を使わずにマウス右ボタンを Fn キーとして実現する道が開けるので、是非対応してもらえないものかと考えています。

smzht commented 10 months ago

上記の要望(マウスボタンを Fn キーとして使いながらマウスボタンとしても使いたい)を現在の時点で実現する方法を見つけました。

まずは、新しく発見した HHKB Studio の動きです。

以上の特徴を使うと、次のようなことができます。

smzht commented 10 months ago

上記は、Fn3 レイヤーの 左ボタンに RButton を割り当てることで、より使い勝手が良くなるようです。

smzht commented 10 months ago

Fakeymacs の SpaceFN 拡張機能を使わない場合のキー設定です。

Fn2 レイヤーのモディファイアキーの設定を標準レイヤーの同じ位置のモディファイアキーと右左逆のキーに設定することで、Fn2 キーを押しながらモディファイアキーを使った操作をしたとき、Fakeymacs に登録しているキー操作ではなく、Windows ショートカットのキー操作が行えるようになります。

smzht commented 9 months ago

上記の方針に沿うHHKB Studioのキーマップの設定例をX(旧twitter)にアップしました。

smzht commented 9 months ago

ここの GitHub にも設定例の説明ページを作成しました。

smzht commented 9 months ago

上記の説明ページをトップページの README で紹介するようにしましたので、本 issue は close としたいと思います。