tags:

views:

262

answers:

2

I believe that not all R users know elisp. It would be nice if ESS users could share their code in their .emacs file here. Well commented code would be particularly useful. Hope this will promote the use of ESS by R users.

+3  A: 

On Debian / Ubuntu, I use the ESS package which requires no additional entries in .emacs whatsoever as it uses the system-wide setup from /etc/emacs/site-start.d/50ess.el. On Windows, I do have to set the path to Rterm.exe and I source ess-site.el just as the ESS manual suggests.

I do however have this ... which is an almost straight copy from the 'R Extensions' manual it references:

;; edd 12 May 2006 from R-exts.texi
;;                 with one variation
;;; C
(add-hook 'c-mode-hook
          ;;(lambda () (c-set-style "bsd")))  
          (lambda () (c-set-style "c++"))) ; edd   
;;;; ESS 
(add-hook 'ess-mode-hook 
          (lambda ()
            (ess-set-style 'C++)  
            ;; Because
            ;;                                 DEF GNU BSD K&R C++
            ;; ess-indent-level                  2   2   8   5   4 
            ;; ess-continued-statement-offset    2   2   8   5   4  
            ;; ess-brace-offset                  0   0  -8  -5  -4 
            ;; ess-arg-function-offset           2   4   0   0   0
            ;; ess-expression-offset             4   2   8   5   4 
            ;; ess-else-offset                   0   0   0   0   0 
            ;; ess-close-brace-offset            0   0   0   0   0 
            (add-hook 'local-write-file-hooks  
                      (lambda ()    
                        (ess-nuke-trailing-whitespace)))))
;(setq ess-nuke-trailing-whitespace-p 'ask)    
;; or even 
(setq ess-nuke-trailing-whitespace-p t)   
Dirk Eddelbuettel
Interesting. Do you set up ESS manually every time you start it? For example, splitting the windows and starting R. I find it rather troublesome. I used code from http://www.kieranhealy.org/blog/archives/2009/10/12/make-shift-enter-do-a-lot-in-ess/ to automate that.
ggg
You can find a good configuration file on John Fox' website http://socserv.mcmaster.ca/jfox/Books/Companion/ESS/ which setups everything automagically. It is designed for Xemacs but works fine for Emacs (maybe with a few modifications).
Calimo
+3  A: 

For me, this thing is fantastically useful:

;; ESS: Emacs Speaks Statistics
(load "~/elisp/vendor/ess/lisp/ess-site.el") 

;; Use shift-enter to split window & launch R (if not running), execute highlighted
;; region (if R running & area highlighted), or execute current line
;; (and move to next line, skipping comments). Nice. 
;; See http://www.emacswiki.org/emacs/EmacsSpeaksStatistics,
;; FelipeCsaszar. Adapted to spilit vertically instead of
;; horizontally. 

(setq ess-ask-for-ess-directory nil)
  (setq ess-local-process-name "R")
  (setq ansi-color-for-comint-mode 'filter)
  (setq comint-prompt-read-only t)
  (setq comint-scroll-to-bottom-on-input t)
  (setq comint-scroll-to-bottom-on-output t)
  (setq comint-move-point-for-output t)
  (defun my-ess-start-R ()
    (interactive)
    (if (not (member "*R*" (mapcar (function buffer-name) (buffer-list))))
      (progn
    (delete-other-windows)
    (setq w1 (selected-window))
    (setq w1name (buffer-name))
    (setq w2 (split-window w1 nil t))
    (R)
    (set-window-buffer w2 "*R*")
    (set-window-buffer w1 w1name))))
  (defun my-ess-eval ()
    (interactive)
    (my-ess-start-R)
    (if (and transient-mark-mode mark-active)
    (call-interactively 'ess-eval-region)
      (call-interactively 'ess-eval-line-and-step)))
  (add-hook 'ess-mode-hook
        '(lambda()
           (local-set-key [(shift return)] 'my-ess-eval)))
  (add-hook 'inferior-ess-mode-hook
        '(lambda()
           (local-set-key [C-up] 'comint-previous-input)
           (local-set-key [C-down] 'comint-next-input)))
  (require 'ess-site)

Taken from: http://www.kieranhealy.org/blog/archives/2009/10/12/make-shift-enter-do-a-lot-in-ess/

Vincent
I have used too. This makes the behavior of ESS[S] closer to that of Rgui.exe and may appeal to new ESS users.
ggg