/usr/share/emacs/site-lisp/ess/ess-dde.el is in ess 5.14-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | ;;; ess-dde.el --- ESS customization for ddeclients under Windows 9x/NT
;; Copyright (C) 1998--1999 Richard M. Heiberger <rmh@fisher.stat.temple.edu>
;; Copyright (C) 2000--2006 A.J. Rossini, Rich M. Heiberger, Martin
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
;; Original Author: Richard M. Heiberger <rmh@fisher.stat.temple.edu>
;; Created: 9 Dec 1998
;; Maintainers: ESS-core <ESS-core@r-project.org>
;; 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.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;;; Commentary:
;; Code for dealing with running external processes on Windows 9x/NT
;; through ddeclient.
;; =========
;;; Code:
;; *NO* Requires and autoloads
;; C-c C-r
(defun ess-eval-region-ddeclient (start end even-empty)
"Loop through lines in region and send them to ESS via ddeclient."
(setq ;; set the following variables for the current ddeESS process.
inferior-ess-ddeclient (ess-get-process-variable
ess-current-process-name 'inferior-ess-ddeclient)
inferior-ess-client-name (ess-get-process-variable
ess-current-process-name 'inferior-ess-client-name)
inferior-ess-client-command (ess-get-process-variable
ess-current-process-name 'inferior-ess-client-command))
(narrow-to-region start end)
(goto-char (point-min))
(let ((beg))
(while (or (< (point) (point-max))
(and (= 1 (point-max)) even-empty))
(setq beg (point))
(end-of-line)
;; call-process-region won't send over a 0-character line.
;; We go outside the loop to create a 1-character line " " in the
;; *ESS-temporary* buffer
(if (= beg (point)) ;; do empty line outside loop
(ess-eval-linewise-ddeclient " " nil 'eob t)
;;(call-process-region start end
;; "ddeclient" nil nil nil "S-PLUS" "SCommand")
(call-process-region
beg (point)
inferior-ess-ddeclient nil nil nil
inferior-ess-client-name inferior-ess-client-command))
(forward-line 1))
(widen)))
;; C-c C-n
(defun ess-eval-linewise-ddeclient (text-withtabs &optional
invisibly eob even-empty
sleep-sec)
(save-excursion
(set-buffer (get-buffer-create "*ESS-temporary*"))
(ess-setq-vars-local ess-customize-alist (current-buffer))
(erase-buffer)
(insert text-withtabs)
(ess-eval-region-ddeclient (point-min) (point-max) even-empty))
(if (numberp sleep-sec)
(sleep-for sleep-sec))); in addition to timeout-ms
;; C-c C-v
(defun ess-display-help-on-object-ddeclient (object)
"Display the ESS documentation for OBJECT in another window.
If prefix arg is given, forces a query of the ESS process for the help
file. Otherwise just pops to an existing buffer if it exists."
(ess-force-buffer-current "Process to load into: ")
(ess-eval-linewise-ddeclient (concat "help(" object ")")))
;; C-c C-l
(defun ess-load-file-ddeclient (filename)
"Load an S source file into an inferior ESS process; alternate behavior for
`ess-load-file', required with S-Plus GUI for Windows: Sends the S-Plus command
source(\"filename\") to S. This version does not guarantee to save .Last.value,
nor offer alternate buffers or editing capability."
(let ((source-buffer (get-file-buffer filename)))
(if (ess-check-source filename)
(error "Buffer %s has not been saved" (buffer-name source-buffer))
;; Find the process to load into
(if source-buffer
(save-excursion
(set-buffer source-buffer)
(ess-force-buffer-current "Process to load into: ")
;; (ess-check-modifications) ;;; not possible with ddeclient
;; it calls ess-command which requires two-way communication
;; with the S-Plus process
)))
(ess-eval-linewise-ddeclient (format inferior-ess-load-command filename)))
(widen))
;; C-c C-d
(defun ess-dump-object-ddeclient (object filename)
"Dump the ESS object OBJECT into file FILENAME."
(ess-force-buffer-current "Process to load into: ")
(ess-eval-linewise-ddeclient (concat "dump('" object "','" filename "')"))
(sleep-for 5)
(find-file filename)
(widen))
(defun ess-dput-expression-ddeclient (object filename)
"Dump the ESS object found by evaluating OBJECT into file FILENAME."
(ess-force-buffer-current "Process to load into: ")
(ess-eval-linewise-ddeclient (concat "dput(" object ",'" filename "')"))
(sleep-for 2)
(find-file filename))
(defun ess-command-ddeclient-proposed (com &optional buf sleep)
"ddeclient version of real `ess-command'.
Send the ESS process command COM and redirect its output to the
temporary file named BUF. The temporary filename is constructed
in emacs, not in the ESS process. The default name for the
temporary buffer is \"ess-temp.st\". The function waits
SLEEP (which defaults to 1) seconds and then brings the temporary
file into an emacs buffer and displays it."
(let (filename bufname)
(if (not buf) (setq buf "ess-temp.st"))
(if (not sleep) (setq sleep 1))
(setq filename (concat (file-name-as-directory (getenv "TEMP")) buf))
(ess-eval-linewise-ddeclient
(concat ".old.Last.value <- .Last.value; sink('"
filename
"'); print("
com
"); sink(); .Last.value <- .old.Last.value"))
(setq bufname (ess-get-file-or-buffer filename)) ;; must follow the eval
(sleep-for sleep)
(if (not bufname)
(find-file filename)
(switch-to-buffer bufname))
(revert-buffer t t) ;; this allows the user to reuse the BUF name
))
;; previous version (ESS-5.2.12 and earlier)
(defun ess-command-ddeclient (com &optional buf sleep)
"ddeclient bypass of real ess-command"
(ess-eval-linewise com))
(provide 'ess-dde)
; Local variables section
;;; This file is automatically placed in Outline minor mode.
;;; The file is structured as follows:
;;; Chapters: ^L ;
;;; Sections: ;;*;;
;;; Subsections: ;;;*;;;
;;; Components: defuns, defvars, defconsts
;;; Random code beginning with a ;;;;* comment
;;; Local variables:
;;; mode: emacs-lisp
;;; mode: outline-minor
;;; outline-regexp: "\^L\\|\\`;\\|;;\\*\\|;;;\\*\\|(def[cvu]\\|(setq\\|;;;;\\*"
;;; End:
;;; ess-dde.el ends here
|