perspective-modeの設定

書いておく

(require 'perspective)

(setq persp-show-modestring 'header)

;; 有効化
(persp-mode 1)

;; persp-modeはC-x xがプレフィックス

;; 現在のperspectiveに限定したbs-show
(global-set-key (kbd "C-x C-M-b")
                '(lambda (arg)
                   (interactive "p")
                   (require 'bs nil t)
                   (call-interactively 'persp-bs-show)))

;; perspectiveの状態をEmacs終了時に保存し、復元できるようにする
(setq persp-state-default-file "~/.emacs.d/persp-state-file")
(add-hook 'kill-emacs-hook #'persp-state-save)

(defvar persp-switch-prefix "C-M-%d")
(defvar persp-first-perspective "2") ;; 最初のワークスペースは"2"に設定
(defvar persp-top-perspective "0")
(defvar persp-bottom-perspective "9")

(defun persp-set-keybind ()
  (mapc (lambda (i)
          (persp-switch (int-to-string i))
          (global-set-key (kbd (format persp-switch-prefix i))
                          `(lambda ()
                             (interactive)
                             (persp-switch ,(int-to-string i)))))
        (number-sequence (string-to-number persp-top-perspective)
                         (string-to-number persp-bottom-perspective))))

(defun persp-my-setup ()
  (persp-set-keybind)
  (persp-switch persp-first-perspective)
  (persp-kill "main"))

(add-hook 'persp-state-after-load-hook 'persp-my-setup)
(add-hook 'after-init-hook 'persp-my-setup)

;; *で始まるバッファ名を候補から削除 -> たとえば*scratch*に変えられない副作用
(setq ido-ignore-buffers (append '("\\`\\*") ido-ignore-buffers))

;; *で始まるバッファ名を候補から非表示・表示をトグルする関数
(defun persp-toggle-ignore-buffers ()
  (interactive)
  (if (member "\\`\\*" ido-ignore-buffers)
      (setq ido-ignore-buffers '("\\` "))
    (setq ido-ignore-buffers (append '("\\`\\*") ido-ignore-buffers))))

;; .で始まるファイル名を削除
(setq ido-ignore-files (append '("\\`\\.") ido-ignore-files))