【问题标题】:Refresh *R dired* buffer after executing command in inferior ESS process在劣质 ESS 进程中执行命令后刷新 *R dired* 缓冲区
【发布时间】:2014-08-04 04:42:25
【问题描述】:

我想建议inferior-ess-send-input 交互函数调用我的函数,它会自动刷新*R dired* 缓冲区。我试过使用afteraround 作为类。例如:

(defadvice inferior-ess-send-input (around ess-revert-rdired-after-send activate)
    ad-do-it
    (call-interactively 'ess-revert-rdired-buffer))

我也尝试过使用after,甚至更改了 ESS 的源代码以创建运行后挂钩。他们都有同样的问题。我什至定义了一个新函数,它一个接一个地调用。

但我不断收到消息:

ess-error: ESS 进程未准备好。在重试之前完成您的命令。

来自ess-command。出于某种原因,添加此建议会使sprocess 忙碌。有什么想法吗?

附言

这里的功能是(正在进行中):

(defun ess-revert-rdired-buffer ()
  "If the buffer is live, update it. If it isn't start it."
  (interactive)
  (save-selected-window
     (if (buffer-live-p (get-buffer "*R dired*"))
    (save-excursion
      (with-current-buffer "*R dired*"
        (revert-buffer)))
      (ess-rdired))))

【问题讨论】:

    标签: r emacs hook ess comint-mode


    【解决方案1】:

    我发现等待 0.05 秒足以让进程做好准备。

    【讨论】:

    • 你解决了吗?我认为一般来说它很难做到,因为 R 缓冲区通常无法将其完成返回给 Emacs。我们可以尝试使用计时器每隔 10 秒左右刷新一次 dired 缓冲区,但在尝试更新之前,它会首先检查 R 进程是否忙碌的。这对你有用吗?
    • 是的,我无法将我的解决方案称为通用解决方案。例如,我没有为长脚本测试它。但是 0.5 秒的等待时间对于分配简单的变量很有效。
    • 事实证明我的解决方案破坏了多行函数定义。所以,有一个更好的方法会很棒,但我对基于计时器的方法持怀疑态度。是什么阻止了 Emacs 像 RStudio 那样解决它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多