Некоторые вопросы по сохранению emacs на рабочем столе: как изменить его для сохранения в ~ / .emacs.d / .emacs.desktop - PullRequest
20 голосов
/ 18 декабря 2010

У меня есть этот набор в моем init.el

(desktop-save-mode 1)

Это прекрасно работает, только мне было интересно:

  • как я могу изменить его, чтобы сохранитьФайлы .emacs.desktop в ~ / .emacs.d вместо ~ /

  • как я могу не дать мне спросить, хочу ли я сохранить (происходит только при первом закрытии emacsпосле перезагрузки с этого момента предполагается, что да, что я всегда хочу, чтобы это произошло)

Ответы [ 3 ]

40 голосов
/ 20 декабря 2010

Я использую следующее, что работает для меня:

;; 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 и Декстеру Моргану за их комментарии к этому.

3 голосов
/ 18 декабря 2010

как я могу изменить его для сохранения файлов .emacs.desktop в ~ / .emacs.d вместо ~ /

Настройка переменной desktop-dirname.

как я могу остановить его, спрашивая меня, хочу ли я сохранить

Настроить desktop-save переменную.

0 голосов
/ 29 июля 2016

Хотел рассказать, как организованы мои сеансы.

Требования:

  1. Отправить файл с терминала в пользовательский сеанс emacs
  2. Восстановить сеанс с терминала
  3. Сохранить сеанс

Решение:

  1. Установить пакет (плагин) для рабочих групп2 -> 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 запущен.У него есть один аргумент - имя сеанса.

Мы можем запустить 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.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 с seВарианты ssion доступны по адресу: https://github.com/nexayq/dot_files/blob/master/emacs/dot_emacs_d/init.el

...