Доступ к буферу клавиатуры в R - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли способ получить доступ к буферу клавиатуры в R?Я подозреваю, что это зависит от платформы, и поэтому, для чего это стоит, я использую Windows 10.

В частности, я хочу проверить, было ли что-то (что-либо) было нажато на клавиатуре в определенной точкев моем коде, и если это так, сделайте что-нибудь, иначе продолжайте.Например:

### stuff here
if(!is.na(KEYBOARD_BUFFER)){  ### or !is.null, etc.
  stop("Someone pressed something!")
}
### stuff continues here

Заранее спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

Это будет не только зависеть от платформы, но и зависеть от того, как вы запустите R на своей машине. Я ожидаю, что это будет отличаться в зависимости от того, используете ли вы простую терминальную версию R или R, который поставляется вместе с R, и R, выполняемую через RStudio или другую подобную программу.

Было бы также полезно, если бы вы могли дать более подробную информацию о том, что вы пытаетесь достичь? почему вы хотите остановиться или сделать что-то еще в скрипте.

Может быть возможно выполнить то, что вы хотите, переместив фокус в новое окно, которое будет наблюдать за вводом с клавиатуры и сообщать об этом обратно вашему сценарию. Например, этот ответ: Как ждать нажатия клавиши в R? имеет код, который будет использовать библиотеку tcltk для открытия окна и ожидания нажатия клавиши или щелчка мыши, прежде чем продолжить.

Вот код, который делает больше, чем вы предлагаете:

library(tcltk)

evilglobalvariable <- NA

tt <- tktoplevel()
tkbind(tt, '<Key>', function(k) { evilglobalvariable <<- k})

for(i in 1:25) {
  cat(i, "\n")
  if(!is.na(evilglobalvariable)){
    stop('A key was pressed')
  }
  Sys.sleep(1)
}

Это остановит цикл, если вы нажмете любую клавишу, когда окно Tk активно. Но он не будет обнаруживать другие нажатия клавиш, например, Если вы откроете свою почтовую программу и составите сообщение, нажатие этих клавиш не остановит цикл.

Если вы собираетесь сделать что-то серьезное с этим, было бы лучше использовать конкретную среду, а не глобальную переменную зла.

...