persp-mode を設定してみた(ついでに helm も)

えー、今回は common lisp のコードを書こうと思ったらキーバインドが気になって、init.el を編集してるうちに elisp パッケージ探しに走ってしまい、気が付いたらリファレンスを見ながら elisp を書いていたという yak shaving の最たるものになってしまいました。
なので、せめて動いたコード片だけでも載せておこうと思います。

以下は persp-mode で新規パースペクティブを作成した時(厳密にはバッファがないパースペクティブに切り替えた時)にバッファを選択して登録する設定です。
毎度おなじみ rubikitch 様のサイトからコピーして、四苦八苦しながら希望する動作になるよう改造(改悪?)しました。
ホント、いつもお世話になってます。密度の濃い情報ありがとうございます。 > rubikitch 様
設定した persp-mode のバージョンは 20161226.2218 です。

;;; persp-mode 設定
(setq persp-add-on-switch-or-display t)
(persp-mode 1)
;;; 新規パースペクティブ作成時に追加するバッファを選択する
(defun persp-register-buffers () ; 関数名変更
  (interactive)
  (dolist (bufname (condition-case _
                       (helm-comp-read
                        "Buffers: "
                        (mapcar 'buffer-name (buffer-list))
                        :must-match t
                        :marked-candidates t)
                     (quit nil)))
    (persp-add-buffer (get-buffer bufname))))
;; ここから追加分
(defun persp-register-buffers-if-empty (mode)
  (interactive)
  (if (null (persp-buffer-list)) ; パースペクティブのバッファが空の時だけ
      (persp-register-buffers))) ; 上のバッファ選択関数を呼ぶ
(add-hook 'persp-activated-functions 'persp-register-buffers-if-empty) ; フック名が変わった?

それから、persp-mode 用の helm アクションも見様見真似で作ってみました。
いちおう動いているようですが、使用は自己責任でお願いします。

(defun helm-persp-add-buffer (buffer-or-name)
  (persp-add-buffer (helm-marked-candidates)))
(defun helm-persp-kill-buffer (buffer-or-name)
  (persp-kill-buffer (helm-marked-candidates)))
(setq helm-type-buffer-actions
      (append helm-type-buffer-actions
              '(("Add buffer(s) to perspective" . helm-persp-add-buffer)
                ("Kill buffer(s) from perspective." . helm-persp-kill-buffer))))

以上です。

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~")」でも解決できましたが、対象文字列を入れる時に一文字ずつ(少しだけ)ウェイトがかかって微妙な気分になるので止めました…

CraftLaunch から あふw を操作する件

いつも通りの不定期更新です。

今回は「CraftLaunch」(Ver3系列)からファイラーの「あふw」を操作するお話です。
つまるところ、CraftLaunch のパス補完を使って あふw の作業フォルダを一気に移動したいという事なんですが、無駄に苦労したのでメモしておくことにしました。

まずは結論ですが、config.py の window.launcher.command_list に以下の設定を追加すればいいです。
( u"afxr", command_ShellExecute(None, u"D:/tools/afxw64/afxwcmd.exe", u'&EXCD -r%param%', u"") ),
これで指定パスを右窓で開きます。

途中、紆余曲折(ソース見たり、print() でデバッグ表示したり…)がありました。
一番苦労したのは、「%param%」が処理の内部でダブルクォート(「”」です)を前後に追加していた点でした。

ええ、普通に「-r”%param%”」と書いていましたとも。
そこから苦難の旅路が始まったと言えます。
最終的にソースコードから command_ShellExecute の定義をコピーしてきて print() を埋め込んで表示を調べたら解決できました…

ちなみに、当初トライした command 定義のパラメータでゴニョゴニョする方法は挫折したままです。
どなたか「&EXCD -r”%1″」の「%1」部分に実行時引数を渡す方法をご存知でしたら、ぜひご教示いただきたいです。

vimperator でデフォルトの検索エンジンを変更する

エフセキュア株式会社がサーチエンジンを提供していると小耳に挟んだので、デフォルトの検索エンジンをそちらに変更することにしました。

Firefox、Chrome、IE それぞれについて、手順通りに行って問題は出ませんでした。

が、Firefox で使っている Vimperator で URL を開くと、以前の google で検索されます。

まあ、どこかに設定があるんだろうという事でヘルプを読んで見付けました。
備忘録として投稿しておきます。

設定したい検索エンジンのキーワードが「f-secure」であるとします。
叩くコマンドは「:」でコマンドモードに入ってから「setglobal defsearch=f-secure」です。
「setglobal defsearch」だけだと、現在の設定が表示されます。

以上で無事に設定変更が完了しました。これで一安心です。

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

ずっと前に 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 : 拡張子関連付け変更型。「新規作成」や「送る」の変更も可能。