макрос для создания шаблона - PullRequest
0 голосов
/ 26 августа 2011

Я новичок в emacs и пытаюсь выяснить, существует ли "простой" способ написания макроса, который создаст шаблон для спецификации стандартной функции (см. Строки с # ниже). Например, я хотел бы выполнить команду для извлечения входных и выходных переменных и размещения их в этом стандартном формате над функцией (используя язык R):

#This function does something
#Input:
# var1 - h
# var2 - 
# var3 -
# var4 - 
# Output:
# myoutput -
MyFunction <- function(var1,var2,var3=13,var4=NULL){
...
... 
return(myoutput)
}

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Я не знаю R, так что я просто догадываюсь, как это выглядит из вашего одного примера.Добавьте это в файл инициализации Emacs (и оцените его или перезапустите), перейдите к строке определения функции и Mx my-r-insert-function-template :

(defun my-r-insert-function-template ()
  "Insert a function template."
  (interactive)
  (let (name inputs output pos)
    (beginning-of-line)
    (save-excursion
      (when (re-search-forward "\\([a-zA-Z0-9_\\.]+\\)\\s-*<-\\s-*function\\s-*(" nil t)
        (setq name (match-string-no-properties 1))
        (backward-char)
        (forward-sexp)
        (setq pos (1- (point)))
        (backward-sexp)
        (while (re-search-forward "[a-zA-Z0-9_\\.]+" pos 'go)
          (push (match-string-no-properties 0) inputs)
          (search-forward "," pos 'go))
        (search-forward "{")
        (setq pos (point))
        (backward-char)
        (forward-sexp)
        (when (re-search-backward "return\\s-*(\\s-*\\([a-zA-Z0-9\\.]+\\)" pos t)
          (setq output (match-string-no-properties 1)))))
    (when name
      (insert "# " name " : This function does something\n")
      (when inputs
        (insert "# Input:\n")
        (setq inputs (nreverse inputs))
        (dolist (input inputs)
          (insert "# " input " -\n")))
      (when output
        (insert "# Output:\n")
        (insert "# " output " -\n")))))
0 голосов
/ 26 августа 2011

Я не использую R, но похоже, что ESSr-autoyas можно использовать, чтобы делать то, что вы хотите.Он использует YASnippet (пакет шаблонов для Emacs).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...