編集キーと矢印キー、カーソル・キーの一元化

68 views
Skip to first unread message

irita...@gmail.com

unread,
Jun 29, 2016, 1:24:30 AM6/29/16
to Karabiner-ja
入谷です。

以前と比べてもKarabinerの設定が進化しているので、驚いています。とりわけ、mouse_keys.xmlの「Mouse Keys Mode v2」が軽快で素晴らしいです。

そこでhjkl_arrow.xmlも含めたedit_allow_cursor.xmlを作りたいです。

ところが、これまでの矢印キーの設定は、
    FN•H --> LEFT
    FN•U --> RIGHT
    FN•I --> UP
    FN•O --> DOWN
    FN•L --> DOWN

そこで、矢印キーの設定を;
    E+H --> LEFT
    E+U --> RIGHT
    E+I --> UP
    E+O --> DOWN
    E+L --> DOWN
    -------------------------------------------- 下の部分は質問外です。
    E+G --> ^A
    E+Y --> ^E
    E+7 --> HOME
    E+8 --> END
    E+9 --> PAGE UP
    E+0 --> PAGE DOWN
    E+- --> ⌘Z
    E+= --> ⇧⌘Z
    E+J --> RETURN
    E+N --> DELETE
    E+M --> FORWARD-DELETE
     -------------------------------------------- 上の部分は質問外です。
 
通常のカーソル動作を;
    D+H --> LEFT
    D+U --> RIGHT
    D+I --> UP
    D+O --> DOWN
    D+L --> DOWN
   
スクロール動作を;
    S+D+H --> LEFT
    S+D+U --> RIGHT
    S+D+I --> UP
    S+D+O --> DOWN
    S+D+L --> DOWN
   
高速動作に「F」を追加。

カーソルの中央移動;
    D+A
   
   
ボタン動作
    D+C --> left click
    D+V --> middle click
    D+B --> right click
===================================

まだ二個以上の制御キー(S+D, F+S+D)の仕組みが判っていいないで恐縮ですが、変更方針をお教えくださると有難いです。

もしも{{VI_U}},{{VI_O}},{{ VI_L}}などが定義されているなら、どこに格納されているのでしょうか?

Takayama Fumihiko

unread,
Jun 29, 2016, 12:22:13 PM6/29/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

E+H,E+U,...などについては、以下のXMLをコピーした上で、

https://github.com/tekezo/Karabiner/blob/version_10.20.0/src/core/server/Resources/include/checkbox/vi_mode.xml#L6-L92

以下の4つの文字列を置換するとうまく作れるかとおもいます。

----------------------------------------
KeyCode::S

KeyCode::E

remap.simple_vi_mode

private.simple_vi_mode

KeyCode::VK_CONFIG_FORCE_ON_notsave_simple_vi_mode,

KeyCode::VK_CONFIG_FORCE_ON_notsave_private_simple_vi_mode,

notsave.simple_vi_mode

notsave.private_simple_vi_mode

----------------------------------------


mouse keysのほうもこちらのXMLをコピーして同様に変更してください。

https://github.com/tekezo/Karabiner/blob/version_10.20.0/src/core/server/Resources/include/checkbox/mouse_keys.xml#L11-L121


VI_Hなどはreplacementdef.xmlに定義されています。
https://github.com/tekezo/Karabiner/blob/version_10.20.0/src/core/server/Resources/replacementdef.xml#L14-L32

--
Takayama Fumihiko <tek...@pqrs.org>

irita...@gmail.com

unread,
Jun 30, 2016, 9:36:22 AM6/30/16
to Karabiner-ja, irita...@gmail.com
ご回答、ありがとうございます。

ちょっと時間が取れず、明日に試してみます。

2016年6月29日水曜日 14時24分30秒 UTC+9 irita...@gmail.com:

irita...@gmail.com

unread,
Jul 3, 2016, 3:20:44 PM7/3/16
to Karabiner-ja, irita...@gmail.com
中間報告です。

vi_mode.xmlをprivateに変更して無事に動きました。早速、機動キーを「S」→「SPACE」にしても動いたのは感動ものでした。

[VI_H]などの代わりに「_lt],[_rt],[_up],[_dn]などと定義するのは許されますか?

当面、編集キーの使い勝手を調整します。

マウスでは「SPACE」をトリガーにしたのは、問題を複雑にしますでしょうか?

2016年6月30日木曜日 22時36分22秒 UTC+9 irita...@gmail.com:

Takayama Fumihiko

unread,
Jul 4, 2016, 10:24:03 AM7/4/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

>
[VI_H]などの代わりに「_lt],[_rt],[_up],[_dn]などと定義するのは許されますか?

もちろん大丈夫ですし、private.xmlであれば、KeyCode::Uなどのように
直接書いたほうがわかりやすいかと思います。

(Karabinerに含めている設定は、
後から挙動を調整出来るように{{ VI_H }}などを使っていますが、
private.xmlの場合はファイルをそのまま書き換えてしまえば良いので、
VI_Hなどを使う必要はありません。)


> マウスでは「SPACE」をトリガーにしたのは、問題を複雑にしますでしょうか?

特に問題はないですが、スペースキーなどは誤爆しやすいですので
使い勝手を確かめながら調整していってみてください。

--
Takayama Fumihiko <tek...@pqrs.org>

irita...@gmail.com

unread,
Jul 4, 2016, 11:45:30 AM7/4/16
to Karabiner-ja, irita...@gmail.com
コメント有難うございます。

操作については納得しました。私のキー入力は速くないのですが、誤爆をよく起こします。今回のキーボードはフラットであり、あまり誤爆が多そうではありません。手のサイズも日本人の平均か、左手が数ミリ短いくらいです。でSIMPLE_VI_MODE_2なしで観察すると、打ち初めはいいのですが、左手の小指の開きがだんだんと狭くなり誤爆しやすくなるようです。

そこで、SIMPLE_VI_MODE_2が動き出したので、早速ためした訳です。同時押しの片方がスペース・バーなので、気楽にずらしながら打てるので指のストレスは大変に緩和しました。また、左右の親指を交代しながらも運行できます。


SIMPLE_VI_MODE_2に関する3質問です;

[Q1] (文書の先頭/末尾)へのカーソル

加速キーとして「FN」を使用していると思います。この場合、(FN+CURSOR_UP/DOWN)だと(文書の先頭/末尾)に飛びますが、カーソルは移動しません。カーソルの移動を伴うためには(COMMAND+CURSOR_UP/DOWN)を使えばよいようです。回避できればありがたいです。

[Q2] 擬似ワード移動

あるところにカーソルがあって、
•そこから前方側の最短距離にある空白の直後にカーソル移動。
•そこから後方側の最短距離にある空白の直後にカーソル移動。
という処理を記述するのは可能でしょうか?


  時間が空いた時にコメントをいただけるとありがたいです。

2016年7月4日月曜日 23時24分03秒 UTC+9 Fumihiko Takayama:

Takayama Fumihiko

unread,
Jul 5, 2016, 2:30:59 AM7/5/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

> *[Q1] (文書の先頭/末尾)へのカーソル*

HOMEキーがカーソル移動を伴わないのはOS
X自体の仕様なので回避が難しいことの一つです。
(DefaultKeyBinding.dictの変更で可能になるかもしれません)
http://osxnotes.net/keybindings.html

> (COMMAND+CURSOR_UP/DOWN)

以下のようなautogenをprivate.xmlのvi modeの中に追加すればOKです。

<autogen>
__KeyToKey__
KeyCode::K, ModifierFlag::FN,
KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L,
</autogen>

ただ、Command+Upは効かない場面もあるので(Finderなど)、
好みにあわせて使い分けてください。


> *[Q2] 擬似ワード移動*あるところにカーソルがあって、

前方側は「Option+Left」、
後方側は「Option+Right, Option+Right, Option+Left」のセットで
移動するような形になります。

--
Takayama Fumihiko <tek...@pqrs.org>

On 7/5/16 00:45, irita...@gmail.com wrote:
> コメント有難うございます。
>
> 操作については納得しました。私のキー入力は速くないのですが、誤爆をよく起こします。今回のキーボードはフラットであり、あまり誤爆が多そうではありません。手のサイズも日本人の平均か、左手が数ミリ短いくらいです。でSIMPLE_VI_MODE_2なしで観察すると、打ち初めはいいのですが、左手の小指の開きがだんだんと狭くなり誤爆しやすくなるようです。
>
> そこで、SIMPLE_VI_MODE_2が動き出したので、早速ためした訳です。同時押しの片方がスペース・バーなので、気楽にずらしながら打てるので指のストレスは大変に緩和しました。また、左右の親指を交代しながらも運行できます。
>
>
> SIMPLE_VI_MODE_2に関する3質問です;
>
> *[Q1] (文書の先頭/末尾)へのカーソル*
>
> 加速キーとして「FN」を使用していると思います。この場合、(FN+CURSOR_UP/DOWN)だと(文書の先頭/末尾)に飛びますが、カーソルは移動しません。カーソルの移動を伴うためには(COMMAND+CURSOR_UP/DOWN)を使えばよいようです。回避できればありがたいです。
>
>
>
> *[Q2] 擬似ワード移動*あるところにカーソルがあって、
> •そこから前方側の最短距離にある空白の直後にカーソル移動。
> •そこから後方側の最短距離にある空白の直後にカーソル移動。
> という処理を記述するのは可能でしょうか?
>
>
> 時間が空いた時にコメントをいただけるとありがたいです。
>
> 2016年7月4日月曜日 23時24分03秒 UTC+9 Fumihiko Takayama:
>>
>> 高山です。こんにちは。
>>
>> >
>> [VI_H]などの代わりに「_lt],[_rt],[_up],[_dn]などと定義するのは許されますか?
>>
>> もちろん大丈夫ですし、private.xmlであれば、KeyCode::Uなどのように
>> 直接書いたほうがわかりやすいかと思います。
>>
>> (Karabinerに含めている設定は、
>> 後から挙動を調整出来るように{{ VI_H }}などを使っていますが、
>> private.xmlの場合はファイルをそのまま書き換えてしまえば良いので、
>> VI_Hなどを使う必要はありません。)
>>
>>
>> > マウスでは「SPACE」をトリガーにしたのは、問題を複雑にしますでしょうか?
>>
>> 特に問題はないですが、スペースキーなどは誤爆しやすいですので
>> 使い勝手を確かめながら調整していってみてください。
>>
>> --
>> Takayama Fumihiko <tek...@pqrs.org <javascript:>>

irita...@gmail.com

unread,
Jul 5, 2016, 7:45:19 AM7/5/16
to Karabiner-ja, irita...@gmail.com
> HOMEキーがカーソル移動を伴わないのはOS
> X自体の仕様なので回避が難しいことの一つです。

そうなのですか、初めて知りました。今の段階ではご紹介資料もさっぱり判りませんが、追い追い調べてみます。


> __KeyToKey__
>      KeyCode::K, ModifierFlag::FN,
>      KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L, 

危うく他の2つのキーにアサインするところでした。お陰様で、主要キーは全てSPACEを打ち下ろしている時に「中央部のキーだけ」で操作できます。贅沢な悩みは「左右のSHIFT」だけは代換えがないことです。



> 前方側は「Option+Left」、
> 後方側は「Option+Right, Option+Right, Option+Left」のセットで
> 移動するような形になります。

 うむ、これも初めて知りました。早速動かしてみます。
 
 
 ちょっと話が逸れます。矢印キーのセットを;
  • huio ←→↑↓
 としていたのですが、指は下側を優先するらしく;
  •  huio ←→↓↑
 となりましたよ。 高山さんのお勧め;
  •  huio ←↓↑→

が判った気がしました。


2016年7月5日火曜日 15時30分59秒 UTC+9 Fumihiko Takayama:

irita...@gmail.com

unread,
Jul 5, 2016, 11:16:48 AM7/5/16
to Karabiner-ja, irita...@gmail.com
その後の経緯です。

これは今の所、良好に作動しています。

> __KeyToKey__
>      KeyCode::K, ModifierFlag::FN,
>      KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L, j

問題なのは

> 前方側は「Option+Left」、
> 後方側は「Option+Right, Option+Right, Option+Left」のセットで
> 移動するような形になります。

当方は、Yosemite 10.10.5で、ディフォールトで「Mission Control」に「Option+Up」や「Option+Left」などが設定されています。これらを解除したものの「Option+Left」等を手動で作ってもなにも応答がありません。設定方法がわかれば、ご教示いただけますでしょうか?

2016年7月5日火曜日 20時45分19秒 UTC+9 irita...@gmail.com:

irita...@gmail.com

unread,
Jul 5, 2016, 6:55:28 PM7/5/16
to Karabiner-ja, irita...@gmail.com
昨日は久しぶりに運動をしたので「DefaultKeyBinding.dict」の先頭部だけを見て、寝てしまいました...。

今朝、拝見すると;
簡単な表記;
^ control
~ option
$ shift
@ command
# numpad
も面白いですし、「Emacs keybindings」なんて項目も。

当面、StandardKeyBinding.dictの周りで遊んでみます。まだKarabinerとの接点が霧の彼方ですが。

2016年7月6日水曜日 0時16分48秒 UTC+9 irita...@gmail.com:

Takayama Fumihiko

unread,
Jul 7, 2016, 12:36:50 AM7/7/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

> 当方は、Yosemite 10.10.5で、ディフォールトで「Mission
> Control」に「Option+Up」や「Option+Left」などが設定されています。

Mission ControlはデフォルトではControl+Leftなどになっています。
EventViewerなどで確認しつつ、Option+Left,Rightを試してみてください。

--
Takayama Fumihiko <tek...@pqrs.org>
>> - huio ←→↑↓
>>
>> としていたのですが、指は下側を優先するらしく;
>>
>> - huio ←→↓↑
>>
>> となりましたよ。 高山さんのお勧め;
>>
>> - huio ←↓↑→

irita...@gmail.com

unread,
Jul 7, 2016, 11:29:11 PM7/7/16
to Karabiner-ja, irita...@gmail.com
 
> Mission ControlはデフォルトではControl+Leftなどになっています。
> EventViewerなどで確認しつつ、Option+Left,Rightを試してみてください。

この手の確認には気楽に使えるTextEditを使っていたのですが、CotEditorにしてカーソルに色をつけてから試しました;
^+←/→  --> ^A/E と同一。
^+↑/↓  --> Home/End と同一。

上記をEventViewerで見ても、単純に^+/←/↑/↓/→に見えるだけです。

このテストの前後で、Terminal.appで「forward delete」を打つと「~」が出てくるのがわかり、.xmlが壊れたかと思い調べましたが問題無し。各種エディタやXcodeでも問題無し。「zsh > bash」に変えると正常となる。ここらはzsh5.2系で解決しているかも。

zshでのキー・バインディングを調べてみました;
% bindkey -e;bindkey | grep 'word'
"^W" backward-kill-word
"^X*" expand-word
"^Xc" _correct_word
"^Xe" _expand_word
"^[^H" backward-kill-word
"^[^_" copy-prev-word
"^[\$" spell-word
"^[." insert-last-word
"^[B" backward-word
"^[C" capitalize-word
"^[D" kill-word
"^[F" forward-word
"^[L" down-case-word
"^[S" spell-word
"^[T" transpose-words
"^[U" up-case-word
"^[_" insert-last-word
"^[b" backward-word
"^[c" capitalize-word
"^[d" kill-word
"^[f" forward-word
"^[l" down-case-word
"^[s" spell-word
"^[t" transpose-words
"^[u" up-case-word
"^[~" _bash_complete-word
"^[^?" backward-kill-word
%

ここら辺から単語操作について調べてみます。まだ痒いところに指が出ない感じです(笑)。

また以前、教えていただいたDefaultKeyBinding.dictにあるStandardKeyBinding.dictのコマンド;
$ plutil -convert xml1 /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict -o -|pl|grep -v noop:|ruby -pe'$_.gsub!(/[^ -~\n]/){"\\U%04x"%$&.ord}'

を打っても、1つの空行が出力されるだけです。ここらも気長に調べてみます。


「現状」

カーソルの制御自体はほぼ煮詰まりました。右手で操作する来いーもあと4〜8となっています。現在マウス操作の左手の机上検討中です。マウス操作はシビアなので、一種のモード・ロックが欲しそうです...。


2016年7月7日木曜日 13時36分50秒 UTC+9 Fumihiko Takayama:

Takayama Fumihiko

unread,
Jul 8, 2016, 1:34:45 AM7/8/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

> ^+←/→ --> ^A/E と同一。
> ^+↑/↓ --> Home/End と同一。

この挙動はCommand+矢印ですね。
一度Karabinerを切ってから、カーソルの挙動についてご確認いただくと
わかりやすいかもしれません。

--
Takayama Fumihiko <tek...@pqrs.org>
> *「現状」*
> カーソルの制御自体はほぼ煮詰まりました。右手で操作する来いーもあと4〜8となっています。現在マウス操作の左手の机上検討中です。マウス操作はシビアなので、一種のモード・ロックが欲しそうです...。
>
>
> 2016年7月7日木曜日 13時36分50秒 UTC+9 Fumihiko Takayama:
>>
>> 高山です。こんにちは。
>>
>> > 当方は、Yosemite 10.10.5で、ディフォールトで「Mission
>> > Control」に「Option+Up」や「Option+Left」などが設定されています。
>>
>> Mission ControlはデフォルトではControl+Leftなどになっています。
>> EventViewerなどで確認しつつ、Option+Left,Rightを試してみてください。
>>
>> --
>> Takayama Fumihiko <tek...@pqrs.org <javascript:>>

irita...@gmail.com

unread,
Jul 8, 2016, 6:08:28 PM7/8/16
to Karabiner-ja, irita...@gmail.com
この挙動はCommand+矢印ですね。
一度Karabinerを切ってから、カーソルの挙動についてご確認いただくと
わかりやすいかもしれません。

早速試しました。「Quit Karabiner」をクリックして、 Karabinerのダブルクリックをしましたが状況は変わりませんでした。この問題は気長にトライしてみます;エディタ以外の環境でも単語単位の移動は実装したいですから。


カーソル制御もほぼ煮詰まったので、気分転換の為に、ポインターの制御を導入ました。前回の教えを参考に実行できました。

これまでにカーソル操作にだいぶ慣れてきているので、ポインター操作もすぐに慣れました。ただし、LogitechのK380はストロークが短か。指が疲れやすい様です。

詳しく説明します;
Karabiner本体の「Mouse Keys Mode v2」の設定として説明しますと、
•「D」(中指)を保持するのが辛いです。
•「F」(示指)は問題ありません。
•「S」(薬指)はあまり長時間に使わないのと、他のキーに変更して改善する可能性があります。

そこで予備機のPFUの「HHKB Lite2」で同じ操作をするとだいぶ楽です。ストロークは長いですが、キーの作動力が低いからだと思います。

なんらかの方法で「D」の保持・解除がつけられると嬉しいです。でも、お時間のあるときにご検討くださるの十分です。

2016年7月8日金曜日 14時34分45秒 UTC+9 Fumihiko Takayama:

Takayama Fumihiko

unread,
Jul 10, 2016, 11:50:32 PM7/10/16
to irita...@gmail.com, osx-kara...@googlegroups.com
高山です。こんにちは。

> 早速試しました。「Quit Karabiner」をクリックして、 Karabinerのダブルク
> リックをしましたが状況は変わりませんでした

Karabinerが起動していると、変換によって
物理キーとアプリに渡されるキーが異なってしまうため、
option+矢印キーのつもりでcontrol+矢印キーやcommand+矢印キーを
確認されているようでしたので、Karabinerを介さずに
クリーンな環境でoption+矢印キーの動作を確認されたほうが
良いのではないかと思った次第です。


> なんらかの方法で「D」の保持・解除がつけられると嬉しいです。でも、お時間
> のあるときにご検討くださるの十分です。

トグルだとMouse Keys v1の
「Holding "M" key to toggle Mouse Keys Mode」
がそれっぽい挙動をしますので、これをベースにいじるのがよいかもしれません。

Mouse Keys v2は「使う頻度が高いキーをモード切り替えキーとして使い、
キーが押されたときだけマウスキーとして使う」という挙動を実現するために
誤爆防止のためのいろいろな仕組みが入っているため、
通常のトグルでよければMouse Keys v1のほうがシンプルでいじりやすいです。

--
Takayama Fumihiko <tek...@pqrs.org>
> Takayama Fumihiko <tek...@pqrs.org <javascript:>>
>
> On 7/8/16 12:29, irita...@gmail.com <javascript:> wrote:
> >
> >
> >>> Mission ControlはデフォルトではControl+Leftなどになっています。
> >>> EventViewerなどで確認しつつ、Option+Left,Rightを試してみてくださ
> --
> このメールは Google グループのグループ「Karabiner-ja」に登録しているユー
> ザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> osx-karabiner-...@googlegroups.com
> <mailto:osx-karabiner-...@googlegroups.com> にメールを送信し
> てください。
> このディスカッションをウェブ上で閲覧するには
> https://groups.google.com/d/msgid/osx-karabiner-ja/b914ee36-8cf3-497a-ae04-4bcdc13fe00a%40googlegroups.com
> <https://groups.google.com/d/msgid/osx-karabiner-ja/b914ee36-8cf3-497a-ae04-4bcdc13fe00a%40googlegroups.com?utm_medium=email&utm_source=footer>
> にアクセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセ
> スしてください。

irita...@gmail.com

unread,
Jul 11, 2016, 1:46:28 AM7/11/16
to Karabiner-ja, irita...@gmail.com
高山さん、コメント有難うございます。

ここ数日、Karabiner漬けでした。だいぶ判ってきたような感じです。以下に報告します。

単語ごとの移動などを調べるうちに、「OS X key binding emacs」から探すと興味深い2つのサイトが見つかりました;
  1. (Emacs) Keyboard Shortcuts for Editing Text Fields in OS X
  2. Default Mac OS X System Key Bindings

1は素人にも判りやすいのですが、上下の矢印の例が少ないので、2について、手動で確認しましたが、良好に動作しています。基本的には矢印キーに対して;
  • 修飾なし
  • ⌥修飾
  • ⌘修飾
  • ⇧修飾のみ
  • ⇧+⌥修飾
  • ⇧+⌘修飾
を用意すると、ほとんどの編集操作ができることがわかりました。

で、従来の「F(ast)」を修飾記号の一つとして再定義し、同時に「S(hift)」を追加定義したところ、2種類の編集操作が出来ました。あと4つ追加してみます、操作がぐっと遅くなるかが気になっています。


先のサイトの表をみていて、フォーワード・デリートが「^D」とあったので、Terminal.appにて手動で確かめたところ正しく動作しました。private.xmlでも同様でした。


話が飛びますが、ポインターやスクロールのほうも大変に重宝しています。まだ手が自然とマウスに移動しかけますが、移動量の差が愕然と多いので、徐々にマウスから抜け出さそうです。指の配置をロックしやすい密集形をとったところ、疲労は意外と少ないです。そろそろ時間パラメータの調節にトライしたいです。

で、ご紹介の;

トグルだとMouse Keys v1の
「Holding "M" key to toggle Mouse Keys Mode」
がそれっぽい挙動をしますので、これをベースにいじるのがよいかもしれません。

Mouse Keys v2は「使う頻度が高いキーをモード切り替えキーとして使い、
キーが押されたときだけマウスキーとして使う」という挙動を実現するために
誤爆防止のためのいろいろな仕組みが入っているため、
通常のトグルでよければMouse Keys v1のほうがシンプルでいじりやすいです。

現行のxmlが感動してから、トライします。思えば、数年経って、ようやくKarabinerが身に沁みてきたようです。

2016年7月11日月曜日 12時50分32秒 UTC+9 Fumihiko Takayama:
> <mailto:osx-karabiner-ja+unsub...@googlegroups.com> にメールを送信し
Reply all
Reply to author
Forward
0 new messages