smzht / fakeymacs

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

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

Closed smzht closed 11 months ago

smzht commented 1 year ago

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

smzht commented 1 year 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 1 year ago

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

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

smzht commented 1 year ago

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

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

smzht commented 1 year ago

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

smzht commented 1 year ago

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

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

smzht commented 1 year ago

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

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

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

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

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

smzht commented 1 year ago

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

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

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

smzht commented 1 year ago

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

smzht commented 1 year ago

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

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

smzht commented 11 months ago

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

smzht commented 11 months ago

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

smzht commented 11 months ago

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