Skip to content

windmoveで自動分割

2014/12/26

windmoveはウィンドウを十字移動できるようにしてくれる拡張機能で、 ウィンドウ移動がわかりやすくなるので使っています。 普段、ウィンドウは分割しても2画面にするくらいだったので、 windmoveで移動するときに移動先のウィンドウがなかった場合に 自動的にウィンドウを分割するようにしました。

(defun my-windmove-split-as-needed (original dir &optional arg window)
  (let ((result (funcall original dir arg window)))
    (or (unless (window-minibuffer-p result)
          result)
        (split-window window
                      nil
                      (cond ((eq dir 'up) 'above)
                            ((eq dir 'down) 'below)
                            (dir))))))

(advice-add 'windmove-find-other-window
            :around
            #'my-windmove-split-as-needed)

アドバイスの定義には、るびきちさんのところで紹介されていた nadviceを使ってみました。

  • 【関数再定義革命】Emacs 24.4ではdefadviceは時代遅れ!nadvice.elによる洗練された新しいアドバイス定義方法!! | るびきち「日刊Emacs」
    http://rubikitch.com/2014/10/30/nadvice/

advice-add は以前のアドバイス定義に比べてわかりやすく、内容を関数として 用意できるので、再定義やデバッグが楽になっていいですね。

広告

From → Emacs

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。