;;; ess-r-a.el -- Possible local customizations for R with ESS. -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 1997--2005 A.J. Rossini, Richard M. Heiberger, Martin
|
|
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
|
|
|
|
;; Author: A.J. Rossini <blindglobe@gmail.com>
|
|
;; Created: 17 November 1999
|
|
;; Maintainer: ESS-core <ESS-core@r-project.org>
|
|
|
|
;; 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)
|
|
"Send from START to END 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
|