;;; ess-noweb.el --- support for Literate Data Analysis ;; Copyright (C) 1999 Mark Lunt ;; Copyright (C) 1999--2004 A.J. Rossini, Richard M. Heiberger, Martin ;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen. ;; Author: Mark Lunt ;; A.J. Rossini ;; Created: April 18, 1999 ;; Maintainer: ESS-core ;; Keywords: statistics, languages ;; Summary: Noweb support for ESS ;; 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 ;; http://www.r-project.org/Licenses/ ;;; Commentary: ;; Code for ESS and Literate Data Analysis. ;;; Code: ; Requires and autoloads (require 'ess-noweb-mode) ;; still needed when user turns font-lock-mode *on* (from initial off): (autoload 'ess-noweb-font-lock-mode "ess-noweb-font-lock-mode") ; Variables (defvar ess-noweb-use-font-lock font-lock-mode "Set to t if you want to use font-locking in ESS noweb buffers.") ;; this helps with XEmacs barfing, sigh... ;; but is *NOT* okay to do *globally*: (setq global-font-lock-mode t) (if ess-noweb-use-font-lock (require 'ess-noweb-font-lock-mode)) ; Functions ;;*;; Code Chunk evaluation. (defun ess-eval-chunk (vis) "Tangle the current chunk and send it to the inferior ESS process. Arg has same meaning as for `ess-eval-region'." (interactive "P") (let ((process-name ess-local-process-name) new-process-name (cbuf (current-buffer)) (temp-buffer (ess-create-temp-buffer "Tangle Buffer"))) (save-excursion (ess-noweb-tangle-chunk temp-buffer) (set-buffer temp-buffer) ;; When the temp buffer is created, it does not inherit any value ;; of ess-local-process-name from the .Rnw buffer, so we have to set it ;; here. If ess-local-process-name is not set in the .Rnw buffer, ;; it will inherit the value that is chosen here. (set (make-local-variable 'ess-local-process-name) process-name) (ess-eval-region (point-min) (point-max) vis "Eval Chunk") (if process-name (kill-buffer temp-buffer) ;; if process-name was nil, source buffer did not have a local process ;; so keep value from temp buffer before killing it. (setq new-process-name ess-local-process-name) (kill-buffer temp-buffer) (set-buffer cbuf) (set (make-local-variable 'ess-local-process-name) new-process-name))))) (defun ess-eval-chunk-and-step (&optional vis) "Tangle the current chunk and send it to the inferior ESS process and step to the next chunk" (interactive) (ess-eval-chunk vis) (ess-noweb-next-code-chunk 1)) (defun ess-eval-chunk-and-go (vis) "Tangle the current chunk, send to the ESS process, and go there. Arg has same meaning as for `ess-eval-region'." (interactive "P") (ess-eval-chunk vis) (ess-switch-to-ESS t)) ;;*;; Thread code chunk evaluation ;;; ;;; Threads are code chunks which fit into the same "buffer" (I'm (AJR) ;;; abusing terminology, but what I mean is things like: ;;; <>= ;;; code for thing1 ;;; @ ;;; Documentation ;;; <>= ;;; continuing code for thing1 ;;; @ ;;; (defun ess-eval-thread (vis) "Tangle all chunks in the current chunk-thread and send to the ESS process. Arg has same meaning as for `ess-eval-region'." (interactive "P") (let ((temp-buffer (ess-create-temp-buffer "Tangle Buffer"))) (ess-noweb-tangle-current-thread temp-buffer) (set-buffer temp-buffer) (ess-eval-region (point-min) (point-max) vis "Eval buffer") (kill-buffer temp-buffer))) (defun ess-eval-thread-and-go (vis) "Tangle all chunks in the current chunk-thread, send to ESS process, and go there. Arg has same meaning as for `ess-eval-region'." (interactive "P") (ess-eval-thread vis) (ess-switch-to-ESS t)) ; Provide package (provide 'ess-noweb) ; 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 ;;; outline-minor-mode: nil ;;; mode: outline-minor ;;; outline-regexp: "\^L\\|\\`;\\|;;\\*\\|;;;\\*\\|(def[cvu]\\|(setq\\|;;;;\\*" ;;; End: ;;; ess-noweb.el ends here