smzht / fakeymacs

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

use_esc_as_meta = True にして Meta キーを割り当てるとエラーが発生する #16

Closed tipotto closed 2 years ago

tipotto commented 2 years ago

いつも fakeymacs を大変便利に使わせていただいております。

今回、以下のような設定を行ったところ、設定ファイルのリロード時にエラーが発生しました。そのため解決策などをお伺いできたらと思い、ご連絡しました。

自分が過去に行った他の設定が影響しているかもしれないと思い、最新の keyhac, fakeymacs をダウンロードし、特定の箇所だけを変更して動作確認を行った際にも、同様のエラー(*1)が発生しました。

また、自分が独自に定義した関数をトリガーするキーに Meta キーを設定した場合には、異なるエラー(*2)が発生しました。そのため、トリガーする関数などによって異なるエラーが発生しているようです。

どうぞよろしくお願い致します。

バージョン

keyhac : ver1.82
fakeymacs : ver20211117_01
OS : Windows 10 Home (21H1)

設定内容

config_personal.py
use_esc_as_meta パラメータを False から True に変更

fc.use_esc_as_meta = True

以下の内容を section-base-1 に追加

fc.window_minimize_key += [["M-m", "M-l"]]

実行結果

設定ファイルのリロード時に以下のようなエラーが発生

エラー1(*1)

ERROR : 設定ファイルの実行中にエラーが発生しました.
Traceback (most recent call last):
  File "../ckit\ckit_userconfig.py", line 42, in callConfigFunc
  File "config.py", line 2206, in configure
    define_key(keymap_global, restore_key,  restore_window)
  File "config.py", line 1419, in define_key
    w_keymap = w_keymap[key]
  File ".\keyhac_keymap.py", line 633, in __getitem__
KeyError: <keyhac_keymap.KeyCondition object at 0x005DD688>
ERROR : 予期しないエラーが発生しました : _focusChanged
free variable 'is_task_switching_window' referenced before assignment in enclosing scope
      : keyhac.exe : KeyhacTaskTrayWindowClass : Keyhac
Traceback (most recent call last):
  File ".\keyhac_keymap.py", line 1123, in _focusChanged
  File ".\keyhac_keymap.py", line 1103, in updateKeymap
  File ".\keyhac_keymap.py", line 609, in check
  File "config.py", line 693, in <lambda>
    keymap_emacs = keymap.defineWindowKeymap(check_func=lambda wnd: is_emacs_target(wnd) and not is_emacs_ime_mode(wnd))
  File "config.py", line 667, in is_emacs_target
    if is_task_switching_window(window):
NameError: free variable 'is_task_switching_window' referenced before assignment in enclosing scope

エラー2(*2)

ERROR : 設定ファイルの実行中にエラーが発生しました.
Traceback (most recent call last):
  File "../ckit\ckit_userconfig.py", line 42, in callConfigFunc
  File "config.py", line 2388, in configure
    exec(readConfigPersonal("[section-base-2]"), dict(globals(), **locals()))
  File "<string>", line 47, in <module>
  File "config.py", line 1419, in define_key
    w_keymap = w_keymap[key]
  File ".\keyhac_keymap.py", line 633, in __getitem__
KeyError: <keyhac_keymap.KeyCondition object at 0x04B1DD30>
smzht commented 2 years ago

fc.window_minimize_key は keymap_global に定義されるキーとなります。M-(Meta)を使ったキーは、Esc のマルチストロークキーが使える(設定となっている)keymap_emacs の定義である必要があるため、以下の設定に変更する必要があります。

fc.window_minimize_key += [["A-m", "A-l"]]

また、A-l は fc.window_minimize_key より 後に設定される fc.lancherList_key で使われているため、こちらのキー設定も変更する必要があります。

以上、よろしくお願いします。

tipotto commented 2 years ago

返信が遅れてしまい、大変申し訳ありません。 Meta キーは keymap_emacs でのみ利用できるということなのですね。

承知致しました。 ご返信いただきありがとうございます。

smzht commented 2 years ago

本件、解決とさせていただきます。