EMACS, R, ORG-MODE: come abilitare il passaggio automatico alla modalità ESS all'interno dei blocchi di codice R?

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

Domanda

Quando si usa R CODICE blocchi in un .Rnw documento, il buffer EMACS rileva automaticamente che il cursore si trova all'interno di un blocco di codice (cioè all'interno <<>> e @) e passare alla modalità ESS-questo è molto prezioso perché si può ottenere formattazione di codice basata su ESS all'interno del codice-mutuare e, più in modo che, si può inviare righe/regioni di codice a inferiori *R* buffer di processo.

Come ottengo la stessa funzionalità in un file in modalità org in R blocchi di codice (cioè tra #+begin_src R e #+end_src)-Vorrei che EMACS riconoscesse automaticamente che si trova all'interno di un blocco di codice R e attiva la modalità ESS in modo da poter inviare frammenti di codice al codice *R* processi. Sono consapevole che posso fare Ctl-C ' e passare a un diverso buffer in modalità ESS in cui posso modificare il codice e ottenere tutte le altre comodità in modalità ESS (incluso l'invio del codice a R). Tuttavia mi piacerebbe non Devo fare questo, cioè voglio essere in grado di inviare i cambi di codice dal blocco di codice R nello stesso buffer in modalità org.

È stato utile?

Soluzione

Circa un anno fa, ho chiesto il stessa domanda Sull'elenco in modalità org. @CM2 ha già menzionato che non è possibile utilizzare la funzionalità ESS all'interno della modalità org; Per quanto ne so, EMACS non può gestire due modalità principali e anche con MMM in modalità sembrano esserci alcune difficoltà.

Dan Davison ha gentilmente pubblicato alcuni code ELISP che imita alcune delle funzionalità ESS. Quindi, potresti voler controllare le risposte di Dan alla mia domanda.

Altri suggerimenti

Afaik, questo non può essere fatto con l'attuale implementazione della modalità org.

Non sono sicuro che questo sia affatto fattibile all'interno della modalità Org senza approfondire il codice ELISP. Il punto principale del C-c ' Il comando in modalità org è in modo da avere un buffer aggiuntivo che ha tutta la sintassi che evidenzia/di cui hai bisogno per la tua lingua particolare.

Probabilmente c'è un modo per hackerare questo per questo R-Specifico codice scrivendo un gancio in modalità org che controlla prima per vedere se sei in un #+begin_src R ...#+end_src R Blocca e quindi controllando un pezzo di codice. Sospetto che questo sarebbe disordinato e conflitto con altre caratteristiche in modalità org. Inoltre, dovresti scrivere un'altra funzione per afferrare il blocco di codice corrente e passarlo a Org-Mode R interprete, insieme a tutte le opzioni aggiunte al src bloccare.

Potrebbe essere che la nuova modalità Polymode https://github.com/vitoshka/polymode/blob/master/readme.mdpotrebbe aiutare. Non ci ho ancora provato, ma sembra promettente.

Il poli-ORG.EL nel pacchetto Polymode è progettato per affrontare la modifica della modalità multipla in modalità org. Ho provato, ma congela Emacs a causa di non abilitare Jit-Lock nel buffer indiretto.

Una soluzione alternativa si sta attivando manualmente tra le modalità quando necessario, ad esempio, aggiungendo il seguente codice a .emacs e utilizzando 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top