smzht / fakeymacs Goto Github PK
View Code? Open in Web Editor NEWEmacs-like key bindings for Keyhac
License: MIT License
Emacs-like key bindings for Keyhac
License: MIT License
Emacs には shell-command-on-region というコマンドがあります。これは、リーションの内容に対して shell のコマンドでフィルターを掛け出力するコマンドで、Vim などでも実装されている機能です。
これを Fakeymacs の Extension で実装してみたいと思います。
大まかな機能は実現できていますので、後ほど develop branch にて公開していきます。
マウスのサイドボタンに「戻る/進む」が割り当てられているものの、ショートカットキー(Alt-Left/Right)には割り当てられていないアプリがあります。
(具体的にはアプリ版 MS Teams になります)
このアプリのショートカットキーに、マウスサイドボタンのクリック処理を割り当て、キーボードで「戻る/進む」を行えるように設定することは可能でしょうか?
度々済みませんがよろしくお願いいたします。
AWS Cloud9/CloudShell や GCP Cloud Shell のようなブラウザ内ターミナルについて、emacs キーバインドを無効化する設定はありますでしょうか?
(最近ブラウザ内ターミナルやエディタを使う機会が増えており、自動切替できると助かります)
「右から左に読む」を有効にするショートカットが Ctrl+LShift となっており、Fakeymacs 内でこのキーの組み合わせを発行する機能(mark や kill_line など)を使うと発生する。
アクティブウィンドウと同じアプリケーションを順に切り替える機能はありますでしょうか?
fc.window_switching_key はアプリの区別無しで順次アクティブウィンドウが切り替わると思います。
これの切り替え先を同一アプリ間に限定するもので、イメージは(タブ非対応の)シングルウィンドウアプリによくあった Ctrl-Tab での同じアプリ間のウィンドウ切替を chrome でも行えるようにするものです。
MDI やタブを持つアプリでは、Ctrl-Tab は MDI ウィンドウ間やタブ切替になっており、同一アプリ間の切替キーは無いように思っています。
(もしあった場合は申し訳ありません)
C-sは共通で保存する処理にしたいとconfig_personal.pyの[section-base-2]に
define_key(keymap_emacs, "C-s", reset_search(reset_undo(reset_counter(reset_mark(save_buffer)))))
としましたが、isearch_forwardの文字列検索になってしまうようです。
どう記述すればよろしいでしょうか?
もしくはconfig.pyに設定されたキーバインドを解除する方法はありますでしょうか?
コマンドプロンプト、gitbash等のターミナルアプリから任意のアプリを起動した際に、起動した先のアプリケーションでemacsショートカットが操作できないのですが、反映する方法はありますでしょうか?
fakeymacs の version は下記になります。
fakeymacs_version = "20230930_01"
例)
●ターミナルアプリ上でコマンドの指定
notepad.exe → 反映されない
start notepad.exe → 反映されない
●ターミナルアプリを介さずに任意のアプリを起動
ファイル名を指定して実行(win+R)上でnotepadを指定して実行 → 反映される
Windows の X サーバの実装である GWSL を使っている際、A-Tab で GWSL のウィンドウに移動すると、Ctrl が押された状態になっている。
fc.skip_settings_key が反映されないのですが、特別な方法がございますでしょうか。
GitHub から pull した状態の config.py と config_personal.py で以下の設定をしても反映されません。
Google 日本語入力で、ことえりのキーバインドで利用しています。
Fakeymacs ver.20200813_01 では、同じ設定で反映(無視)されます。
変換中に "C-e" で「前候補を選択」として動きます。
fc.skip_settings_key 以外の設定は、反映されているようです。
fc.skip_settings_key = {"keymap_global" : [],
"keymap_emacs" : [],
"keymap_ime" : [],
"keymap_ei" : ["C-e"],
"keymap_tsw" : [],
"keymap_lw" : [],
"keymap_edit_mode" : [],
}
commit 2840077
以降、Excel のセル参照ができなくなりました。
ご確認くださいませんでしょうか。
よろしくお願いいたします。
OS: Windows11 (22621.1413)
Installed IM:① Microsoft Chinese Pinyin Input ② Microsoft Japanese Input
Ctrl-Spaceで選択モードにして、移動コマンド「Ctrl-e」や「Ctrl-f」を実行したらIM切り替え動作になってしまいます。
Windows画面の右下にあるIM切り替えウィンドウが表示されますが、IMの切り替えは実質できません。
選択モードがONになっている間に、移動コマンドを押すと都度発生します。
Alt関連のコマンドでは問題ありません。
再度Ctrl-Spaceで解消できます。
当現象はFakeymacsの問題になりそうですか?またはロカールPC環境の問題になりそうですか?
いつも、利用させていただいております。
日本語変換On/Off切り替えのために、
左Shift:Off/右Shift:On
となるよう、config_personal.pyの最終行に以下の記述を追加しています。
define_key(keymap_global, "O-LShift", lambda: disable_input_method())
define_key(keymap_global, "O-RShift", lambda: enable_input_method())
右Shiftで、日本語変換OnするとEnterで、日本語変換の確定ができなくなり、
おかしな状態となることがあります。
Shiftキーなど連打後に、しばらく静観すると、確定できるようになります。
特に、MS Teamsで良く遭遇する感覚です。ランダムに発生しますが、頻度は、2割ぐらいでしょうか。
なにか解決方法ございますでしょうか
お世話になります。
chome内で検索など、日本語変換するときに ことえりキーの置き換えができていないように思われます。
firefox では問題ありません。
GitHub 最新バージョンです。
Visual Studio Codeなどにある拡張選択の機能を他のアプリケーションでも実装できればと思っております。
Visual Studio Codeのexpand selectionの説明はこちら。
https://code.visualstudio.com/docs/editor/codebasics
簡易的に
self_insert_command("C-Left", "C-S-Right")()
で単語を選択できるようにしておりますが、行先頭や文字先頭だとうまく機能しません。
カーソル位置の左右にある文字を取得するにはどうしたらよいでしょうか?
作成ありがとうございます。日々利用させていただいております。
フリーソフト かざぐるマウス で、マウス拡張ボタンにAlt+F4を設定しております。
いつの頃からか、そのボタンを押すと、ファイルエクスプローラが閉じずに、アドレス欄がドロップする現象が、常時起こるようになりました。
他のアプリは、閉じられます。また、キーボードからalt f4は、問題なく動作します。
以前はそのようなことが無かったので、config.pyファイルをさかのぼってみると、
20210601分を利用した状況では、ファイルエクスプローラが、思い通りに閉じられます。
これ以降の修正で何か影響があったようなのですが、対応可能でしょうか?
タイトル通りなのですが、動画を一時停止したくても、スペースキーではできないようです。
いままではできていたと思うのですが。
fakeymacs_version = "20231019_01"
keyhac 単体だと 停止/再開はできます。
当然、フックOFFでもできます。
日本語 Windwos で CapsLock キーを使う場合、Up イベントが発行されない場合があるため、Keyhac では CapsLock キーを Ctrl キーに置き換えることができません。一般には レジストリでキーを置き換える方法で対処していますが、この方法は PC の管理権限がないと対応できない方法と思われます。
職場などでは PC の管理権限が与えられないこともあるため、レジストリの設定をせずとも Ctrl キーとして使えるようにする方法がないか、検討します。
素晴らしいコードを利用したいのでライセンスを確認したい。
私は、
https://github.com/ncaq/.emacs.d/blob/b2c5f6404a4c8e75fbbc140b3204aea222235269/init.el#L88
のように、
Emacs本体のキーバインドを主にDvorak向けにだいぶ改造しているので、
このFakeymacsをそのまま使ったり、
想定された設定オプションの範囲で使うことが出来ません。
なので、
ncaq/keyhac-config
にこのコードの一部をコピペするか、
モジュールとして呼び出すか、
もしくはこれをforkして使うか、
と言った選択をすると思います。
特にマークで選択出来るのを実現しているのは素晴らしく、
Windowsでとても実現したいと思っています。
これらのコードのライセンスはどうなっていますか?
スクリプトですので、使いやすいようにカスタマイズしてご利用ください。
となっていますが、
ここまで来ると普通にプログラミングなので、
ライセンスが気になっています。
元々Keyhacのライセンスが不明という問題はありますが、
とりあえずこの素晴らしいスクリプトコードのライセンスを知って安心して利用したいです。
config.py
ではL1635付近で数字キーの周りのキー定義をしています。
Lines 1635 to 1640 in e6a72d2
ですが、もっと後ろのVSCode用のキー定義でCTRL+数字の定義を上書きしてしまっています。
Lines 1853 to 1854 in e6a72d2
少なくともこの数字キーの定義はオプショナルとするかVSCode専用のキーマップを導入する
方向のほうが良いのではないでしょうか。
switch_focus()
は 非 isVscodeTarget() == False
な場合なにも行われていないので
キー入力が捨てられてしまっています。詳細ログでいうとINしたキーに対してVScode以外では
THUもOUTも発生させないという定義になってしまっています。
その他のvs_code用のメソッドも同様。
TyporaでC+2といったショートカットが使えないため悩みました。
とりあえずは config_personal.py
にて当該キーを再定義することで回避しています。
# [section-base-2] ---------------------------------------------------------------------------------
## CTRL+数字キーの再設定
for n in range(10):
key = str(n)
if fc.use_ctrl_digit_key_for_digit_argument:
define_key(keymap_emacs, "C-" + key, digit2(n))
else:
define_key(keymap_emacs, "C-" + key, reset_undo(reset_counter(reset_mark(repeat(self_insert_command2("C-" + key))))))
config.py
のL1831のei_updateKeymap()
で keymap.delayedCall(keymap.updateKeymap, 100)
となっていますが、
このディレイ値(100)が大きいため思わぬ動作をすることがあります。
例えば日本語入力していって変換状態からC-mで確定し、間髪入れずにIMEをOFFにするためにC-oを
入力すると、その時点でまだkeymap_ei
のままのようで C-o
が S-Right
(文節を伸ばす)の動きを
して1文字分の範囲設定がなされ、続く英字入力でそれを上書きして消してしまいます。
サクサクと文章入力をしていると高確率でこれの動きをします。
この他のキー操作でも同様でkeymap_emacs
のキー定義を期待してる場面でkeymap_ei
の定義の
動きが実施されることがあります。
100のディレイだと大きいようなので1に修正して使ってます。
このディレイの意味を理解していないので数字は適当ですけど、自分の環境ではとりあえず良好そうです。
素晴らしいアプリをありがとうございます!
しかし、初歩的なところで躓いております。
何が間違っているのでしょうか?
Keyhacのログ
Fakeymacs version 20230923_01:
https://github.com/smzht/fakeymacs
skip settings key : [keymap_base] W-G
拡張機能ファイル vscode_key\config.py の読み込みに失敗しました
Keyhac version 1.82:
http://sites.google.com/site/craftware/
経緯
Windows11(下記はGit Bashにて)
$ cp fakeymacs/config.py keyhac/config.py
# これでKeyhac起動するとエラーは出ません
$ cp fakeymacs/_config_parameter.py keyhac/config_personal.py
$ cp -R fakeymacs/fakeymacs_extensions keyhac/extension/
# Keyhacで設定リロードするとエラー発生
# 拡張機能ファイル vscode_key\config.py の読み込みに失敗しました
$ cp fakeymacs/_config_personal.py keyhac/config_personal.py
# _config_personal.py を使っても同じエラーでした
# real_emacs を有効にしても同様エラー(real_emacs読込失敗)でした
$ cp -R fakeymacs/fakeymacs_extensions/* keyhac/extension/
# と配置しても同じエラーでした
Fakeymacsの過去版で試してみましたが同じエラー発生
Fakeymacs version 20230904_05:
https://github.com/smzht/fakeymacs
skip settings key : [keymap_base] W-G
拡張機能ファイル vscode_key\config.py の読み込みに失敗しました
設定ファイルをリロードしました.
$ ll keyhac/extension/fakeymacs_extensions/
total 0
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 browser_key/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 change_keyboard/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 change_keyboard2/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 chrome_quick_tabs/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 compact_keyboard/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 edit_mode/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 emacsclient/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 everything/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 menu_key/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 pop_ime_balloon/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 real_emacs/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 shell_command_on_region/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 space_fn/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 vscode_extensions/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 vscode_key/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 window_switching_key/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 zenkaku_hankaku/
$ ll keyhac/extension/fakeymacs_extensions/vscode_key/
total 60
-rw-r--r-- 1 foo 197610 26526 Sep 30 11:12 README.org
-rw-r--r-- 1 foo 197610 765 Sep 30 11:12 _config_personal.py
-rw-r--r-- 1 foo 197610 25709 Sep 30 11:12 config.py
$ ll keyhac
total 7139
-rw-r--r-- 1 foo 197610 16228 Apr 26 2020 _config.py
-rw-r--r-- 1 foo 197610 151475 Sep 30 11:14 config.py
-rw-r--r-- 1 foo 197610 42209 Sep 30 11:16 config_personal.py
drwxr-xr-x 1 foo 197610 0 Sep 30 11:10 dict/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:10 doc/
drwxr-xr-x 1 foo 197610 0 Sep 30 11:12 extension/
-rwxr-xr-x 1 foo 197610 119296 Apr 26 2020 keyhac.exe*
-rw-r--r-- 1 foo 197610 361 Sep 30 11:15 keyhac.ini
drwxr-xr-x 1 foo 197610 0 Sep 30 11:10 lib/
-rw-r--r-- 1 foo 197610 3023506 Apr 26 2020 library.zip
drwxr-xr-x 1 foo 197610 0 Sep 30 11:10 license/
-rwxr-xr-x 1 foo 197610 3930184 Apr 26 2020 python38.dll*
-rw-r--r-- 1 foo 197610 328 Apr 26 2020 readme_en.txt
-rw-r--r-- 1 foo 197610 302 Apr 26 2020 readme_ja.txt
drwxr-xr-x 1 foo 197610 0 Sep 30 11:10 theme/
$ ll ~/AppData/Roaming/Keyhac/
total 0
fc.emacs_ime_mode_balloon_message = None
としてもIME状態として"[A]"や"[あ]"のバルーンが出てしまいます。
popImeBalloon()
が上記変数に対応していないからかな?
とりあえず以下のようにして回避しています。
(c798c15 を使用してます)
diff -r c6439f5d7d10 config.py
--- a/config.py Mon Jun 14 10:37:45 2021 +0900
+++ b/config.py Mon Jun 14 10:55:34 2021 +0900
@@ -745,7 +745,8 @@
if ime_status is None:
ime_status = keymap.getWindow().getImeStatus()
- if not fakeymacs.is_playing_kmacro:
+ if fc.emacs_ime_mode_balloon_message and \
+ not fakeymacs.is_playing_kmacro:
if ime_status:
message = "[あ]"
else:
これがないと ei_popBalloon()
では出なくしているはずの
LINEでもバルーンがでちゃって重なっちゃいますし、
別の例として、画面キャプチャするために画面を切り替え、ALT-PrintScreenを押すタイミングで
バルーンが出てキャプチャに入り込んでしまうという嫌な弊害も。
not_emacs_target 指定をするとそのアプリ全体が無効になり、(Windows標準の?)プルダウンメニューやダイアログボックスの中も emacs キーバインドが使えなくなってしまうようです。
アプリ本体(?)では emacs キーを無効にしつつ、Windows 標準UI部品のようなものでは emacs キーを有効にする方法はありますでしょうか?
fakeymacs の version は下記になります。
fakeymacs_version = "20230606_01"
毎日便利に使っております。
Adobe Illustrator(Adobe製品全般)使用時はKeyhacを無効化したいので下記記述を入れているのですが、スペースを押したときに画面移動できません(カーソルが手の形になり画面移動できる)。
Keyhacを終了すると思った通りの挙動になります。
何か追加の設定が必要でしょうか?
fc.not_emacs_target += ["Illustrator.exe"]
fc.ime_target += ["Illustrator.exe"]
VSCode で Awesome Emacs Keymap 並に利用できる Emacs キーバインドに機能強化していきます。
とりあえず、次の機能をサポートしました。
develop branch で開発中です。
対応内容はこちらにもコメントしています。
Emacs キーバインドと連携可能な SpaceFN の機能を実装します。既に、拡張機能 space_fn として概ね動くようになっています。
コミットハッシュ 0a8723d の
config.py と _config_personal.py で以下のエラーになります。
Fakeymacs version 20200923_04:
https://github.com/smzht/fakeymacs
ERROR : 設定ファイルの実行中にエラーが発生しました.
Traceback (most recent call last):
File "../ckit\ckit_userconfig.py", line 42, in callConfigFunc
File "config.py", line 2345, in configure
exec(readConfigPersonal("[section-base-2]"), dict(globals(), **locals()))
File "", line 48
if 0
^
SyntaxError: invalid syntax
設定ファイルをリロードしました.
いつも 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"]]
設定ファイルのリロード時に以下のようなエラーが発生
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
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>
HHKB Studio の下段には 3つのボタン(キー)があり、左から LButton、Fn2、RButton が割り当てられています。真ん中のボタン(Fn2 キー)は押しながらトラックポイントを動かすとスクロールが働くようになっている他、Fn キーとしても使えるボタンとなっており、とても汎用的なボタンとなっています。一方、LButton と RButton はただのマウスのボタンとしてしか働きません。キーマップ変更ツールという専用ソフトを使って他のキーに置き換えることはできますが、そうするとマウスのボタンが使えなくなってしまいます。そこで LButton もしくは RButton を SpaceSN の拡張機能を使って、単押しではマウスボタンとして働き、他のキーと一緒に押した場合は Fn キーとして働くようにできないか考えました。
本 Issue では、この実現方法について説明します。
個人用の設定ファイル(具体的には、基本設定とコメントのあるパートまで)と、Fakeymacsクラスその他(基本設定パート以降)を別ファイルにできるようにして欲しいです。
fakeymacsがバージョンアップした時に、fakeymacsのconfig.pyだけダウンロード・上書きするだけで、個人用の設定は変えないですむようにしたいのです。
実現方法としては、個人設定用の myconfig.py みたいなファイルがあれば、それを基本設定パートに入る直前に読み込んで、デフォルト設定を上書きできるようにして欲しいし、バインディングを上書き設定するためのファイルを、最後に読み込んで欲しい。
一つのファイルに二個の設定用の関数(フック)を定義しておいて、それらがあれば実行するという実装でもよいです。
ちょっと忙しくて実装したりプルリクしたりは当面できそうにありませんが、要望事項だけあげておきます。
日本語キーボード設定をした OS 上で英語キーボードを利用するための設定の開発を進めています。
既に動く状態になっていて、近々ベータ版のリリースを行う予定です。
この Issue を使って案内をしていきます。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.