DiredでAlt+↑のキーバインドを作る
Alt+上矢印で上の階層に行くキーバインドが欲しくなって探したらコードはあったのでキーバインドのコードを追加するだけでできた。
設定
25.3.5 フォルダを開く時, 新しいバッファを作成しない ― dired
これを.emacsファイルに貼り付ける。init-loaderがある人は30_init-dired.elとかに貼ってください。
(defun dired-my-advertised-find-file () (interactive) (let ((kill-target (current-buffer)) (check-file (dired-get-filename))) (funcall 'dired-advertised-find-file) (if (file-directory-p check-file) (kill-buffer kill-target)))) (defun dired-my-up-directory (&optional other-window) "Run dired on parent directory of current directory. Find the parent directory either in this buffer or another buffer. Creates a buffer if necessary." (interactive "P") (let* ((dir (dired-current-directory)) (up (file-name-directory (directory-file-name dir)))) (or (dired-goto-file (directory-file-name dir)) ;; Only try dired-goto-subdir if buffer has more than one dir. (and (cdr dired-subdir-alist) (dired-goto-subdir up)) (progn (if other-window (dired-other-window up) (progn (kill-buffer (current-buffer)) (dired up)) (dired-goto-file dir)))))) (define-key dired-mode-map "\C-m" 'dired-my-advertised-find-file) (define-key dired-mode-map "^" 'dired-my-up-directory)
このコードに下の一行を追加するだけでいい。追加するのは最後がいいと思う。
(define-key dired-mode-map [M-up] 'dired-my-up-directory)
こうすればM+↑で上の階層にいける。
キーバインドの設定の際に
キーバインドの設定はkbdのあるなしで、書き方がいろいろあって困る。この際ざっと調べてみようと思ったので調べてみた。
find ./ -name '*.el' | xargs grep define-key > log.txt
こんなコマンドで再帰的に調べて抽出したら、elファイルからいろいろ例がたくさん出てくる。
kbd なし
間違い (define-key dired-mode-map "[up]" 'dired-my-up-directory) × (define-key dired-mode-map <up> 'dired-my-up-directory) × (define-key dired-mode-map "C-<up>" 'dired-my-up-directory) × (define-key dired-mode-map "<C-up>" 'dired-my-up-directory) × (define-key dired-mode-map "C-m" 'dired-my-up-directory) × 正解 (define-key dired-mode-map "k" 'dired-my-up-directory) ○ (define-key dired-mode-map [up] 'dired-my-up-directory) ○ (define-key dired-mode-map [C-up] 'dired-my-up-directory) ○ (define-key dired-mode-map [C-M-up] 'dired-my-up-directory) ○ (define-key dired-mode-map "\C-m" 'dired-my-up-directory) ○</pre><br />
kbd あり
間違い (define-key dired-mode-map (kbd k) 'dired-my-up-directory) × (define-key dired-mode-map (kbd [up]) 'dired-my-up-directory) × 正解 (define-key dired-mode-map (kbd "h") 'dired-my-up-directory) ○ (define-key dired-mode-map (kbd "C-h") 'dired-my-up-directory) ○ (define-key dired-mode-map (kbd "\C-h") 'dired-my-up-directory) ○ (define-key dired-mode-map (kbd "<up>") 'dired-my-up-directory) ○ (define-key dired-mode-map (kbd "C-x C-e") 'dired-my-up-directory) ○ (define-key dired-mode-map (kbd "C-<up>") 'dired-my-up-directory) ○
ざっと調べてこんな感じになった。
この結果を見ると、kbdなしの場合は
kbdなし |
---|
ダブルクォートで囲む |
C(Ctrl)とかM(Alt)に、バックスラッシュをつける(の中は除く) |
<>は使えない |
上矢印とかの特殊なキーはで囲む |
Ctrl+上矢印とかする場合、[C-up]とする |
kbdありの場合は
kbdあり |
---|
基本ダブルクォーテーションで囲む |
バックスラッシュは気にしなくても大丈夫みたい。 |
<>は使える |
上矢印とかの特殊なキーは<>で囲む |
Ctrl+上矢印とする場合、"C- |
こんな感じになった。
htmlの練習にもなったのでよかったと思う。ブログでtableを使ってまとめるとかなり見栄えは良くなると思う。けれど毎回やるのは時間がかかるけどどうしたものか。yasnippetとかでかなり時間は短縮できてはいるけど。
参考サイト
25.3.5 フォルダを開く時, 新しいバッファを作成しない ― diredEmacs で改行を検索したり置換したり
あるディレクトリ以下を再帰的に grep する方法
<table> - テーブル(表)
M. キーボードマクロ (2004/01/12)