Подтвердить что ты не робот

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

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

(desktop-save-mode 1)

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

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

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

4b9b3361

Ответ 1

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

;; 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, и поэтому я предпочитаю загружать его вручную, а не clobber файл рабочего стола иначе:)

Я рекомендую проверить Emacs Wiki: http://www.emacswiki.org/emacs/DeskTop

Есть некоторые полезные улучшения функциональности по умолчанию. В частности, я рекомендую добавить некоторый способ автоматического сохранения вашего рабочего стола в середине сеанса, так как это действительно раздражает, если ваша система выходит из строя, когда Emacs работает в течение нескольких дней, и ваш рабочий стол не был сохранен промежутком времени.

Так как Emacs 24.4 файл по умолчанию автоматически сохраняется автоматически по умолчанию. См. Переменную desktop-auto-save-timeout (которую я также добавил в блок выше). Спасибо GDP2 и Декстер Морган за их комментарии по этому поводу.

Ответ 2

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

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

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

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

Ответ 3

Требуется поделиться тем, как организованы мои сеансы.

Требования:

  • Отправить файл с терминала на пользовательский сеанс 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. У него есть один аргумент - имя sesssion.

Мы можем запустить 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 "[email protected]" >> /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