2

Я запускаю Emacs через

emacs --daemon

команда, которая устанавливает файл сокета /tmp/emacs100/server для связи через emacsclient. Когда я убиваю сервер как:

emacsclient --eval "(kill-emacs)"

файл сокета остается, не позволяя мне снова запустить emacs --daemon . То же самое происходит, когда я пробую M-x kill-emacs из Emacs. В качестве альтернативы, когда я пытаюсь:

M-x server-force-delete

Из Emacs я получаю сообщение:

No connection file "/tmp/emacs1000/server

Есть идеи, что не так? Как мне запустить и выключить сервер emacs?

3 ответа3

0

Я столкнулся с той же проблемой, по-видимому,

(setq delete-by-moving-to-trash nil)

почини это...

0

Вам не нужно отключать корзину глобально. Просто отключите его внутри каждой команды, которая может удалить файл сервера. Сначала определите макрос как ярлык для отключения мусора внутри функции:

(defmacro bypass-trash-in-function (fun)
  "Set FUN to always use normal deletion, and never trash.

Specifically, the value of `delete-by-moving-to-trash' will be
set to nil inside FUN, so any deletions that happen inside FUN or
any functions called by it will bypass the trash."
  `(defadvice ,fun (around no-trash activate)
     "Ignore `delete-by-moving-to-trash' inside this function.

See `bypass-trash-in-function' for more information."
     (let (delete-by-moving-to-trash)
       ad-do-it)))

Затем примените этот макрос к каждой из трех серверных функций, которые имеют delete-file любом месте своего тела:

;; Any server function that may delete the server file should never
;; move it to trash instead.
(mapc (lambda (fun) (eval `(bypass-trash-in-function ,fun)))
      '(server-start server-sentinel server-force-delete))

Теперь вы можете установить delete-by-moving-to-trash что угодно.

0

Я использую emacs 23.1.1, и у меня просто есть эта строка в моем .emacs

;; Start Emacs server
(server-start)

и у меня никогда не было проблем с липкими файлами сокетов.

И emacsclient работает хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .