nodoka で右 Shift キーが効かなかった件

昨日に引き続きキーカスタマイズのネタです。

実は Windows で Emacs 似のキーバインドを使いたいために nodoka というユーティリティを使っているんです。
で、今まで気付いては忘れてた挙動に「右 Shift キーでは Shift されない」というのがありました。

今回よく調べてみたところ、nodoka を一時停止すると問題無く Shift されるので、設定が原因だろうと色々試しました。
調査とログのダイアログを駆使して探った結果、下のような設定で無事に動きました。


# 右 Shift のキー名を定義
def key E0RightShift E0RShift = E0-0x36
# 右 Shift を 左 Shift とみなす
def subst E0RShift = LShift
# 仮想キーの Shift が押されるように設定
keymap Global
mod shift += E0RShift
key *E0RShift = *LShift
# nodoka を使いたくないキーマップ(KeymapDefault)にも適用
keymap KeymapDefault
mod shift += E0RShift
key *E0RShift = *LShift

これはマニュアル(カスタマイズ詳細)中央あたりの次の部分を参考にしました。

なお、右シフトキーが使えないことは致命的なので、ホスト側の のどか設定ファイルでは、window RemoteDesktop /mstsc\.exe/ を記述し、ホスト側でのキー入れ替えは無いことにして、リモート側のどかの設定ファイルでは、下記のような設定をすると良いでしょう。

def key E0RightShift E0RShift = E0-0x36

mod shift += E0RShift

key *E0RShift = *LShift

カスタマイズまわりはハマると面倒ですね。

Putty 経由の Emacs で C-M-S-v が入らない件(未解決)

今回は Emacs です。
以前から使ってはいたのですが、ここを参考に設定しなおしてみようかと思いまして。

とりあえず Ubuntu Linux の仮想マシンを用意して Putty でログインして Emacs をいじっていました。
で、サンプルの通りにキーバインド「C-,」を割り当てて使ってみると動きません。
現在の割り当てを調べる「C-h c C-,」を使ったところ、どうも「C-,」が Linux に入っていないようでした。

この問題については最終的にこのサイトを参考にして解決できました。

該当ページ中から「xterm風定義」リンクを辿ると他のキー一覧もあります。
その中でカンマを示す「VKey188」の行ですが、以下(4番目が \033[27;6;60~)が正しいのではないかと思います。
VKey188=\054,<,\033[27;5;44~,\033[27;6;60~,\033\054,\033<,\033[27;13;44~,\033[27;14;60~

引き続いて「C-M-v」の別ウィンドウスクロールの逆方向版を「C-M-S-v」(Shift を追加する)に割り当てようとしましたが、こちらは解決できませんでした。
「C-,」と同様に「VKey…」を追加すればいいかと思って下のように色々試したのですがダメでした。

試した内容

  • VKey86=,,,,,,,\033[27;14;118~
  • VKey86=,,,,,,,\033[27;14;86~
  • VKey86=,,,,,,,\033[27;14;v~
  • VKey86=,,,,,,,\033[27;14;V~
  • VKey86=,,,,,,,\033[27;5;118~
  • VKey86=,,,,,,,\033[27;5;86~
  • VKey86=,,,,,,,\033[27;5;v~
  • VKey86=,,,,,,,\033[27;5;V~

カンマ区切りのキーコード出力部の内容は 「\033[27;≪修飾コード≫;≪キーコード≫~」だろうと思っています。
この中にある「27」は多分 Escape キーの VKey コードでしょう。

どれも思うようにいかなかったので、現在はエスケープシーケンスの規則を調査中です。
参考サイトに書いてある気もしますが、英語を読むのが面倒なので Try&Error で頑張ります。

参考サイト

ちなみに「C-,」問題は nadoka で「key C-Comma = &SendText("\e[27;5;44~")」でも解決できましたが、対象文字列を入れる時に一文字ずつ(少しだけ)ウェイトがかかって微妙な気分になるので止めました…

メモ帳の置き換えで手間取った話

ずっと前に windows7 のメモ帳を置き換えて、別アプリで起動するように設定していました。ところが、一部のアプリでレポート表示を行うとエラーになる事があり、直らないかと色々試した経過を、忘れないように書いておきます。

まず結論から言うと、レジストリの HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe 中で Debugger に文字列(REG_SZ)としてアプリへのフルパス(とオプション)が書いてある場合、拡張子の関連付けよりも優先されていました。このため、いくら関連付けや notepad.exe の置き換えを試しても効果がありませんでした。おそらく環境設定系のアプリを利用した際に追加されたのだと思うのですが、普段使っているツールフォルダの中には入っていなかったようで、具体的にどうやって設定されたのかは不明です。

更に面倒を増やしていたのが、拡張子によって動作を変更するソフトを経由していた事でした。当時の自分としては設定の柔軟性を期待していたのだと思います。しかし、これがまた問題で、関連付けに従ってファイルを表示する場合は大丈夫なのですが、自力でメモ帳を指定されてしまうと exe ファイルへの拡張子別設定が利用されてしまい、肝心のテキストファイルが開かれない状態になっていました。

以上のように複数レイヤで設定されていたため、結論に辿り着くまでに散々 Try & Error を繰り返すことになりました… つくづく作業記録の重要性を感じた2時間でした。

最後に備忘録として、メモ帳置き換えを行うために試したアプリを挙げておきます。

  • Terapper : notepad.exe 置き換え型。手作業版。(本来はTerapad用)
  • NotepadBranch : notepad.exe 置き換え型。インストール版。
  • Anterix : 拡張子関連付け変更型。関連する拡張子をまとめて設定可能。
  • Contexter : 拡張子関連付け変更型。「新規作成」や「送る」の変更も可能。