EMACS, R, ORG-MODE: ¿Cómo habilitar el interruptor automático al modo ESS dentro de los bloques de código R?

StackOverflow https://stackoverflow.com/questions/8386931

Pregunta

Cuando usas R Código de fragmentos en un .Rnw Documento, el búfer EMACS detecta automáticamente que el cursor está dentro de un trozo de código (es decir <<>> y @), y cambia a ESS-Mode: esto es muy valioso porque se puede obtener formateo de código basado en ESS dentro de la y otra vez, se puede enviar líneas/regiones de código al inferior *R* Process-Buffer.

¿Cómo obtengo la misma funcionalidad en un archivo de modo ORG dentro de R bloques de código (es decir, entre #+begin_src R y #+end_src)-Me gustaría que los emacs reconozcan automáticamente que está dentro de un bloque de código de código R, y encienda ESS-Mode para que pueda enviar fragmentos de código al *R* proceso. Soy consciente de que puedo hacer Ctl-C ' y cambie a un búfer de modo ESS diferente donde pueda editar el código y obtener todas las otras comodidades en modo ESS (incluido el código de envío a R). Sin embargo, me gustaría no Tengo que hacer esto, es decir, quiero poder enviar código-snippets desde el bloque de código R en el mismo búfer en modo de orgullos.

¿Fue útil?

Solución

Hace un año más o menos, le pregunté el la misma pregunta en la lista de modo org. @CM2 ya ha mencionado que no es posible usar la funcionalidad ESS dentro de Org-Mode; Hasta donde sé, los emacs no pueden manejar dos modos principales e incluso con el modo MMM, parece haber algunas dificultades.

Dan Davison publicó amablemente un código Elisp que imita algunas de las características de ESS. Por lo tanto, es posible que desee revisar las respuestas de Dan a mi pregunta.

Otros consejos

AFAIK, esto no se puede hacer con la implementación actual de Org-Mode.

No estoy seguro de que esto sea factible en absoluto dentro del modo ORG sin profundizar en el código ELISP. El punto principal del C-c ' El comando en el modo Org es para que tenga un búfer adicional que tenga toda la sintaxis que destaca que desea/necesita para su idioma en particular.

Probablemente haya una forma de piratear esto para R-Código específico escribiendo un gancho de modo ORG que se verifica primero para ver si está en un #+begin_src R ...#+end_src R Bloquee y luego consulte una fragmentación de código. Sospecho que esto sería desordenado y en conflicto con otras características de modo de orgullos. Además, tendría que escribir otra función para obtener el bloque de código actual y pasarlo a Org-Mode's R intérprete, junto con todas las opciones que agregó al src bloquear.

Podría ser que el nuevo modo PolyMode https://github.com/vitoshka/polymode/blob/master/readme.mdpodría ayudar. Todavía no lo he intentado, pero parece prometedor.

El paquete Poly-ORG.EL en Polymode está diseñado para abordar la edición de modo múltiple en el modo ORG. Lo intenté, pero congela los emacs debido a no habilitar a JIT-Lock en el amortiguador indirecto.

Una solución alternativa está alternando manualmente entre modos cuando es necesario, por ejemplo, agregando el siguiente código a .emacs y usando F6.

;; Toggle between org & R modes.
(defun toggle-org-R-mode ()
  (interactive)
  "Toggle mode between org-R modes"
  (cond 
   ((string= major-mode "org-mode")
    (R-mode))
   ((string= major-mode "ess-mode")
    (org-mode))
   )
  )
(global-set-key [f6] 'toggle-org-R-mode)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top