开发者

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

开发者 https://www.devze.com 2022-12-31 02:33 出处:网络
I believe that not all R users know elisp. It would be nice if E开发者_开发问答SS users could share their code in their .emacs file here. Well commented code would be particularly useful. Hope this wi

I believe that not all R users know elisp. It would be nice if E开发者_开发问答SS 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.


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/


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)   
0

精彩评论

暂无评论...
验证码 换一张
取 消