;;; ess-r-a.el -- Possible local customizations for R with ESS. ;; Copyright (C) 1997--2005 A.J. Rossini, Richard M. Heiberger, Martin ;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen. ;; Author: A.J. Rossini ;; Created: 17 November 1999 ;; Maintainer: ESS-core ;; Keywords: languages ;; This file is part of ESS ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; A copy of the GNU General Public License is available at ;; https://www.r-project.org/Licenses/ ;;; Commentary: ;; The purpose of this file is to demonstrate some of the extras that ;; have been constructed for the ESS R mode; if they prove ;; interesting, then they might be migrated to ess-r-mode, the primary ;; ESS R mode tools. ;;; Code: (require 'ess-inf) (require 'ess-r-mode) ;; you can invoke ESS/R from emacs by typing ;; C-u M-x essr ;; with vsize set to (for example) 40M, and nsize set to 600000. ;; Undefined on non-apple devices (declare-function ns-do-applescript "nsfns.m" (script)) (declare-function do-applescript "ess-r-a" (script)) (unless (fboundp 'do-applescript) (defalias 'do-applescript 'ns-do-applescript)) (defalias 'essr (read-kbd-macro "C-u M-x R RET - - vsize = 40M SPC - - nsize = 600000 2*RET")) (defun ess-r-do-region (start end &optional message) "Send the current region to R via AppleScript." (interactive "r\nP") (message "Starting evaluation...") (do-applescript (concat "try\n" "tell application \"R\"\n" "activate\n" "with timeout of 0 seconds\n" "cmd \"" (buffer-substring start end) "\"\n" "end timeout\n" "end tell\n" "end try\n")) (message "Finished evaluation")) (defun ess-r-do-line () "Send the current line to R via AppleScript." (interactive) ;; "r\nP") (message "Starting evaluation...") (save-excursion (let ((end (point))) (move-to-column 0) (do-applescript (concat "try\n" "tell application \"R\"\n" "activate\n" "with timeout of 0 seconds\n" "cmd \"" (buffer-substring (point) end) "\"\n" "end timeout\n" "end tell\n" "end try\n")))) (message "Finished evaluation")) (defun ess-r-var (beg end) "Load the current region of numbers into an R variable. Prompts for a variable name. If none is given, it uses a default variable name, e. BEG and END denote the region in the current buffer to be sent." (interactive "r") (save-window-excursion (let ((tmp-file (make-temp-file "ess-r-var")) cmd var) (write-region beg end tmp-file) ;; Decide on the variable name to use in R; could use completion. (setq var (read-string "R Variable name (default e): ")) (if (equal var "") (setq var "e")) ;; Command to send to the R process. Get R to delete the file ;; rather than Emacs in case it takes R a long time to run the ;; scan command. (setq cmd (concat var " <- scan(\"" tmp-file "\"); " "unlink(\"" tmp-file "\")" )) ;; Put the output from the scan command into the process buffer so ;; the user has a record of it. (ess-execute cmd 'buffer)))) ;;; Peter Dalgaard's code. ;;; This needs to be cleaned and validated! (defun pd::set-up-demo () (run-ess-r) (split-window-vertically 6) (find-file "demos.R") ;; Don't need to run this as a function -- ought to be fine if set ;; just once. (defun ajr::scroll-to-end::peterD (emacs) "Goal: map prompt to bottom of the screen after every command. Alternatively, use the scroll-in-place package, not sure where that is)." (interactive) (other-buffer 1) (if (= emacs "emacs") (setq scroll-up-aggressively t) (setq scroll-conservatively -4)) ;; <- change this (other-buffer -1)) (defun show-max-other-window () (interactive) (other-window 1) (comint-show-maximum-output) (other-window -1)) ;; call this once ;; (ajr::scroll-to-end::peterD "emacs") (global-set-key [f11] 'show-max-other-window) (global-set-key [f12] 'ess-eval-line-visibly-and-step)) ; Provide package (provide 'ess-r-a) ;;; ess-r-a.el ends here