ESS (Emacs):在 R 调试下不要更改窗口配置 (tracebug)

问题描述 投票:0回答:2

我想阻止 ESS 更改我的窗口配置,但是当 ESS Tracebug 处于活动状态时,进入调试会更改窗口配置。

假设emacs框架中有三个窗口:(1)一个定义函数的R文件; (2) 调用 (1) 中定义的函数的 R 脚本; (3):劣R ess 过程。如果从 (2) 发送代码到 R 解释器,默认情况下 (2) 会被 (1) 替换(显示要评估的行等)。显示 (3) 的窗口保留在原来的位置;所以我们实际上将 (1) 中的缓冲区显示了两次(在 2 和 1 处)。

在这种配置下,这发生在我身上(以

emacs -Q
启动 emacs)

(package-initialize)
(use-package ess)

我有一个额外的配置(所有这些都本着“不要破坏我的窗口配置:我将通过在那里发出

M-x R
来告诉您在哪个窗口中启动”):

(setq display-buffer-alist
      '(("*R" . (display-buffer-same-window)))
      )

使用此配置,在调试下,窗口 (2) 现在显示 R 会话(即,下级 R 缓冲区显示在原始窗口位置 3,现在也显示在 2)。

下面的屏幕截图显示了这个问题。第一个屏幕截图包含三个窗口,如所述(1、2、3,从上到下)。

在将函数评估为 R (

display-buffer-same-window
) 后立即使用第二个屏幕截图(使用
C-c C-f
的配置),然后从 (2) 开始评估行 (
C-c C-n
)。

如果我禁用tracebug,

M-x ess-tracebug
,不会发生窗口更改,但我不想禁用在具有代码的窗口(窗口1)上执行以下操作。我想使用 Tracebug 但避免对窗口配置进行任何更改:仅显示 (1) 和调试内容,但保留 (2)。我怎样才能做到这一点?

r emacs ess
2个回答
0
投票

没有答案,但我同意,ess 以随意的方式更改窗口配置,甚至在另一个帧中复制缓冲区,这让我感到愤怒。


0
投票

我无法再重现第二个问题(用 ess-20240131.1041 测试)。换句话说,启动 Emacs 并进行此设置

(setq display-buffer-alist
      '(("*R" . (display-buffer-same-window))))

不会重复劣质的 R 进程窗口,但通过简单的解决方案仍然可能导致可能的问题。

假设我们从这个窗口配置开始(其中来自左下缓冲区

f1
的函数
f1.R
已经被评估):

现在,如果从左上方的窗口中显示缓冲区

code1.R
,我们使用
ess-eval-line/region/buffer
中的任何一个,我们最终会得到

原来显示

code1.R
的窗口现已替换为
f1.R

但是如果我们使用

ess-eval-line/region/buffer-and-go
版本,则根本不会发生这种情况。这样问题就解决了!

我认为这可以说是窗口设置混乱的一个错误。但这在实践中大多是无关紧要的,因为如果我们正在调试,我们会想要进入劣质的 R 进程。 (我有使用

ess-eval-line/region/buffer
然后转向较差的 R 进程的坏习惯;如果我使用
and-go
版本,则无需这样做。因此,我猜这是人们使用
and-go
永远不会遇到。)

© www.soinside.com 2019 - 2024. All rights reserved.