23

我的 init.el 中有这个设置

(desktop-save-mode 1)

这很好用,只是我想知道:

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

  • 我怎样才能阻止它询问我是否要保存(仅在我重新启动后第一次关闭 emacs 时发生,从那时起它假定是,这就是我一直想要发生的事情)

4

3 回答 3

45

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

;; 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 个文件,主要是通过流浪汉,所以我更喜欢手动加载它,而不是破坏桌面文件:)

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

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

从 Emacs 24.4 开始,桌面文件默认会定期自动保存。查看desktop-auto-save-timeout变量(我也添加到上面的块中)。感谢 GDP2 和 Dexter Morgan 对此的评论。

于 2010-12-19T21:04:25.420 回答
3

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

自定义desktop-dirname变量。

我怎样才能阻止它问我是否要保存

自定义desktop-save变量。

于 2010-12-18T09:47:24.193 回答
0

想分享我的会议是如何组织的。

要求:

  1. 将文件从终端发送到自定义 emacs 会话
  2. 从终端恢复会话
  3. 保存会话

解决方案:

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

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

->

(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

nk-server-start启动 emacs 时调用函数。它有一个参数 - 会话名称。

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

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.sh, em_start_foo_2.sh, em_start_foo_3.sh, em_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 初始化文件位于:https ://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el

于 2016-07-29T09:46:20.150 回答