*** empty log message ***
[ess.git] / lisp / essa-r.el
blob4c65b7d52ccd3b526e8f5536da0b86acdcb76d35
1 ;;; essa-r.el -- Possible local customizations for R with ESS.
3 ;; Copyright (C) 1997--2005 A.J. Rossini, Rich M. Heiberger, Martin
4 ;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
6 ;; Original Author: A.J. Rossini <blindglobe@gmail.com>
7 ;; Created: 17 November 1999
8 ;; Maintainers: ESS-core <ESS-core@stat.math.ethz.ch>
10 ;; Keywords: editing and process modes.
12 ;; This file is part of ESS
14 ;; This file is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation; either version 2, or (at your option)
17 ;; any later version.
19 ;; This file is distributed in the hope that it will be useful,
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;; GNU General Public License for more details.
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with GNU Emacs; see the file COPYING. If not, write to
26 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
28 ;; In short: you may use this code any way you like, as long as you
29 ;; don't charge money for it, remove this notice, or hold anyone liable
30 ;; for its results.
32 ;;; Code:
34 ;;; The purpose of this file is to demonstrate some of the extras that
35 ;;; have been constructed for the ESS R mode; if they prove
36 ;;; interesting, then they might be migrated to essd-r, the primary
37 ;;; ESS R mode tools.
42 ;; you can invoke ESS/R from emacs by typing
43 ;; C-u M-x essr
44 ;; with vsize set to (for example) 40M, and nsize set to 600000.
45 (defalias 'essr
46 (read-kbd-macro
47 "C-u M-x R RET - - vsize SPC 40M SPC - - nsize SPC 600000 2*RET"))
48 ;; "SPC" must be "=" in future versions of R (works from 0.99 on)
50 (defun ess-r-do-region (start end &optional message)
51 "Send the current region to R via AppleScript."
52 (interactive "r\nP")
53 (message "Starting evaluation...")
54 (do-applescript (concat
55 "try\n"
56 "tell application \"R\"\n"
57 "activate\n"
58 "with timeout of 0 seconds\n"
59 "cmd \"" (buffer-substring start end)
60 "\"\n"
61 "end timeout\n"
62 "end tell\n"
63 "end try\n"))
64 (message "Finished evaluation"))
66 (defun ess-r-do-line ()
67 "Send the current line to R via AppleScript."
68 (interactive) ;; "r\nP")
69 (message "Starting evaluation...")
70 (save-excursion
71 (let ((end (point)))
72 (move-to-column 0)
73 (do-applescript (concat
74 "try\n"
75 "tell application \"R\"\n"
76 "activate\n"
77 "with timeout of 0 seconds\n"
78 "cmd \"" (buffer-substring (point) end)
79 "\"\n"
80 "end timeout\n"
81 "end tell\n"
82 "end try\n"))))
83 (message "Finished evaluation"))
85 (defun ess-r-var (beg end)
86 "Load the current region of numbers into an R variable. Prompts for
87 a variable name. If none is given, it uses a default variable name,
88 e. BEG and END denote the region in the current buffer to be sent."
89 (interactive "r")
90 (save-window-excursion
91 (let ((tmp-file (make-temp-file "ess-r-var"))
92 cmd
93 var)
94 (write-region beg end tmp-file)
96 ;; Decide on the variable name to use in R; could use completion.
97 (setq var (read-string "R Variable name (default e): "))
98 (if (equal var "")
99 (setq var "e"))
101 ;; Command to send to the R process. Get R to delete the file
102 ;; rather than Emacs in case it takes R a long time to run the
103 ;; scan command.
104 (setq cmd (concat var " <- scan(\"" tmp-file "\"); "
105 "unlink(\"" tmp-file "\")" ))
107 ;; Put the output from the scan command into the process buffer so
108 ;; the user has a record of it.
109 (ess-execute cmd 'buffer))))
112 ;;; Peter Dalgaard's code.
113 ;;; This needs to be cleaned and validated!
115 (defun pd::set-up-demo ()
117 ;; (if (not xemacs) (set-default-font "*courier-bold-r*--14**"))
119 (split-window-vertically 6)
120 (find-file "demos.R")
122 ;; Don't need to run this as a function -- ought to be fine if set
123 ;; just once.
125 (defun ajr::scroll-to-end::peterD (emacs)
126 "Goal: map prompt to bottom of the screen after every command.
127 Alternatively, use the scroll-in-place package, not sure where that
128 is)."
129 (interactive)
130 (other-buffer 1)
131 (if (= emacs "emacs")
132 (setq scroll-up-aggressively t)
133 (setq scroll-conservatively -4)) ;; <- change this
134 (other-buffer -1))
136 (defun show-max-other-window ()
137 (interactive)
138 (other-window 1)
139 (comint-show-maximum-output)
140 (other-window -1))
142 ;; call this once
143 ;; (ajr::scroll-to-end::peterD "xemacs")
144 ;; (ajr::scroll-to-end::peterD "emacs")
146 (global-set-key [f11] 'show-max-other-window)
147 (global-set-key [f12] 'ess-eval-line-and-step))
150 \f ; Provide package
152 (provide 'essa-r)
154 \f ; Local variables section
156 ;;; This file is automatically placed in Outline minor mode.
157 ;;; The file is structured as follows:
158 ;;; Chapters: ^L ;
159 ;;; Sections: ;;*;;
160 ;;; Subsections: ;;;*;;;
161 ;;; Components: defuns, defvars, defconsts
162 ;;; Random code beginning with a ;;;;* comment
164 ;;; Local variables:
165 ;;; mode: emacs-lisp
166 ;;; outline-minor-mode: nil
167 ;;; mode: outline-minor
168 ;;; outline-regexp: "\^L\\|\\`;\\|;;\\*\\|;;;\\*\\|(def[cvu]\\|(setq\\|;;;;\\*"
169 ;;; End:
171 ;;; ess-site.el ends here