Dear Ess-Help list,

I work with noweb files .Rnw and polymode. I can’t get the string coloring in the R chunks of my files. And yet I searched for a while with the help of chatGPT. Is it possible ? How do we get the string colored in the R chunk ? I succeed to have the string coloring in the .R files but not in the R chunk. When I do M-: major-mode in a R chunk of my .Rnw file I have the answer ess-r-mode but the strings are not colored.

Thank you very much for your help.

Laurent


----o<--------------------------------------------------------------------------->o-----------------

Here below is what I put in my init.el file.

;; -*- lexical-binding: t; -*-
;;
;; highlighting R code for ESS in R chunk in .
;;
(with-eval-after-load 'ess-r-mode

  ;; 🔹 Catégories officielles ESS
  (setq ess-R-font-lock-keywords
        '((ess-R-fl-keyword:keywords   . t)
          (ess-R-fl-keyword:constants  . t)
          (ess-R-fl-keyword:modifiers  . t)
          (ess-R-fl-keyword:fun-defs   . t)
          (ess-R-fl-keyword:assign-ops . t)
          (ess-R-fl-keyword:%op%       . t)
          (ess-fl-keyword:fun-calls    . t)
          (ess-fl-keyword:numbers      . t)
          (ess-fl-keyword:operators    . t)
          (ess-fl-keyword:delimiters   . t)
          (ess-fl-keyword:=            . t)
          (ess-R-fl-keyword:F&T        . t)))

  ;; 🔹 Ajouter fonctions R et builtins supplémentaires
  (setq ess-R-font-lock-keywords
        (append ess-R-font-lock-keywords
'(("\\<\\(library\\|require\\|source\\|setwd\\|read\\.csv\\|readRDS\\)\\>"
                   . font-lock-builtin-face))))


  ;; 🔹 Coloration des chaînes
  (font-lock-add-keywords
   'ess-r-mode
   '(("\"[^\"]*\"" . font-lock-string-face)
     ("'[^']*'"   . font-lock-string-face)))


  ;; 🔹 Ajouter toutes les règles supplémentaires avec font-lock-add-keywords
  (font-lock-add-keywords
   'ess-r-mode
   '(
     ;; Arguments nommés : x = ...
     ("\\(\\_<[[:alpha:].]+\\_>\\)[[:space:]]*="
      1 font-lock-variable-name-face)

     ;; Pipes : %>% %<>% %$%
     ("%>%\\|%<>%\\|%\\$%" . font-lock-keyword-face)

     ;; Fonctions builtins classiques
 ("\\<\\(library\\|require\\|source\\|return\\|stop\\|warning\\|message\\)\\>"
      . font-lock-builtin-face)

     ;; Nombres
     ("\\<\\([0-9]+\\(\\.[0-9]*\\)?\\)\\>" . font-lock-constant-face)
     ))

  ;; 🔹 Pretty symbols pour <- etc.
  (setq ess-r-prettify-symbols t)

  ;; 🔹 Outils utiles
  (add-hook 'ess-r-mode-hook #'outline-minor-mode)
  (add-hook 'ess-r-mode-hook #'hl-todo-mode))


;; Recoloration automatique des chunks R polymode
(with-eval-after-load 'poly-noweb
  (add-hook 'poly-noweb+r-mode-hook
            (lambda ()
              ;; activer font-lock si ce n'est pas déjà fait
              (font-lock-mode 1)
              (font-lock-ensure))))



;; Wrapper interactif pour recoloration
(defun my/ess-r-font-lock-ensure ()
  "Recolorer le buffer ESS-R courant."
  (interactive)
  (font-lock-ensure))

;; Raccourci dans tous les chunks R de polymode
(with-eval-after-load 'poly-noweb
  (define-key poly-noweb+r-mode-map (kbd "C-c C-l") #'my/ess-r-font-lock-ensure))



(with-eval-after-load 'poly-noweb
  ;; Hook pour tous les chunks R à l'ouverture
  (add-hook 'poly-noweb+r-mode-hook
            (lambda ()
              ;; activer font-lock si ce n'est pas déjà fait
              (font-lock-mode 1)

              ;; Coloration personnalisée
              (font-lock-add-keywords
               nil
               '(("\"[^\"]*\"" . font-lock-string-face)
                 ("'[^']*'"   . font-lock-string-face)))

              ;; Recoloration immédiate
              (font-lock-ensure)

              ;; Outline et TODO
              (outline-minor-mode 1)
              (hl-todo-mode 1))))

;; 🔹 Recolorer tous les chunks R déjà ouverts
(dolist (buf (buffer-list))
  (with-current-buffer buf
    (when (derived-mode-p 'poly-noweb+r-mode)
      ;; s'assurer que font-lock est actif
      (font-lock-mode 1)
      ;; appliquer les couleurs de chaînes
      (font-lock-add-keywords
       nil
       '(("\"[^\"]*\"" . font-lock-string-face)
         ("'[^']*'"   . font-lock-string-face)))
      (font-lock-ensure))))

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/ess-help

Reply via email to