Recentemente, Rtestemunhei a introdução inteligente do operador de tubulação %>%ou thenoperador no código que eu uso com bastante frequência atualmente. Gostaria de saber se isso já foi implementado na versão mais recente do ESS . Caso contrário, não deve ser um problema criar elispcódigo para escrever uma função para ele. Preciso implementar isso para que ele imprima esse operador %>%e salte para uma nova linha recuada.
MWE
library(ggplot2)
library(dplyr)
diamonds %>%
filter(cut=="Ideal") %>%
ggplot(aes(price)) +
geom_histogram() +
facet_wrap (~ color)
Meu teste elisp - no .init.elou .emacsarquivo:
(defun then_R_operator ()
"%>% operator or 'then' pipe operator"
(interactive)
(insert " %>%") ; note the space before the first %
(reindent-then-newline-and-indent))
(global-set-key (kbd "C-%") 'then_R_operator)
Funciona, mas quero verificar se há algo errado com ela ou se há alguma sugestão para melhorá-la (ser um novato no elisp). Como restringir isso apenas ao ESSmodo?
Observe
que percebi que o bloqueio de fontes %>%pode ser feito ativando ess-fl-keyword:operatorsno menu ESS.
inferior...e ess-mode...?
ess-modeativa-se ao editar, por exemplo, .Rarquivos. inferior-ess-modeé ativado ao executar um Rprocesso interativo no Emacs (ou seja, através do Rcomando ou com o C-c C-zqual chama ess-switch-to-inferior-or-script-buffer).
inferior...Isso permitirá que eu a use no console R interativo, que está dentro do Emacs? se sim, então acho que seria melhor definir chaves para ambos ess-modee inferior, certo?
(just-one-space 1)antes do tubo. Você deseja usar oess-mode-map(e provavelmente oinferior-ess-mode-map) para definir a chave(define-key ess-mode-map (kbd "C-%") 'then_R_operator).