237 lines
8.1 KiB
EmacsLisp
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; ess-site.el --- user customization of ESS
;; Copyright (C) 1993 David M. Smith
;; Copyright (C) 1997--2012 A.J. Rossini, Richard M. Heiberger, Martin
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
;; Author: David Smith <D.M.Smith@lancaster.ac.uk>
;; Created: 12 Nov 1993
;; Maintainer: ESS-core <ESS-core@r-project.org>
;; Keywords: local
;; 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:
;; This file defines all the site-specific customizations for ESS. It should be
;; edited on a per-site basis. Read the comments (1.1 in Section 1 to see if
;; ess-site.el must be edited. The final directory location of this file must be
;; supplied in ess-lisp-directory. The editing of remaining sections is
;; optional. It should then be byte-compiled, and users who wish to use ESS
;; should add the line:
;;
;; (load "/PATH/TO/THIS/FILE/ess-site")
;;
;; (where /PATH/TO/THIS/FILE is the path to ess-site.elc: i.e. the value of
;; `ess-lisp-directory', below) to their .emacs file.
;;
;; Alternatively, if the file is already in a directory specified by
;; the load-path variable:
;;
;; (require 'ess-site)
;;
;; will work.
;;
;; with Emacs (and in general):
;;
;; (add-to-list 'load-path "/path/to/ess/lisp-directory")
;;; Code:
;; Provide here; otherwise we'll get infinite loops of (require ..):
(provide 'ess-site)
;;;; Load path, autoloads, and major modes
;;;; ========================================
;;
;; For most users the variable ess-lisp-directory will automatically
;; be set correctly. If you are working with an old emacs, one in
;; which file-truename is not defined, then you might need to change
;; the value of ess-lisp-directory to the directory which is to
;; contain the file ess-site.elc. This is probably the current
;; directory, or the value of LISPDIR if it was set in the Makefile.
;; DEBUG: (setq ess-show-load-messages t); instead of nil above
;; This sets `ess-lisp-directory' either from the current directory
;; when the file is being `load'ed, or from the installed location
;; otherwise. This way, users can load ESS without having added ESS to
;; `load-path'.
(defvar ess-lisp-directory
;; A nice default
(directory-file-name
(file-name-directory
(if (and (boundp 'load-file-name) load-file-name)
(file-truename load-file-name)
(locate-library "ess-site") )))
"Directory containing ess-site.el(c) and other ESS lisp files.")
(add-to-list 'load-path (file-name-as-directory ess-lisp-directory))
(require 'ess-utils);; <<- _not_ in load-path typically for traditional setup
(ess-message (format "[ess-site:] ess-lisp-directory = '%s'" ess-lisp-directory))
(defun ess-require (feature &rest args)
(let ((feature-name (symbol-name feature)))
(ess-message (concat "[ess-site:] require '" feature-name))
(apply 'require feature args)))
;; load code to figure out what version/strain of Emacs we are running
;; must come *AFTER* load-path is set !
(ess-require 'ess-compat)
;; If ess.info is not found, then ess-lisp-directory/../doc/info is added
;; resurrecting Stephen's version with a bug-fix
(unless (locate-file "ess.info" Info-default-directory-list)
(add-to-list 'Info-default-directory-list (expand-file-name "../doc/info/" ess-lisp-directory)))
;; Loads ess-custom.el and more
(ess-require 'ess)
;;; Loading popular dialects (they should become optional in the future)
;; R and Julia
(ess-require 'ess-r-mode)
(ess-require 'ess-julia)
;; S-PLUS (MathSoft/StatSci/Insightful/TIBCO)
(ess-require 'ess-sp3-d)
(if ess-microsoft-p
(ess-require 'ess-sp6w-d)
(ess-require 'ess-sp6-d))
;; S-elsewhere, on another machine by telnet
(ess-require 'essd-els)
;; Stata, SAS and batch BUGS
(ess-require 'ess-stata-mode)
(ess-require 'ess-sas-d)
(ess-require 'ess-bugs-l)
(ess-write-to-dribble-buffer
(format "[ess-site.el]: ess-customize-alist=%s \n"
ess-customize-alist))
;;; Literate Data Analysis
(ess-require 'ess-noweb)
(ess-require 'ess-swv)
(ess-write-to-dribble-buffer
(format "[ess-site.el _2_]: ess-customize-alist=%s \n"
ess-customize-alist))
;;; Speedbar and mouse
(ess-require 'ess-mouse)
;;; Toolbar support
(ess-require 'ess-toolbar)
(ess-require 'ido nil t)
;;; Site Specific setup
;;;; ===============================================
(autoload 'Rd-mode "ess-rd" "Major mode for editing R documentation." t)
;; Be careful when editing the following. MISTAKES WILL RESULT IN
;; *.sty BEING TREATED AS ESS[S], rather than LaTeX-mode!
(unless (assoc "\\.[rR]\\'" auto-mode-alist)
(setq auto-mode-alist
(append
'(("\\.sp\\'" . S-mode) ;; re: Don MacQueen <macq@llnl.gov>
("/R/.*\\.q\\'" . R-mode) ;; R/*.q is R code (e.g., in package)
("\\.[qsS]\\'" . S-mode) ;; s,S [see ess-restore-asm-extns above!]
("\\.ssc\\'" . S-mode) ;; Splus (>= 4.x) script files.
("\\.SSC\\'" . S-mode) ;; ditto for windoze
("\\.[rR]\\'" . R-mode)
("\\.[rR]nw\\'" . Rnw-mode)
("\\.[sS]nw\\'" . Snw-mode); currently identical to Rnw-mode
("\\.[rR]profile\\'" . R-mode)
("NAMESPACE\\'" . R-mode)
("CITATION\\'" . R-mode)
("\\.omg\\'" . omegahat-mode)
("\\.hat\\'" . omegahat-mode) ;; Duncan's pref'd...
("\\.lsp\\'" . XLS-mode)
("\\.do\\'" . STA-mode)
("\\.ado\\'" . STA-mode)
("\\.[Ss][Aa][Ss]\\'" . SAS-mode)
;; Many .log/.lst files, not just SAS
;;("\\.log\\'" . SAS-log-mode)
;;("\\.[Ll][Ss][Tt]\\'" . SAS-listing-mode)
("\\.[Ss]t\\'" . S-transcript-mode)
("\\.Sout" . S-transcript-mode)
;;("\\.[Rr]t\\'" . R-transcript-mode)
("\\.[Rr]out" . R-transcript-mode)
("\\.Rd\\'" . Rd-mode)
("\\.[Bb][Uu][Gg]\\'" . ess-bugs-mode)
("\\.[Bb][Oo][Gg]\\'" . ess-bugs-mode)
("\\.[Bb][Mm][Dd]\\'" . ess-bugs-mode)
("\\.[Jj][Aa][Gg]\\'" . ess-jags-mode)
("\\.[Jj][Oo][Gg]\\'" . ess-jags-mode)
("\\.[Jj][Mm][Dd]\\'" . ess-jags-mode)
)
auto-mode-alist)))
;; Rscript and littler interpreters recognized.
(add-to-list 'interpreter-mode-alist '("Rscript" . r-mode))
(add-to-list 'interpreter-mode-alist '("r" . r-mode))
(autoload 'ess-transcript-mode "ess-trns"
"Major mode for editing S transcript files." t)
(autoload 'ess-transcript-clean-region "ess-trns" no-doc t)
(autoload 'ess-rdired "ess-rdired"
"View *R* objects in a dired-like buffer." t)
(eval-after-load "ess-r-mode"
'(progn
(ess-message "[ess-site:] before creating ess-versions-* ...")
(ess-r-s-versions-creation+menu)
(ess-message "[ess-site:] after ess-versions-created ...")))
;; Check to see that inferior-ess-r-program-name points to a working version
;; of R; if not, try to find the newest version:
(ess-check-R-program-name) ;; -> (ess-find-newest-R) if needed, in ./ess-r-d.el
(ess-message "[ess-site:] after ess-check-R-prog... ...")
(ess-message "[ess-site:] *very* end ...")
; 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-site.el ends here