*** empty log message ***
[ess.git] / lisp / essa-r.el
blob1d4e4edb620c14e16ebe8ec3fbab3abe814b30a5
1 ;;; essa-r.el -- Possible local customizations for R with ESS.
3 ;; Copyright (C) 1997--2004 A.J. Rossini, Rich M. Heiberger, Martin
4 ;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
6 ;; Original Author: A.J. Rossini <rossini@u.washington.edu>
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"))
84 (message "Finished evaluation"))
86 (defun ess-r-var (beg end)
87 "Load the current region of numbers into an R variable. Prompts for
88 a variable name. If none is given, it uses a default variable name,
89 e. BEG and END denote the region in the current buffer to be sent."
90 (interactive "r")
91 (save-window-excursion
92 (let ( (tmp-file (make-temp-file "ess-r-var"))
93 cmd
94 var)
95 (write-region beg end tmp-file)
97 ;; Decide on the variable name to use in R; could use completion.
98 (setq var (read-string "R Variable name (default e): "))
99 (if (equal var "")
100 (setq var "e"))
102 ;; Command to send to the R process. Get R to delete the file
103 ;; rather than Emacs in case it takes R a long time to run the
104 ;; scan command.
105 (setq cmd (concat var " <- scan(\"" tmp-file "\"); "
106 "unlink(\"" tmp-file "\")" ))
108 ;; Put the output from the scan command into the process buffer so
109 ;; the user has a record of it.
110 (ess-execute cmd 'buffer))))
113 ;;; Peter Dalgaard's code.
114 ;;; This needs to be cleaned and validated!
116 (defun pd::set-up-demo ()
118 ;; (if (not xemacs) (set-default-font "*courier-bold-r*--14**"))
120 (split-window-vertically 6)
121 (find-file "demos.R")
123 ;; Don't need to run this as a function -- ought to be fine if set
124 ;; just once.
126 (defun ajr::scroll-to-end::peterD (emacs)
127 "Goal: map prompt to bottom of the screen after every command.
128 Alternatively, use the scroll-in-place package, not sure where that
129 is)."
130 (interactive)
131 (other-buffer 1)
132 (if (= emacs "emacs")
133 (setq scroll-up-aggressively t)
134 (setq scroll-conservatively -4)) ;; <- change this
135 (other-buffer -1))
137 (defun show-max-other-window ()
138 (interactive)
139 (other-window 1)
140 (comint-show-maximum-output)
141 (other-window -1))
143 ;; call this once
144 ;; (ajr::scroll-to-end::peterD "xemacs")
145 ;; (ajr::scroll-to-end::peterD "emacs")
147 (global-set-key [f11] 'show-max-other-window)
148 (global-set-key [f12] 'ess-eval-line-and-step))
153 \f ; Provide package
155 (provide 'essa-r)
157 \f ; Local variables section
159 ;;; This file is automatically placed in Outline minor mode.
160 ;;; The file is structured as follows:
161 ;;; Chapters: ^L ;
162 ;;; Sections: ;;*;;
163 ;;; Subsections: ;;;*;;;
164 ;;; Components: defuns, defvars, defconsts
165 ;;; Random code beginning with a ;;;;* comment
167 ;;; Local variables:
168 ;;; mode: emacs-lisp
169 ;;; outline-minor-mode: nil
170 ;;; mode: outline-minor
171 ;;; outline-regexp: "\^L\\|\\`;\\|;;\\*\\|;;;\\*\\|(def[cvu]\\|(setq\\|;;;;\\*"
172 ;;; End:
174 ;;; ess-site.el ends here