Как добавить опцию контекстного меню для запуска программы в заданном рабочем каталоге - PullRequest
0 голосов
/ 22 мая 2018

Когда вы устанавливаете Git в Windows, он добавляет опцию контекстного меню, когда вы щелкаете правой кнопкой мыши по папке в «Git Bash Here».Это делается путем добавления ключа реестра следующим образом:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\git_shell\command]
@="\"C:\\Program Files\\Git\\git-bash.exe\" \"--cd=%1\""

Обратите внимание на аргумент cd в конце, который передает имя каталога программе.

Я хотел бысделать нечто подобное для R (и других программ).К сожалению, R не принимает аргумент cd.Это запустит R:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\R\command]
@="\"C:\\Program Files\\R\\R-3.4.3\\bin\\x64\\Rgui.exe\" \"--cd=%1\""

, но выдаст сообщение об ошибке, говорящее, что аргумент cd не распознан, и Rgui запустится с любым рабочим каталогом по умолчанию, победив всю точку.

Что я действительно хочу сделать, это эквивалент этой команды:

start "R" /D %1 "C:\Program Files\R\R-3.4.3\bin\x64\Rgui.exe"

, где %1 - папка, по которой щелкнули правой кнопкой мыши.Это возможно?

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете написать код R, который запускается при запуске и проверяет аргументы командной строки.Вы можете поместить следующий код в конец C:\Program Files\R\R-3.4.3\etc\Rprofile.site (или любого другого файла, который выполняется при запуске):

local({

  processArg <- function(arg) {
    parts <- strsplit(arg, "=")[[1]]
    if (length(parts) == 2) {
      if (parts[1] == "R_startup_wd") {
        setwd(parts[2])
      }
    }
  }

  invisible(sapply(commandArgs(FALSE), processArg))
})

Он проверяет, был ли вызван R с аргументом R_startup_wd=your_working_dir, и меняет рабочийкаталог, если да.Затем вы можете вызвать R как

"C:\Program Files\R\R-3.4.3\bin\x64\Rgui.exe" "R_startup_wd=your_working_dir"

Обратите внимание, что имя аргумента задается без "-", то есть у нас есть R_startup_wd, а не --R_startup_wd.В противном случае RGui будет жаловаться на «неизвестные аргументы»

Конечно, вы все равно можете использовать R без предоставленного аргумента.

...