Emacs không thể lưu lịch sử của các tệp đã truy cập gần đây được mở trong phiên hiện tại trước khi tắt máy


8

Tôi gặp vấn đề với emacs bắt đầu là daemon khi sử dụng Systemd.

Mỗi lần tắt / khởi động lại nếu tôi không dừng dịch vụ daemon bằng tay, lịch sử của các tệp đã mở gần đây trong phiên hiện tại sẽ bị mất. Tôi nghĩ điều này là do Systemd không thể giết Emacs đúng cách khi ở trạng thái tắt máy.

Tôi có thể làm gì để giải quyết vấn đề này?

Cấu hình Recentf của tôi trong init.el:

(use-package recentf
    :config (progn (setq recentf-auto-cleanup 'never
                         recentf-max-menu-items 50
                         recentf-max-saved-items 400
                         recentf-save-file
                         (expand-file-name "temp/.recentf" user-emacs-directory))
                   (recentf-mode t)))

Cấu hình dịch vụ emacs Systemd:

[Unit]
Description=Emacs: the extensible, self-documenting text editor

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"

Restart=always
User=%i
#WorkingDirectory=%h

[Install]
WantedBy=multi-user.target

1
Bạn không nên hỏi điều này trên một diễn đàn systemd? Giả sử use-packagemã của bạn hoạt động trong các trường hợp khác (?) Thì có vẻ như vấn đề duy nhất là systemdkhông chạy ExecStoplệnh của bạn .
phils

Câu trả lời:


4

Bạn có thể lưu các tệp gần đây ngay trước khi tắt máy bằng cách gọi recentf-save-list

M-x recentf-save-list RET

Điều này thêm các tập tin gần đây của bạn vào lịch sử gần đây.

Nếu bạn không muốn làm điều này bằng tay, bạn có thể thêm một bộ đếm thời gian sẽ làm điều đó cho bạn cứ sau 5 phút.

(run-at-time (current-time) 300 'recentf-save-list)

Thêm phần này vào cấu hình của bạn. Vì vậy, bất cứ khi nào bạn mở emacs, nó sẽ gọi hàm và cứ sau 5 phút (hoặc 300 giây), nó sẽ tiếp tục gọi hàm đó.

Nguồn: https://emacs.stackexchange.com/a/15115/5187


1

Tôi biết chủ đề này đã cũ, nhưng tôi đã gặp một vấn đề tương tự trong MS Windows (tức là Windows biết cách thoát daemon Emacs một cách duyên dáng). Tôi đã giải quyết điều này cho tôi bằng cách móc recentf-save-listvào terminal-delete-functions. Vì vậy, trong tập tin init của tôi, tôi có dòng sau:

(add-hook 'delete-terminal-functions (lambda (terminal) (recentf-save-list)))

Sau đó, recentf-listphiên hiện tại được lưu bất cứ khi nào bạn đóng ứng dụng khách Emacs. Điều này là đủ cho tôi, bởi vì tôi đã quen với việc đóng Emacs trước khi tắt PC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.