Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Asking ESS/R users for suggestions for elisp codes in .emacs file

Tags:

emacs

r

elisp

ess

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.

like image 870
ggg Avatar asked May 23 '10 08:05

ggg


2 Answers

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/

like image 172
Vincent Avatar answered Oct 17 '22 06:10

Vincent


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)   
like image 31
Dirk Eddelbuettel Avatar answered Oct 17 '22 06:10

Dirk Eddelbuettel