Я прокручиваю 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 сервер гладко?
Я выполняю emacs 23.1.1, и у меня просто есть эта строка в моем .emacs
;; Start Emacs server
(server-start)
и у меня никогда не было проблемы с липкими файлами сокета.
И emacsclient работает приятно.
Вы не должны отключать мусор глобально. Просто отключите его в каждой команде, которая могла бы удалить файл сервера. Сначала определите макрос как ярлык для отключения мусора в функции:
(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
к чему-либо Вам нравится.