smzht / fakeymacs

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

VSCodeパネル内ターミナルを表示すると読み取り専用エディタになり入力できない問題を解消する #31

Closed rhorii closed 12 months ago

rhorii commented 1 year ago

VSCode用キー設定を有効化、fc.use_direct_input_in_vscode_terminal = Trueに設定して利用させてもらっています。

いつのタイミングからか不明ですが、C-@を入力しパネル内ターミナルを表示すると読み取りになってしまうようになりました。 image

Escを入力すると読み取り専用から脱出できるので、Escを発行するフラグを立てました。

C-@入力時のKeyhacログ

IN  : D-LCtrl
OUT : [KeyUp(162), KeyDown(162), KeyDown(162)]
IN  : D-LC-Atmark
OUT : [KeyUp(162), Key(112), KeyDown(162)]
OUT : [KeyUp(162), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), Key(0), KeyDown(162)]
OUT : [KeyUp(162), Key(13), KeyDown(162)]
IN  : U-LC-Atmark
TRU : U-LC-Atmark
IN  : O-LC-Atmark
IN  : U-LCtrl
TRU : U-LCtr

環境

Windows: 11 Pro バージョン 22H2 (OSビルド 22621.2134) Keyhac: 1.82 Fakeymacs: 20230907_03 VSCode: 1.82.2

smzht commented 1 year ago

これですが、以前は必ず Esc を発行していました。ところが、Esc を発行すると問題となる状況が発生して、次の commit で esc のパラメータを追加していました。

この時の対策漏れと思います。 状況を確認し、必要であれば pull-request を取込みますので、今しばらくお待ちください。

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

smzht commented 12 months ago

こちらの環境で現象が再現しないので、一点確認をお願いします。

Keyhac のメニューから「フックOFF」を選択した後に C-@ を入力した場合、ターミナルは正常に利用可能となるでしょうか?

rhorii commented 12 months ago

ご対応ありがとうございます。 「フックOFF」に設定した場合は、ターミナルは正常に利用可能になりました。

smzht commented 12 months ago

F1 でコマンドパレットを表示して、「Terminal: Focus on Terminal View」を選択して実行した場合はどうなるでしょうか?

rhorii commented 12 months ago

「Terminal: Focus on Terminal View」コマンドは見つかりませんでした。 近しい「View: Focus on Terminal View」コマンドを実行した場合は、ターミナルは正常に利用可能になりました。

smzht commented 12 months ago

もう一つ、確認をお願いします。 vscode 拡張機能の config.py の 435行目に、次の行があると思います。

 vscodeExecuteCommand2("terminal.focus")()

この関数名から 2 と取って vscodeExecuteCommand とし、Keyhac をリロードした後にどうなるか、確認していただけますか?

smzht commented 12 months ago

上記の確認をするときは、esc パラメータは削除するか、False にしてお願いします。

rhorii commented 12 months ago

なぜか「View: Focus on Terminal View」コマンドを実行後は問題が再現しないようになりました。 「Clear Command History」コマンドでコマンド履歴を削除すると再現するようになります。

再現する状態でvscodeExecuteCommand関数に変更して試しましたが、vscodeExecuteCommand2関数と同様に読み取り専用でターミナルが表示されます。

smzht commented 12 months ago

コマンドパレットで command id として terminal.focus を入力した際、「Terminal: Focus on Terminal View」ではなく、「Terminal: Fucus Terminal」が検索され、それが実行されることによって発生している問題の様に思います。 一度、「Terminal: Focus on Terminal View」を指定すると、それが上位に検索されるようになり、問題が発生しなくなるのだと思います。コマンドの検索方法を変える検討をしたいと思います。

なお、コマンドの開始が「Terminal:」ではなく「View:」となっている理由はまだ分かっておりません。 またこの辺りは、Japanese Language Pack の有り無しでも変わるところなので、面倒なところでもあります。

smzht commented 12 months ago

実行されているのは、「Terminal: Fucus Terminal」ではなく、「Terminal: Focus Accessible Buffer」というコマンドでした。これをコマンドパレットから実行すると、現象が再現します。

あとは、対策ですが..、まだ良い方法が見つかっていません。Japanese Language Pack の有り無しでコマンド名が変わるところがネックとなっています。

smzht commented 12 months ago

ターミナルにフォーカスするためのコマンドを変えることで対策してみました。

確認をお願いします。

rhorii commented 12 months ago

ご対応ありがとうございます。 Japanese Language Pack有り無しどちらも問題ありませんでした。

なお、コマンドの開始が「Terminal:」ではなく「View:」となっている理由はまだ分かっておりません。

プロファイルを新規作成したところ「Terminal: Focus on Terminal View」が見つかったので、なにかキャッシュ的なデータが残っているのかもしれません。

旧プロファイル スクリーンショット 2023-09-23 090100

新プロファイル スクリーンショット 2023-09-23 094345

smzht commented 12 months ago

確認ありがとうございます。原因が解明された対策となって良かったです。

ということで、本件クローズとさせていただきます。報告ありがとうございました。