[Mac][Emacs] diredでFinder風キーバインドを使う

キーバインドはなるべく統一したほうが誤操作もなくなり操作感も向上します。MacではファイラーにFinderを使いますが、Emacsのdiredとはキーバインドがかなり異なるので多少なりとも合わせたいところ。特にディレクトリ移動のキーバインドが気になるので追加設定してみました。

ディレクトリ移動関係のキーバインド比較

Emacs dired

上のディレクトリへ ^
ファイルを開く RET
ディレクトリの中に移動する RET
ディレクトリを開いて中を表示 なし
開いたディレクトリを閉じる なし

Mac Finder

上のディレクトリへ ⌘-<up>
ファイルを開く ⌘-o
ディレクトリの中に移動する ⌘-<down>
ディレクトリを開いて中を表示 ⌘-<right>
開いたディレクトリを閉じる ⌘-<left>

※ ⌘はCommandキー

こんな感じで結構違いますしEmacsのdiredには無い機能もあります。⌘+矢印キーでディレクトリを縦横無尽に移動することはよくやるのでこの辺が違うと結構いらっときます。

後はMacのFinderではReturnキーを押すとファイル名変更という全く違うキーバインドです。これはMacのキーバインドが変わっているように思いますが、Macで⌘-oでファイルを開くことに慣れてしまうと逆にEmacsで同じキーバインドでファイルが開けないことにストレスを感じます。

というわけでキーバインドや機能を追加

というわけでEmacsのdiredにキーバインドを追加しました。Macユーザーに限ると思いますが個人的にはかなり快適に使えています。また既存のdiredのキーバインドは消していないのでdiredのキーバインドもそのまま使えます。Cでコピーとか、Rで移動とか、mでマークとかそのままです。

Emacsにもともと無いフォルダを開く部分の機能はdired-subtreeを追加しています。

Emacsの設定

⌘(Command)キーをsuperキーに設定

⌘キーをsuperキーに設定しています。hyperキーなどにしても良いと思いますがmetaキーにすると動かないというかたぶん他のキーバインドとバッティングしてしまうかと思います。

<span style="color: #DCDCCC;">(</span><span style="color: #F0DFAF; font-weight: bold;">when</span> <span style="color: #BFEBBF;">(</span>eq system-type 'darwin<span style="color: #BFEBBF;">)</span>
  <span style="color: #BFEBBF;">(</span><span style="color: #F0DFAF; font-weight: bold;">when</span> <span style="color: #D0BF8F;">(</span>eq window-system 'ns<span style="color: #D0BF8F;">)</span>
    <span style="color: #D0BF8F;">(</span><span style="color: #F0DFAF; font-weight: bold;">setq</span> <span style="text-decoration: underline;">ns-command-modifier</span> 'super
          <span style="text-decoration: underline;">ns-alternate-modifier</span> 'meta<span style="color: #D0BF8F;">)</span><span style="color: #BFEBBF;">)</span>
  <span style="color: #BFEBBF;">(</span><span style="color: #F0DFAF; font-weight: bold;">when</span> <span style="color: #D0BF8F;">(</span>eq window-system 'mac<span style="color: #D0BF8F;">)</span>
    <span style="color: #5F7F5F;">;; </span><span style="color: #7F9F7F;">&#24038;Command&#12461;&#12540;&#12434;Super&#12395;&#12289;&#21491;Command&#12461;&#12540;&#12434;Meta&#12395;
</span>    <span style="color: #5F7F5F;">;; </span><span style="color: #7F9F7F;">&#24038;Opt&#12461;&#12540;&#12434;Meta&#12395;&#12289;&#21491;Opt&#12461;&#12540;&#12434;hyper&#12395;
</span>    <span style="color: #D0BF8F;">(</span><span style="color: #F0DFAF; font-weight: bold;">setq</span> mac-command-modifier 'super
          mac-option-modifier 'meta
          mac-right-command-modifier 'meta
          mac-right-option-modifier 'hyper<span style="color: #D0BF8F;">)</span><span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>

diredでディレクトリを開く/閉じるを利用するためにdired-subtreeをインストールします。

GitHub - Fuco1/dired-hacks: Collection of useful dired additions
https://github.com/Fuco1/dired-hacks

<span style="color: #DCDCCC;">(</span><span style="color: #F0DFAF; font-weight: bold;">use-package</span> <span style="color: #BFEBBF; font-weight: bold; text-decoration: underline;">dired-subtree</span> <span style="color: #DCDCCC; font-weight: bold;">:ensure</span> t<span style="color: #DCDCCC;">)</span>

diredにFinder風のキーバインドを追加。

<span style="color: #DCDCCC; text-decoration: underline;">(</span><span style="color: #F0DFAF; font-weight: bold;">bind-keys</span> <span style="color: #DCDCCC; font-weight: bold;">:map</span> <span style="text-decoration: underline;">dired-mode-map</span>
           <span style="color: #5F7F5F;">;; </span><span style="color: #7F9F7F;">Mac&#12398;Finder&#12392;&#25805;&#20316;&#24863;&#12434;&#21512;&#12431;&#12379;&#12427;
</span>           <span style="color: #BFEBBF;">(</span><span style="color: #CC9393;">"s-&lt;up&gt;"</span>    . dired-subtree-up-dwim<span style="color: #BFEBBF;">)</span>
           <span style="color: #BFEBBF;">(</span><span style="color: #CC9393;">"s-&lt;right&gt;"</span> . dired-subtree-insert<span style="color: #BFEBBF;">)</span>
           <span style="color: #BFEBBF;">(</span><span style="color: #CC9393;">"s-&lt;left&gt;"</span>  . dired-subtree-remove<span style="color: #BFEBBF;">)</span>
           <span style="color: #BFEBBF;">(</span><span style="color: #CC9393;">"s-&lt;down&gt;"</span>  . dired-find-alternate-file<span style="color: #BFEBBF;">)</span>
           <span style="color: #BFEBBF;">(</span><span style="color: #CC9393;">"s-o"</span>       . dired-find-alternate-file<span style="color: #BFEBBF;">)</span><span style="color: #DCDCCC;">)</span>