Rstudio 的更有意义 window 标题

More meaningfull window title for Rstudio

我在 Ubuntu (16.04) 下使用 R studio(版本 1.0.143),window 标题只显示非常无用的 "RStudio"。

我希望至少拥有当前选项卡的名称,或者最好是与该选项卡对应的文件的完整路径。 Windows 下的完整路径似乎出现在 window 标题中。

这对于在 windows 之间导航可能很有用,但我的主要用途是用于跟踪每个软件所花费时间的软件(如 arbtt)。目前我只能知道我上周在 R studio 里花了 20 个小时,但我想知道在哪个 files/projects.


这里提供了部分解决方案,但如果有人知道如何获取当前选项卡的完整名称和路径,我仍然很感兴趣。


基于@Spacedman 的回复,我现在可以通过在安装 wmctrl 后将此行添加到 /usr/lib/R/etc/Rprofile.site 来获取 window 标题中的工作目录路径(但不是脚本名称) :

RStudio_title <- function(...){system(paste0('wmctrl -r "RStudio" -N "RStudio - @ ', getwd(), '"')) ; TRUE}
addTaskCallback(RStudio_title, data = NULL, name = character())

一个问题是,如果您已经在标题中使用 "rstudio"(不区分大小写)打开 window(例如在网络浏览器中),则此 window 将收到新标题而不是 Rstudio window。有一个 -F 选项可以使 window 标题与提供的标题完全相同。我试图首先将 RStudio 标题修改为不太可能出现在另一个 window 中的标题,方法是将其添加到 Rprofile.site 中:

system('wmctrl -F -r "RStudio" -N "RStudio - @ "')

问题是 Rprofile.site 中的 system R 函数调用似乎被 Rstudio 忽略了(虽然它在 rstudio 外部调用的 R 中工作)


事实上,来自Rprofile.site的system命令并没有被忽略。它被执行但出于任何原因输出未显示在 Rstudio R 控制台中(例如,如果您键入 system("echo 'Hello World'"))。请参阅
中的讨论 system('wmctrl -F -r "RStudio" -N "RStudio - @ "') 不起作用的原因可能是在执行此命令时(当 Rprofile.site 由 R 提供时),RStudio windows 尚不存在...

这就是我现在的做法,包括@Spacedman 的建议(即使用十六进制 ID 和 if(interactive()))。即使已经有另一个 window 以 "RStudio" 标题打开,它也能正常工作。如果您从 Rstudio 重新启动 R,它也可以工作。如果你执行 rm(list=ls()) 它将被破坏(带有一条消息)(我个人从不这样做,我更喜欢重新启动 R)

if(interactive()) {
    # function to capture the hexadecimal ID of the R studio window
    RStudio_ID <- function(...) {
        Rstudio_wmctrl_ID <<- system("wmctrl -l | grep 'N/A RStudio' | sed -r 's/\s.*//'", 
            intern = TRUE); FALSE
    }
    # execute last function only once after the first completed top-level task 
    # (because the output of that function is FALSE)
    addTaskCallback(RStudio_ID, data = NULL, name = character())

    # function that will change the Rstudio window title
    RStudio_title <- function(...){system(paste0('wmctrl -i -r ', Rstudio_wmctrl_ID, 
        ' -N "RStudio - @ ', getwd(), '"')) ; TRUE}

    # this function is executed after every completed top-level task
    addTaskCallback(RStudio_title, data = NULL, name = character())
}

安装 wmctrl,然后你可以将名为 "Calculator" 的标题更改为 "Fnord",如下所示:

 xcalc &
 wmctrl -r Calculator -N "Fnord"

所以你只需要当前的标题("RStudio"?)或者它的 ID(可以用 wmctrl -l 获取)就可以了。

您可以在 R 中从 system 调用它并从 getwd() 粘贴当前工作目录。您可以使用 addTaskCallback 将其连接到 R 以在每个命令行上执行,至少在普通 R 上执行,但也许 RStudio 会搞砸这个。

回调示例:

定义一个函数:

> f = function(...){cat("Hello\n");TRUE}

将其添加到任务回调中:

> addTaskCallback(f, data = NULL, name = character())
1 
1 
Hello

现在 R 在每个命令后说 "Hello":

> ls()
[1] "f"
Hello

更改 f 以使用类似 system(paste0("wmctrl ...")) 的方式设置标题,然后就可以了。