一些emacs桌面保存问题:如何更改它以保存在〜/ .emacs.d / .emacs.desktop

时间:2010-12-18 08:51:34

标签: emacs dot-emacs

我在init.el

中有这个设置
(desktop-save-mode 1)

这很有效,只是我想知道:

  • 如何更改它以将.emacs.desktop文件保存到〜/ .emacs.d而不是〜/

  • 如何阻止它询问我是否要保存(仅在我重新启动后第一次关闭emacs时出现,从那时起它假设是,这是我一直希望发生的事情)

3 个答案:

答案 0 :(得分:40)

我使用以下内容,这对我有用:

;; Automatically save and restore sessions
(setq desktop-dirname             "~/.emacs.d/desktop/"
      desktop-base-file-name      "emacs.desktop"
      desktop-base-lock-name      "lock"
      desktop-path                (list desktop-dirname)
      desktop-save                t
      desktop-files-not-to-save   "^$" ;reload tramp paths
      desktop-load-locked-desktop nil
      desktop-auto-save-timeout   30)
(desktop-save-mode 1)

好吧,我实际设置了(desktop-save-mode 0),然后使用M-x my-desktop来启动:

(defun my-desktop ()
  "Load the desktop and enable autosaving"
  (interactive)
  (let ((desktop-load-locked-desktop "ask"))
    (desktop-read)
    (desktop-save-mode 1)))

但那是因为我的会话经常超过100个文件,主要是通过tramp,因此我更喜欢将其加载为手动任务,而不是破坏桌面文件:)

我建议查看Emacs Wiki: http://www.emacswiki.org/emacs/DeskTop

默认功能有一些有用的增强功能。特别是,我建议在会话期间添加一些自动保存桌面的方法,因为如果你的系统在Emacs运行了好几天之后系统崩溃,并且你的桌面还没有被保存,那么真的会很烦人在过渡时期。

自Emacs 24.4以来,默认情况下会定期自动保存桌面文件。请参阅desktop-auto-save-timeout变量(我已将其添加到上面的块中)。感谢GDP2和Dexter Morgan对此的评论。

答案 1 :(得分:3)

  

如何更改它以保存   .emacs.desktop文件到〜/ .emacs.d   而不是〜/

自定义desktop-dirname变量。

  

我怎么能阻止它问我是否   想保存

自定义desktop-save变量。

答案 2 :(得分:0)

想要分享我的会议的组织方式。

要求:

  1. 从终端发送文件到自定义emacs会话
  2. 从终端恢复会话
  3. 保存会话
  4. 解决方案:

    1. 安装包(插件)workgroups2 - > https://github.com/pashinin/workgroups2

    2. 将以下lisp代码添加到〜/ .emacs.d / init.el或〜/ .emacs:

    3. - >

      (setq server-socket-dir "~/.emacs-local/server")
      
      (defun nk-server-start (custom-server)
          ; (nk-server-start "abe")
          (setq server-name custom-server)
          (server-start) ; run emacs server
          (setq wg-session-file (concat "~/.emacs-local/sessions/" custom-server))
          ; (setq wg-session-file "~/.emacs-local/sessions/foo")
          (workgroups-mode 1)
          (wg-switch-to-workgroup custom-server)
          )
      ; Run file in specific server (foo)
          ; emacsclient -n callback.sh -s ~/.emacs-local/server/foo
      
      ; Show server name in title bar
      (setq frame-title-format '("" "%b @ " server-name))
          ; https://www.emacswiki.org/emacs/FrameTitle
      
      ; ;; What to do on Emacs exit / workgroups-mode exit?
      (setq wg-emacs-exit-save-behavior           'save)      ; Options: 'save 'ask nil
      (setq wg-workgroups-mode-exit-save-behavior 'save)      ; Options: 'save 'ask nil
      

      启动emacs时会调用函数nk-server-start。 它有一个参数 - sesssion name。

      我们可以通过从终端运行以下命令启动emacs-session foo

      setsid emacs --eval '(nk-server-start "foo")' &
      

      如果我们想要从终端打开会话foo中的文件,我们需要运行:

      setsid emacsclient -n -s ~/.emacs-local/server/foo file.txt >> /dev/null &
      

      当我们关闭会话时,所有缓冲区,设置等都保存在文件~/.emacs-local/sessions/foo

      下次运行命令setsid emacs --eval '(nk-server-start "foo")' &时,将恢复所有缓冲区

      因为命令很大而且我很懒惰:)我制作了一些脚本并将它们添加到我的$PATH以便简化:

      em_start_foo.sh - 运行会话,仅使用一次启动会话

      #!/bin/bash
      
      setsid emacs --eval '(nk-server-start "foo")' &
      

      em_foo.sh - 将文件添加到会话

      #!/bin/bash
      
      setsid emacsclient -n -s ~/.emacs-local/server/foo "$@" >> /dev/null &
      

      现在我们从终端运行:

      $ em_start_foo.sh                 # start foo session
      $ em_foo.sh file_1.txt            # open file_1.txt in foo session
      $ em_foo.sh file_2.txt file_3.txt # open file_2.txt and file_3.txt in foo session
      

      当然可以并行运行多个会话。

      假设我们还创建了脚本em_start_foo_2.shem_start_foo_2.shem_start_foo_3.shem_start_foo_3.sh(当然在$PATH的某处)

      然后我们可以这样做:

      $ em_start_foo.sh          # start foo session
      $ em_start_foo_2.sh        # start foo_2 session in separate emacs
      $ em_foo.sh file_1.txt     # open file_1.txt in foo session
      $ em_foo_2.sh a.txt b.txt  # open a.txt and b.txt in foo_2 session
      
      $ em_start_foo_3.sh        # start foo_3 session
      $ em_foo_3.sh tmp.txt      # open tmp.txt in foo_3 session
      
      ##### Close emacs foo_2 from gui - session is automatically saved ###
      
      $ em_start_foo_2.sh        # start foo_2 session with all buffers restored
      

      套餐workgroups2非常棒!

      我的带有会话选项的emacs init文件位于:https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el