Emacs, R, Org-mode: comment activer le passage automatique en mode ESS dans les blocs de code R?

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

Question

Lors de l'utilisation de blocs de code R dans un document .Rnw, le tampon emacs détecte automatiquement que le curseur se trouve dans un bloc de code (c'est-à-dire dans <<>> et @), et passe en mode ESS - c'est très précieux car on peut obtenir Formatage de code basé sur ESS dans le bloc de code, et plus utilement, on peut envoyer des lignes / régions de code au tampon de processus *R* inférieur.

Comment puis-je obtenir la même fonctionnalité dans un fichier en mode org dans les blocs de code R (c'est-à-dire entre #+begin_src R et #+end_src) - j'aimerais qu'emacs reconnaisse automatiquement qu'il se trouve dans un bloc de code R et active ESS- mode afin que je puisse envoyer des extraits de code au processus *R*. Je suis conscient que je peux faire Ctl-C ' et passer à un autre tampon en mode ESS où je peux éditer le code et obtenir toutes les autres commodités du mode ESS (y compris l'envoi de code à R). Cependant, je voudrais ne pas faire cela, c'est-à-dire que je veux pouvoir envoyer des extraits de code du bloc de code R dans le même tampon de mode organisationnel.

Était-ce utile?

La solution

Il y a environ un an, j'ai demandé la mêmequestion sur la liste org-mode.@ cm2 a déjà mentionné qu'il n'est pas possible d'utiliser la fonctionnalité ESS en mode org;pour autant que je sache, Emacs ne peut pas gérer deux modes principaux et même avec le mode mmm, il semble y avoir des difficultés.

Dan Davison a gentiment posté du code elisp qui imite certaines des fonctionnalités ESS.Alors, vous voudrez peut-être vérifier les réponses de Dan à ma question.

Autres conseils

AFAIK, cela ne peut pas être fait avec l'implémentation actuelle du mode Org.

Je ne suis pas sûr que cela soit faisable du tout en mode organisation sans avoir à fouiller dans le code elisp.Le point principal de la commande C-c ' en mode Org est que vous ayez un tampon supplémentaire qui a toute la coloration syntaxique que vous voulez / avez besoin pour votre langue particulière.

Il existe probablement un moyen de contourner ce problème pour le code spécifique à R en écrivant un hook en mode Org qui vérifie d'abord si vous êtes dans un bloc #+begin_src R ... #+end_src R, puis en vérifiant un morceau de code.Je soupçonne que ce serait désordonné et entrerait en conflit avec d'autres fonctionnalités du mode organisation.De plus, vous devrez écrire une autre fonction pour récupérer le bloc de code actuel et le transmettre à l'interpréteur R du mode Org, ainsi que toutes les options que vous avez ajoutées au bloc src.

Peut-être que le nouveau mode polymode https://github.com/vitoshka/polymode/blob/master/readme.md pourrait aider.Je n'ai pas encore essayé, mais cela semble prometteur.

Le poly-org.el dans le package polymode, est conçu pour traiter l'édition en mode multiple en mode org.J'ai essayé, mais cela gèle Emacs car il n'active pas le jit-lock dans le tampon indirect.

Une solution de contournement consiste à basculer manuellement entre les modes lorsque cela est nécessaire, par exemple, en ajoutant le code suivant à .emacs et en utilisant 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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top