如何保存/管理(命名)layout?


#1

我知道ivy可以用来保存和管理layout,但是有个疑问:

如何保存/管理当前的 layout:保存到文件中,并且命名以便下次使用(这个可以用ivy实现吗?)。

非 Spacemacs 用户 :innocent:


#3

可以保存下来吗


#4
(defun my/load-my-layout ()
  (interactive)
  (persp-load-state-from-file (concat persp-save-dir "ztlevi")))

(defun my/save-my-layout ()
  (interactive)
  (if (yes-or-no-p "Do you want to save layout?")
      (persp-save-state-to-file (concat persp-save-dir "ztlevi"))))

不过自从我习惯了spacemacs/ivy-persp-switch-project,基本上就不用上面的函数了。

(defun spacemacs/ivy-persp-switch-project (arg)
  (interactive "P")
  (require 'counsel-projectile)
  (advice-add 'counsel-projectile-switch-project-action
              :before #'spacemacs/ivy-persp-switch-project-advice)
  (ivy-read "Switch to Project Perspective: "
            (if (projectile-project-p)
                (cons (abbreviate-file-name (projectile-project-root))
                      (projectile-relevant-known-projects))
              projectile-known-projects)
            :action #'counsel-projectile-switch-project-action
            :caller 'spacemacs/ivy-persp-switch-project)
  (advice-remove 'counsel-projectile-switch-project-action
                 'spacemacs/ivy-persp-switch-project-advice))

#6

我用start-process开了个buffer 或者是我在shell里运行了sqlite3

下次重启的时候 怎么恢复这两个buffer呢?

如果只是打开个文件 意义不是很大吧

保存layout 最基础的函数是 current-window-configuration 是一个C函数

如果你kill了shell 他并不能给你创建一个shell


#7

persp-mode或eyebrowse建立layouts,内置的desktop-mode来保存它们。

  (desktop-save-mode 1)
  (push '(company-posframe-mode . nil)
      desktop-minor-mode-table)
  (run-with-idle-timer 30 t (lambda () (desktop-save "~/.emacs.d")))

#8

用这个


#9

这个功能我之前也需要。写了几个简单的函数来搞的,原则就是暴力出奇迹,直接把内存中的ivy-views变量存到文件中,需要的时候从文件中读出来赋值就行:


;;; 存入 `~/.emacs.d/ivy-views'文件中
(defun peng-save-ivy-views ()
  (interactive)
  (with-temp-file "~/.emacs.d/ivy-views"
    (prin1 ivy-views (current-buffer))
    (message "save ivy-views to ~/.emacs.d/ivy-views")))
;;; 从文件中加载
(defun peng-load-ivy-views ()
  (interactive)
  (setq ivy-views
        (with-temp-buffer
          (insert-file-contents "~/.emacs.d/ivy-views")
          (read (current-buffer))))
  (message "load ivy-views"))

;;; 清除所有的views
(defun peng-clear-ivy-views ()
  (interactive)
  (setq ivy-views nil))

;;; 退出自动保存
(add-hook 'kill-emacs-hook #'(lambda ()
                               (peng-save-ivy-views)))

;;; 启动自动加载
(add-hook 'emacs-startup-hook #'(lambda ()
                               (peng-load-ivy-views)))

可以根据需要再修改一下。应该可以满足你的需求。


#11

很好用,虽然我已经转 eyebrowser 了emmm

主要是这个不能快速在layout之间切换,eyebrowser可以在modeline上面显示一些信息