首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >一些emacs桌面保存问题:如何将其更改为保存在~/.emacs.d/.emacs.ktop中

一些emacs桌面保存问题:如何将其更改为保存在~/.emacs.d/.emacs.ktop中
EN

Stack Overflow用户
提问于 2010-12-18 16:51:34
回答 3查看 7.9K关注 0票数 23

我的init.el中有这个设置

代码语言:javascript
复制
(desktop-save-mode 1)

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

  • 如何将其更改为将.emacs.desktop文件保存到~/.emacs.d中,而不是~/
  • 中?如何才能阻止它询问我是否要保存(仅在重新启动后第一次关闭emacs时发生,此后将假定为是,这是我始终希望发生的情况)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-20 05:04:25

我使用以下代码,这对我很有效:

代码语言:javascript
复制
;; 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来启动:

代码语言:javascript
复制
(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和德克斯特·摩根对此发表的评论。

票数 45
EN

Stack Overflow用户

发布于 2010-12-18 17:47:24

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

自定义desktop-dirname变量。

我如何才能阻止它询问我是否要保存

自定义desktop-save变量。

票数 3
EN

Stack Overflow用户

发布于 2016-07-29 17:46:20

我想分享我的课程是如何组织的。

要求:

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

解决方案:

将以下lisp代码安装到~/.emacs.d/init.el或~/.emacs中的

  1. Install package(plugin) workgroups2 ->

->

代码语言:javascript
复制
(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。它只有一个参数-会话名称。

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

代码语言:javascript
复制
setsid emacs --eval '(nk-server-start "foo")' &

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

代码语言:javascript
复制
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 -运行会话,仅用于启动会话一次

代码语言:javascript
复制
#!/bin/bash

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

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

代码语言:javascript
复制
#!/bin/bash

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

现在我们只需从终端运行:

代码语言:javascript
复制
$ 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中的某个地方)

然后我们可以这样做:

代码语言:javascript
复制
$ 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

Package workgroups2真的很棒!

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4477376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档