えー、今回は 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))))
以上です。