【问题标题】:multiple instances of emacs overwrite recentf-listemacs 的多个实例覆盖recentf-list
【发布时间】:2021-04-06 16:41:25
【问题描述】:

我有相当平常的最近配置。

(use-package recentf
  :config
  (setq
    recentf-save-file "~/.cache/emacs/recentf"
    recentf-max-saved-items 100000
    recentf-max-menu-items 5000
    )
  (recentf-mode 1)

问题是我运行了多个 emacs 实例。不幸的是,当实例关闭时,它会覆盖recentf 文件。

instance 1 loads recentf version 1
instance 2 loads recentf version 1
... some times passed instance 1 and instance 2 do some work ...
instance 1 get closed and saves recentf version 3
instance 2 get closed and saves recentf version 4

问题是,当实例 2 关闭时,它不会读取版本 3 的最新文件。因此,版本 3 添加的文件会丢失。您可以想象不止一个实例会变得最糟糕。如何使recentf 与多个实例一起正常工作。

【问题讨论】:

  • 这是个好问题。我不确定处理这个问题的好方法。如果您在这里没有得到好的答案,请考虑使用 M-x report-emacs-bug 提交 Emacs 增强请求。
  • 我想你已经在使用 emacsclient 来启动多个实例了?
  • @Rorschach 我只是启动emacs,不要使用 emacs 服务器或类似的东西。
  • 如果您可以选择使用 emacs 服务器应该可以解决问题
  • @Rorschach 我曾经使用多个实例,这个工作流程对我来说很有效。我不想使用服务器。

标签: emacs recent-file-list


【解决方案1】:

如果有人仍然遇到这个问题:

试试sync-recentf 包。我没用过,但看起来像你想要的。


每个 Emacs 实例都维护变量 recentf-list,该变量通过调用 recentf-load-list 填充。然后打开文件会将新的文件路径附加到此变量而不是文件。然后调用recentf-save-list 将导致此变量写入您指定的recentf 文件。请注意,这种写出不是附加到文件,而是替换其内容。

在保存之前简单地调用recentf-load-list 也不是一种选择,因为这将覆盖来自recentf-list 的唯一文件。

前面提到的包通过在recentf-list 之上创建一个虚拟文件来解决这个限制,有效地将这个变量分为“旧的和新的”。调用recentf-save-list 时,会通过以下步骤创建一个新的recentf-list

  1. 保存新的文件路径
  2. 用来自recentf-file 的值覆盖recentf-list
  3. 将保存的文件路径附加到recentf-list
  4. 用 `recentf-list 中的值覆盖 recentf-file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2014-09-19
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多