Автозаполнение для имен функций и т. Д., По-видимому, является свойством среды разработки, в которой запущен R. Таким образом, он работает немного по-другому в графическом интерфейсе R по сравнению с затмением по сравнению с emacs по сравнению с RStudio по сравнению с любым другим.
Исходя из этого, я думаю, вы можете изо всех сил пытаться заставить автозаполнение работать переносимым способом для scanf
/ readline
без существенных взломов.
Лучшим решением было бы создать собственный графический интерфейс, где вы управляете поведением. Вот пример использования gWidgets
с выпадающим списком (он же combobox), выбор которого уменьшается в зависимости от того, что в него введено.
library(gWidgetstcltk) # or gWidgetsRGtk2, etc.
#some choices to complete to
choices <- c("football", "barometer", "bazooka")
#sort to make it easier for the user to find one, and
#prepend with a blank string to type in
items <- c("", sort(choices))
#create a gui
win <- gwindow()
drp <- gdroplist(items = items, editable = TRUE, cont = win)
#When the user types something, update the list of available items
#to those that begin with what has been typed.
addHandlerKeystroke(drp, handler = function(h, ...)
{
regex <- paste("^", svalue(h$obj), sep = "")
h$obj[] <- items[grepl(regex, items)]
})
Внутри этого обработчика h$obj
ссылается на виджет выпадающего списка, svalue(h$obj)
- это текущее выбранное значение, а h$obj[]
- набор элементов.
Автозаполнение в R GUI (и, возможно, в других) построено на наборе функций в пакете utils
(см. ?rcompgen
). Копаться в источнике этого может быть полезно, но я все же думаю, что будет трудно заставить его работать, пока вы извлекаете пользовательский ввод, способом, который переносим между средами разработки. (Хотя я был бы счастлив, если бы ошибался.)