|
;;; ess-custom.el --- Customize variables for ESS -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 1997--2010 A.J. Rossini, Richard M. Heiberger, Martin
|
|
;; Maechler, Kurt Hornik, Rodney Sparapani, and Stephen Eglen.
|
|
;; Copyright (C) 2011--2015 A.J. Rossini, Richard M. Heiberger, Martin Maechler,
|
|
;; Kurt Hornik, Rodney Sparapani, Stephen Eglen and Vitalie Spinu.
|
|
|
|
;; Author: A.J. Rossini <blindglobe@gmail.com>
|
|
;; Created: 05 June 2000
|
|
;; 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:
|
|
;; This file holds defcustoms for ESS. It is required by ess-utils.el,
|
|
;; which in turn is required by almost every other ESS file.
|
|
|
|
;;; Code:
|
|
(require 'comint)
|
|
|
|
;; FIXME: When Emacs is started from Cygwin shell in Windows,
|
|
;; we have (equal window-system 'x) -and should use "--ess" in *d-r.el
|
|
(defvar ess-microsoft-p (memq system-type '(ms-dos windows-nt))
|
|
"Value is t if the OS is one of Microsoft's, nil otherwise.")
|
|
|
|
;; Customization Groups
|
|
|
|
(defgroup ess nil
|
|
"ESS: Emacs Speaks Statistics."
|
|
:group 'languages
|
|
:link '(info-link "(ESS)")
|
|
:link '(url-link "https://ess.r-project.org/"))
|
|
|
|
(defgroup ess-edit nil
|
|
"ESS: editing behavior, including comments/indentation."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-proc nil
|
|
"ESS: process control."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-command nil
|
|
"ESS: Commands for various things."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-help nil
|
|
"ESS: help functions."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-hooks nil
|
|
"ESS: hooks for customization."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-S nil
|
|
"ESS: S Languages."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-SPLUS nil
|
|
"ESS: S-PLUS Dialect of S."
|
|
:group 'ess-S
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-R nil
|
|
"ESS: R Dialect of S."
|
|
:group 'ess-S
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-Julia nil
|
|
"ESS: Julia."
|
|
:group 'ess
|
|
:prefix "julia-")
|
|
|
|
(defgroup ess-sas nil
|
|
"ESS: SAS."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-Stata nil
|
|
"ESS: Stata."
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-roxy nil
|
|
"Mode for editing in-code Roxygen documentation."
|
|
:group 'ess
|
|
:group 'convenience
|
|
:group 'ess-extras
|
|
:prefix "ess-"
|
|
:group 'tools)
|
|
|
|
(defgroup ess-extras nil
|
|
"Extra utilities for ESS"
|
|
:group 'ess
|
|
:prefix "ess-")
|
|
|
|
(defgroup ess-faces nil
|
|
"Faces and face options for ESS modes."
|
|
:group 'ess
|
|
:group 'faces
|
|
:prefix "ess-")
|
|
|
|
|
|
; User changeable variables
|
|
|
|
;;*;; Options and Initialization
|
|
|
|
;;;###autoload
|
|
(defcustom ess-lisp-directory
|
|
(file-name-directory
|
|
(or load-file-name
|
|
buffer-file-name))
|
|
"Directory containing ess-site.el(c) and other ESS Lisp files."
|
|
:group 'ess
|
|
:type 'directory
|
|
:package-version '(ess . "19.04"))
|
|
|
|
(defcustom ess-etc-directory
|
|
;; Try to detect the `etc' folder only if not already set up by distribution
|
|
(let (dir)
|
|
(dolist (d '("./etc/" "../../etc/ess/" "../etc/" "../etc/ess/"))
|
|
(setq d (expand-file-name d ess-lisp-directory))
|
|
(when (file-directory-p d)
|
|
(setq dir d)))
|
|
dir)
|
|
"Location of the ESS etc/ directory.
|
|
The ESS etc directory stores various auxiliary files that are useful
|
|
for ESS, such as icons."
|
|
:group 'ess
|
|
:type 'directory
|
|
:package-version '(ess . "19.04"))
|
|
|
|
;; Depending on how ESS is loaded the `load-path' might not contain
|
|
;; the `lisp' directory. For this reason we need to add it before we
|
|
;; start requiring ESS files
|
|
;;;###autoload
|
|
(add-to-list 'load-path ess-lisp-directory)
|
|
;; Add ess-lisp-directory/obsolete to load-path; files here will
|
|
;; automatically warn that they are obsolete when loaded.
|
|
;;;###autoload
|
|
(add-to-list 'load-path (file-name-as-directory (expand-file-name "obsolete" ess-lisp-directory)))
|
|
|
|
(unless (file-directory-p ess-etc-directory)
|
|
(display-warning 'ess (format "Could not find directory `ess-etc-directory': %s"
|
|
ess-etc-directory) :error))
|
|
|
|
;; Menus and pulldowns.
|
|
|
|
(defcustom ess-imenu-use-p (fboundp 'imenu)
|
|
"Non-nil means use imenu facility.
|
|
This value can be overridden by mode-specific variables, such
|
|
as `ess-imenu-use-S'."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-imenu-use-S ess-imenu-use-p
|
|
"Non-nil means include an Imenu menu item in S buffers."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-auto-width-visible nil
|
|
"When non-nil, echo width setting in the inferior buffer.
|
|
See `ess-auto-width'. Be warned that ESS can set the width a
|
|
lot."
|
|
:group 'ess
|
|
:type 'boolean
|
|
:package-version '(ess . "19.04"))
|
|
|
|
(defcustom ess-auto-width nil
|
|
"When non-nil, set the width option when the window configuration changes.
|
|
When 'frame, set the width to the frame width. When 'window, set
|
|
the width to the window width. If an integer, set the width to
|
|
that integer. Anything else is treated as 'window."
|
|
:group 'ess
|
|
:type '(choice (const :tag "Do nothing" :value nil)
|
|
(const :tag "Frame width" :value frame)
|
|
(const :tag "Window width" :value window)
|
|
(integer :tag "Integer value"))
|
|
:package-version '(ess . "19.04"))
|
|
|
|
(defcustom ess-handy-commands '(("change-directory" . ess-change-directory)
|
|
("install.packages" . ess-install-library)
|
|
("library" . ess-library)
|
|
("objects[ls]" . ess-execute-objects)
|
|
("help-apropos" . ess-display-help-apropos)
|
|
("help-index" . ess-display-package-index)
|
|
("help-object" . ess-display-help-on-object)
|
|
("search" . ess-execute-search)
|
|
("set-width" . ess-execute-screen-options)
|
|
("setRepos" . ess-setRepositories)
|
|
("sos" . ess-sos)
|
|
("vignettes" . ess-display-vignettes)
|
|
)
|
|
"An alist of custom ESS commands.
|
|
These are available for call by function `ess-handy-commands' and
|
|
`ess-smart-comma' function."
|
|
:group 'ess
|
|
:type 'alist)
|
|
|
|
(defvar-local ess--local-handy-commands nil
|
|
"Store handy commands locally.")
|
|
|
|
(defcustom ess-describe-at-point-method nil
|
|
"Whether `ess-describe-object-at-point' should use a tooltip.
|
|
If nil display in an electric buffer. If 'tooltip display in
|
|
a tooltip.
|
|
|
|
See also `tooltip-hide-delay' and variable `tooltip-delay'."
|
|
:group 'ess-utils
|
|
:type '(choice (const :tag "buffer" :value nil ) (const tooltip)))
|
|
|
|
(defvaralias
|
|
'ess-R-describe-object-at-point-commands
|
|
'ess-r-describe-object-at-point-commands)
|
|
(defcustom ess-r-describe-object-at-point-commands
|
|
'(("str(%s)")
|
|
(".ess_htsummary(%s, hlength = 20, tlength = 20)")
|
|
("summary(%s, maxsum = 20)"))
|
|
"A list of commands cycled by `ess-describe-object-at-point'.
|
|
%s is substituted with the name at point.
|
|
|
|
The value of each element is nil and is not used in current
|
|
implementation."
|
|
:group 'ess-R
|
|
:type 'alist)
|
|
|
|
(defcustom ess-S-describe-object-at-point-commands
|
|
ess-R-describe-object-at-point-commands
|
|
"An alist of commands cycled by `ess-describe-object-at-point'.
|
|
%s is substitute with the name at point. The value is not used as
|
|
yet."
|
|
:group 'S+
|
|
:type 'alist)
|
|
|
|
|
|
(defcustom ess-can-eval-in-background t
|
|
"If non-nil ESS can perform caching and other background activities.
|
|
This allows ESS to call the subprocess on idle time."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-user-full-name (user-full-name)
|
|
"The full name of the user."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defcustom ess-blink-region t
|
|
"If t evaluated region is highlighted for a shortwhile.
|
|
See also `ess-blink-delay'"
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-blink-delay .3
|
|
"Number of seconds to highlight the evaluated region."
|
|
:group 'ess
|
|
:type 'number)
|
|
|
|
(defcustom ess-ask-for-ess-directory t
|
|
"Non-nil means request the process directory each time S is run."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-ask-about-transfile nil
|
|
"Non-nil means ask about a transcript file before running ESS."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-display-buffer-reuse-frames t
|
|
"Non-nil means \\[display-buffer] reuses existing frames.
|
|
See `display-buffer-reuse-frames'."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defvar-local ess-language nil
|
|
"Determines the language to use for the current buffer.
|
|
See also `ess-dialect'.")
|
|
|
|
(defvar-local ess-dialect nil
|
|
"String version of the dialect being run for the inferior process.
|
|
This, plus `ess-language', should be able to determine the exact
|
|
version of the statistical package being executed in the particular
|
|
buffer.")
|
|
|
|
(defcustom ess-directory-function nil
|
|
"Function to return the directory that ESS is run from.
|
|
If nil or if the function returns nil then you get `ess-startup-directory'."
|
|
:group 'ess
|
|
:type '(choice (const nil) function))
|
|
|
|
(defcustom ess-setup-directory-function nil
|
|
"Function to setup the directory that ESS is run from.
|
|
This function can be called to set environment variables or to create
|
|
a workspace."
|
|
:group 'ess
|
|
:type '(choice (const nil) function))
|
|
|
|
(defvaralias 'ess-directory 'ess-startup-directory)
|
|
(defcustom ess-startup-directory nil
|
|
"The directory ESS is run from. It must end in a slash.
|
|
Provided as a default if `ess-ask-for-ess-directory' is non-nil.
|
|
A nil value means use the current buffer's default directory."
|
|
:group 'ess
|
|
:type '(choice (const nil) directory))
|
|
|
|
|
|
(defcustom ess-history-directory nil
|
|
"Directory to pick up `ess-history-file' from.
|
|
If this is nil, the history file is relative to the startup
|
|
directory of the inferior process (see `ess-startup-directory')."
|
|
:group 'ess
|
|
:type '(choice (const nil) directory))
|
|
|
|
(defcustom ess-history-file t
|
|
"File to pick up history from. nil means *no* history is read or written.
|
|
t means something like \".Rhistory\".
|
|
If this is a relative file name, it is relative to `ess-history-directory'.
|
|
Consequently, if that is set explicitly, you will have one history file
|
|
for all projects."
|
|
:group 'ess
|
|
:type '(choice (const :tag "Off" nil)
|
|
(const :tag "On" t)
|
|
file))
|
|
|
|
(defcustom ess-plain-first-buffername t
|
|
"When non-nil, the first process buffer created does not have a number.
|
|
In other words, it is R:foo rather than R:1:foo. Subsequent
|
|
processes buffers are always numbered (e.g. R:2:foo."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
|
|
(define-obsolete-variable-alias
|
|
'ess-use-inferior-program-name-in-buffer-name
|
|
'ess-use-inferior-program-in-buffer-name "ESS 18.10")
|
|
(defcustom ess-use-inferior-program-in-buffer-name nil
|
|
"For R, use e.g., 'R-2.1.0' or 'R-devel' (the program name) for buffer name.
|
|
Avoids the plain dialect name."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-use-ido t
|
|
"If t ess will try to use ido completion whenever possible.
|
|
|
|
By default ESS uses enables IDO flex matching. See
|
|
`ido-enable-flex-matching' for details on flex matching and
|
|
`ess-ido-flex-matching' on how to disable it for ESS, if you
|
|
don't want it.
|
|
|
|
See info node `(ido) Top' for more information about how ido
|
|
works."
|
|
:group 'ess
|
|
:require 'ido
|
|
:type 'boolean)
|
|
|
|
|
|
(defcustom ess-tab-complete-in-script nil
|
|
"If non-nil, TAB tries to complete if it does not indent in script buffers.
|
|
See also `ess-first-tab-never-complete'."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
(make-obsolete-variable 'ess-tab-complete-in-script 'tab-always-indent "ESS 19.04" 'set)
|
|
|
|
(define-obsolete-variable-alias 'ess-first-tab-never-completes-p
|
|
'ess-first-tab-never-complete "ESS 19.04")
|
|
(defcustom ess-first-tab-never-complete 'symbol
|
|
"If t, first TAB never tries to complete in `ess-mode'.
|
|
If 'symbol first TAB doesn't try to complete if next char is a
|
|
valid symbol constituent.
|
|
|
|
If 'symbol-or-paren don't complete if next char is closed paren
|
|
)}] or symbol character.
|
|
|
|
If 'symbol-or-paren-or-punct don't complete if next char is
|
|
punctuation +-=% etc, or closed paren or symbol.
|
|
|
|
If 'unless-eol - first TAB completes only at end of line.
|
|
|
|
If nil first TAB always tries to complete (this might be too
|
|
aggressive and dangerous)."
|
|
:group 'ess
|
|
:type '(choice (const nil)
|
|
(const symbol)
|
|
(const symbol-or-paren)
|
|
(const symbol-or-paren-or-punct)
|
|
(const unless-eol)
|
|
(const t)))
|
|
|
|
(defcustom ess-use-eldoc t
|
|
"If t, activate eldoc in `ess-mode' and `inferior-ess-mode' buffers.
|
|
If 'script-only activate in `ess-mode' buffers only.
|
|
|
|
See also `ess-eldoc-show-on-symbol'."
|
|
:group 'ess-extras
|
|
:type '(choice (const t) (const script-only) (const nil)))
|
|
|
|
|
|
(defcustom ess-eldoc-show-on-symbol nil
|
|
"If non-nil, show help string whenever the point is on a symbol.
|
|
If nil show only when the point is in a function call, i.e. after (."
|
|
:group 'ess-extras
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-eldoc-abbreviation-style 'normal
|
|
"Controls how `eldoc' displays information that does not fit on a line.
|
|
|
|
A symbol which can be
|
|
|
|
- nil: do nothing
|
|
- mild: Replace TRUE, FALSE with T,F
|
|
- normal: Try mild + shorten the default values longer than 10
|
|
characters.
|
|
- strong: Try normal + completely remove default values except
|
|
=F,=T,=d where d is a digit.
|
|
- aggressive (or t): Try strong + truncate the doc string to fit
|
|
into minibuffer.
|
|
|
|
The default style is 'normal.
|
|
|
|
Ess-eldoc also honors the value of
|
|
`eldoc-echo-area-use-multiline-p'. If this variable is not t (the
|
|
default), doc strings are truncated to fit into minibufer. This
|
|
allows the use of different abbreviation styles with the
|
|
truncation."
|
|
:group 'ess
|
|
:type '(choice (const nil) (const mild) (const normal) (const strong) (const aggressive) (const t)))
|
|
|
|
(defcustom ess-use-flymake t
|
|
"If non-nil activate flymake in `ess-mode' buffers.
|
|
If 'process, only check if the buffer has an inferior process."
|
|
:group 'ess
|
|
:type '(choice (const :tag "Always" t)
|
|
(const :tag "With running inferior process" process)
|
|
(const :tag "Never" nil))
|
|
:package-version '(ess . "18.10"))
|
|
|
|
(defcustom ess-use-auto-complete t
|
|
"If non-nil, activate auto-complete support.
|
|
If t, activate auto-complete support in `ess-mode' and
|
|
`inferior-ess-mode' buffers. If 'script-only activate in `ess-mode'
|
|
buffers only.
|
|
|
|
If non-nil add `ac-source-R' and `ac-source-filename' to the
|
|
`ac-sources' buffer local variable.
|
|
|
|
ESS defines three AC sources `ac-source-R',`ac-source-R-objects'
|
|
and `ac-source-R-args'. See auto-complete package
|
|
documentation (http://cx4a.org/software/auto-complete/) for how
|
|
to install your custom sources."
|
|
:group 'ess-extras
|
|
:type '(choice (const t) (const script-only) (const nil)))
|
|
(make-obsolete-variable 'ess-use-auto-complete "Auto-complete is unmaintained; use company-mode instead"
|
|
"ESS 19.04" 'set)
|
|
|
|
(defcustom ess-use-company t
|
|
"If t, activate company support in `ess-mode' and `inferior-ess-mode' buffers.
|
|
If non-nil add `company-R-args' and `company-R-objects' to the
|
|
`company-backends'. If 'script-only activate in `ess-mode' buffers
|
|
only."
|
|
:group 'ess-extras
|
|
:type '(choice (const t) (const script-only) (const nil)))
|
|
|
|
(defcustom ess-company-arg-prefix-length nil
|
|
"Minimum prefix for ess company function argument completion."
|
|
:group 'ess-extras
|
|
:type '(choice (const :tag "Default" nil)
|
|
integer))
|
|
|
|
(defcustom ess-use-tracebug t
|
|
"If t, load `ess-tracebug' when R process starts."
|
|
:group 'ess-extras
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-ido-flex-matching t
|
|
"If t, ido for ESS completion uses flex matching.
|
|
See `ido-enable-flex-matching' for details.
|
|
If you have an old computer, or you load lot of packages, you
|
|
might want to set this to nil."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defvar ess--completing-hist nil
|
|
"Variable to store completion history.
|
|
Used by `ess-completion-read' command.")
|
|
|
|
(defvar-local ess-smart-operators ()
|
|
"List of smart operators to be used in ESS and IESS modes.
|
|
Not to be set by users. It is redefined by mode specific
|
|
settings, such as `ess-r-smart-operators'.")
|
|
|
|
(defvaralias 'ess-R-smart-operators 'ess-r-smart-operators)
|
|
(defvar ess-r-smart-operators nil
|
|
"If nil, don't use any of smart operators.
|
|
If t, use all. If an explicit list of operators, use only those
|
|
operators.
|
|
|
|
In current version of ESS, it controls the behavior of
|
|
`ess-smart-comma' only, but will be enriched in the near future.")
|
|
|
|
|
|
(defvar ess-no-skip-regexp "[ \t\n]*\\'"
|
|
"If `ess-next-code-line' sees this line, it doesn't jump over.
|
|
|
|
Used to avoid annoying jumping by ess-eval.*-and-step to end of
|
|
buffer or end chunks etc.")
|
|
|
|
(make-obsolete-variable 'ess-smart-S-assign-key nil "ESS 18.10")
|
|
|
|
(defcustom ess-assign-list (cons (or (bound-and-true-p ess-S-assign) " <- ")
|
|
'(" <<- " " = " " -> " " ->> "))
|
|
"List of assignment operators.
|
|
`ess-cycle-assign' uses this list. These strings must
|
|
contain spaces on either side."
|
|
;; Note that spaces on either side is not strictly true (as in the
|
|
;; function won't error), but matching <-/<<- is broken without
|
|
;; them.
|
|
:type '(repeat string)
|
|
:group 'ess
|
|
:package-version '(ess "18.10"))
|
|
(defvar ess-S-assign)
|
|
(make-obsolete-variable 'ess-S-assign 'ess-assign-list "ESS 18.10")
|
|
|
|
(defcustom ess-r-prettify-symbols
|
|
'(("<-" . (?\s (Br . Bl) ?\s (Bc . Bc) ?←))
|
|
("->" . (?\s (Br . Bl) ?\s (Bc . Bc) ?→))
|
|
("->>" . (?\s (Br . Bl) ?\s (Br . Bl) ?\s
|
|
(Bl . Bl) ?- (Bc . Br) ?- (Bc . Bc) ?>
|
|
(Bc . Bl) ?- (Br . Br) ?>))
|
|
("<<-" . (?\s (Br . Bl) ?\s (Br . Bl) ?\s
|
|
(Bl . Bl) ?< (Bc . Br) ?- (Bc . Bc) ?-
|
|
(Bc . Bl) ?< (Br . Br) ?-)))
|
|
;; Setup prettify-symbols-alist to show "pretty" arrows, but make
|
|
;; sure that they arrows use the same amount of spacing as <- and
|
|
;; <<- to ensure indentation does not change when
|
|
;; prettify-symbols-mode is turned on/off.
|
|
"Alist of symbols prettifications, see `prettify-symbols-alist'.
|
|
This gets appended to `prettify-symbols-alist', so set it to nil
|
|
if you want to disable R specific prettification."
|
|
:group 'ess-R
|
|
:type '(alist :key-type string :value-type symbol)
|
|
:package-version '(ess . "18.10"))
|
|
|
|
;;*;; Variables concerning editing behavior
|
|
|
|
(defcustom ess-filenames-map t
|
|
"If non-nil, filenames and objects are the same in an attached directory.
|
|
This is not true for DOS and other OS's with limited filename
|
|
lengths. Even if this is set incorrectly, the right things will
|
|
probably still happen, however."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-keep-dump-files t
|
|
"Variable controlling whether to delete dump files after a successful load.
|
|
If nil: always delete. If `ask', confirm to delete. If `check', confirm
|
|
to delete, except for files created with `ess-dump-object-into-edit-buffer'.
|
|
Anything else, never delete. This variable only affects the behavior
|
|
of `ess-load-file'. Dump files are never deleted if an error occurs
|
|
during the load."
|
|
:group 'ess-edit
|
|
:type '(choice (const :tag "Check" :value 'check)
|
|
(const :tag "Ask" :value 'ask)
|
|
(const :tag "Always keep" :value t)
|
|
(const :tag "Always delete" :value nil)))
|
|
|
|
(defcustom ess-delete-dump-files nil
|
|
"Non-nil means delete dump files after they are created.
|
|
This applies to dump files created with
|
|
`ess-dump-object-into-edit-buffer', only.
|
|
|
|
Boolean flag which determines what to do with the dump files
|
|
generated by \\[ess-dump-object-into-edit-buffer], as follows:
|
|
|
|
If non-nil: dump files are deleted after each use, and so appear
|
|
only transiently. The one exception to this is when a loading error
|
|
occurs, in which case the file is retained until the error is
|
|
corrected and the file re-loaded.
|
|
|
|
If nil: dump files are not deleted, and backups are kept
|
|
as usual. This provides a simple method for keeping an archive of S
|
|
functions in text-file form.
|
|
|
|
Auto-save is always enabled in dump-file buffers to enable recovery
|
|
from crashes.
|
|
|
|
This is useful to prevent source files being created for objects
|
|
you don't actually modify. Once the buffer is modified and saved
|
|
however, the file is not subsequently deleted unless
|
|
`ess-keep-dump-files' is nil, and the file is successfully loaded
|
|
back into S."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-fill-calls t
|
|
"If non-nil, refilling inside a call arranges arguments.
|
|
In other words, refilling a paragraph inside a function or
|
|
indexing call will arrange the arguments according to
|
|
`fill-column' as in:
|
|
|
|
fun_call(argument1, argument2,
|
|
argument3, argument4)
|
|
|
|
|
|
Refilling repeatedly cycles through different styles and
|
|
eventually to the original formatting.
|
|
|
|
The second style formats according to one argument per line:
|
|
|
|
fun_call(argument1,
|
|
argument2,
|
|
argument3,
|
|
argument4)
|
|
|
|
When `ess-fill-calls-newlines' is t, the second style becomes:
|
|
|
|
fun_call(
|
|
argument1,
|
|
argument2,
|
|
argument3,
|
|
argument4
|
|
)
|
|
|
|
|
|
Setting `ess-offset-arguments' to `prev-line' or `prev-call'
|
|
activates a third style. It keeps one argument per line except
|
|
for the first N arguments. N is controlled with a prefix. For
|
|
example, calling \\[fill-paragraph] three times sets N to 1 while
|
|
calling \\[fill-paragraph] twice then \\[universal-argument] 2
|
|
\\[fill-paragraph] sets N to 2. Here what the default produces:
|
|
|
|
fun_call(argument1,
|
|
argument2,
|
|
argument3,
|
|
argument4,
|
|
argument5
|
|
)
|
|
|
|
This style is useful for refilling R6 or ggproto class
|
|
definitions.
|
|
|
|
|
|
The blinking of the refilled region can be disabled with
|
|
`ess-blink-refilling'."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-fill-continuations t
|
|
"Controls filling of continuations.
|
|
If non-nil, refilling a paragraph inside a continuation of
|
|
statements (expressions separated by operators) will arrange all
|
|
its elements, never going past `fill-column'.
|
|
|
|
lm(outcome ~ pred1 + pred2 +
|
|
pred3 + pred4, data)
|
|
|
|
Refilling repeatedly cycles through different styles and
|
|
eventually to the original formatting.
|
|
|
|
The second style lay out the statements according to one
|
|
expression per line:
|
|
|
|
lm(outcome ~
|
|
pred1 +
|
|
pred2 +
|
|
pred3 +
|
|
pred4, data)
|
|
|
|
The blinking of the refilled region can be disabled with
|
|
`ess-blink-refilling'."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-fill-calls-newlines nil
|
|
"When non-nil, refilling may place newlines before and after delimiters.
|
|
When non-nil, the second refilling style produces newlines
|
|
after and before the opening and closing delimiters. This is
|
|
intended for example for dplyr-style code:
|
|
|
|
fun_call(
|
|
argument1,
|
|
argument2,
|
|
argument3,
|
|
argument4
|
|
)
|
|
|
|
Note that this setting is temporary and likely to be replaced in
|
|
a future ESS version by a more comprehensive and flexible way to
|
|
set refill styles."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-blink-refilling t
|
|
"When non-nil, refilling blinks the filling region."
|
|
:group 'ess-edit
|
|
:type 'boolean)
|
|
|
|
(define-obsolete-variable-alias 'ess-mode-silently-save 'ess-save-silently "ESS 19.04")
|
|
(defcustom ess-save-silently 'auto
|
|
"If non-nil, possibly save buffers without asking.
|
|
If t, save without asking. If 'auto, save without asking if
|
|
either `compilation-ask-about-save' or variable `auto-save-visited-mode'
|
|
is non-nil. Affects `ess-save-file'."
|
|
:group 'ess-edit
|
|
:type '(choice (const :tag "Do not save without asking." :value nil)
|
|
(const :tag "Use compilation-ask-about-save and auto-save-visited-mode."
|
|
:value auto)
|
|
(const :tag "Save without asking." :value t))
|
|
:package-version '(ess . "19.04"))
|
|
|
|
;;*;; Variables controlling editing
|
|
|
|
;;;*;;; Edit buffer processing
|
|
(defcustom ess-function-template " <- function( )\n{\n\n}\n"
|
|
"If non-nil, function template used when editing nonexistent objects.
|
|
|
|
The edit buffer will contain the object name in quotes, followed by
|
|
this string. Point will be placed after the first parenthesis or
|
|
bracket."
|
|
:group 'ess-edit
|
|
:type 'string)
|
|
|
|
;;;*;;; Indentation parameters
|
|
|
|
(define-obsolete-variable-alias 'ess-tab-always-indent 'tab-always-indent "ESS 19.04")
|
|
|
|
(define-obsolete-variable-alias 'ess-indent-level 'ess-indent-offset "15.09")
|
|
(defvar ess-indent-offset 2
|
|
"Main indentation offset that is commonly inherited by other offsets.
|
|
See `ess-style-alist' for all available offsets.")
|
|
;;;###autoload
|
|
(put 'ess-indent-offset 'safe-local-variable #'numberp)
|
|
|
|
|
|
(defvar ess-offset-arguments 'open-delim
|
|
"Indent for arguments of function calls or indexing brackets.
|
|
This variables has an effect only when the ( or [ are not
|
|
directly followed by a new line. See
|
|
`ess-offset-arguments-newline' for indentation after closing
|
|
newline.
|
|
|
|
When set to `open-delim', arguments are indented relative to the
|
|
opening parenthesis of the closest function call:
|
|
|
|
object <- call(argument, other_call(argument,
|
|
other_argument))
|
|
|
|
|
|
When set to `prev-call', arguments are indented relative to the
|
|
closest function call:
|
|
|
|
object <- call(argument, other_call(argument,
|
|
other_argument))
|
|
|
|
|
|
When set to `prev-line', arguments are indented relative to the
|
|
preceding line:
|
|
|
|
object <- call(argument, other_call(argument,
|
|
other_argument))
|
|
|
|
This setting can also be set to a list containing the the offset
|
|
type and the offset size, such as `'(prev-call 2)'. Otherwise,
|
|
`ess-indent-offset' is used as a default. See `ess-style-alist'
|
|
for other offsets controlling indentation.")
|
|
|
|
(define-obsolete-variable-alias 'ess-arg-function-offset-new-line 'ess-offset-arguments-newline "15.09")
|
|
(defvar ess-offset-arguments-newline 'prev-call
|
|
"Indent of arguments when ( or [ is followed by a new line.
|
|
|
|
When set to `open-delim', arguments on a new line are indented
|
|
relative to the opening parenthesis of the closest function call:
|
|
|
|
object <- call(argument, other_call(
|
|
argument,
|
|
other_argument
|
|
))
|
|
|
|
|
|
When set to `prev-call', arguments on a new line are indented relative to
|
|
the closest function call:
|
|
|
|
object <- call(argument, other_call(
|
|
argument,
|
|
other_argument
|
|
))
|
|
|
|
You can control the details of indentation at `prev-call' with
|
|
`ess-indent-from-lhs' and `ess-indent-from-chain-start'.
|
|
|
|
|
|
When set to `prev-line', arguments on a new line are indented
|
|
relative to the preceding line:
|
|
|
|
object <- call(argument, other_call(
|
|
argument,
|
|
other_argument
|
|
))
|
|
|
|
This setting can also be set to a list containing the the offset
|
|
type and the offset size, such as `'(prev-call 2)'. Otherwise,
|
|
`ess-indent-offset' is used as a default. See `ess-style-alist'
|
|
for other offsets controlling indentation.")
|
|
|
|
(defvar ess-offset-block 'prev-line
|
|
"Controls indentation for blocks.
|
|
A block is usually declared with braces but a statement wrapped
|
|
in anonymous parentheses is also considered a block. This offset
|
|
can be either `prev-call', `prev-line' or `open-delim'.
|
|
|
|
When set to `open-delim', blocks are indented relative to the
|
|
opening parenthesis of the closest function call:
|
|
|
|
call(argument, other_call(parameter = {
|
|
stuff
|
|
}, {
|
|
stuff
|
|
}))
|
|
|
|
call(argument, lapply(data, function(x) {
|
|
body
|
|
}))
|
|
|
|
|
|
When set to `prev-call', blocks are indented relative to the
|
|
closest function call:
|
|
|
|
call(argument, other_call(parameter = {
|
|
stuff
|
|
}, {
|
|
stuff
|
|
}))
|
|
|
|
call(argument, lapply(data, function(x) {
|
|
body
|
|
}))
|
|
|
|
You can control the details of indentation at `prev-call' with
|
|
`ess-indent-from-lhs' and `ess-indent-from-chain-start'.
|
|
|
|
|
|
When set to `prev-line', blocks are indented relative to the
|
|
preceding line:
|
|
|
|
call(argument, other_call(parameter = {
|
|
stuff
|
|
}, {
|
|
stuff
|
|
}))
|
|
|
|
call(argument, lapply(data, function(x) {
|
|
body
|
|
}))
|
|
|
|
This setting can also be set to a list containing the the offset
|
|
type and the offset size, such as `'(prev-call 2)'. Otherwise,
|
|
`ess-indent-offset' is used as a default. See `ess-style-alist'
|
|
for other offsets controlling indentation.")
|
|
|
|
(define-obsolete-variable-alias 'ess-first-continued-statement-offset 'ess-offset-continued "15.09")
|
|
(define-obsolete-variable-alias 'ess-continued-statement-offset 'ess-offset-continued "15.09")
|
|
(defvar ess-offset-continued 'straight
|
|
"This setting controls indentation of continued statements.
|
|
That is, consecutive statements separated by operators.
|
|
|
|
When set to 'straight, continued statements are indented as follows:
|
|
|
|
object %>%
|
|
some_function() %>%
|
|
other_function()
|
|
|
|
When set to 'cascade:
|
|
|
|
object %>%
|
|
some_function() %>%
|
|
other_function()
|
|
|
|
The 'straight and 'cascade settings are actually equivalent to
|
|
'(straight . t) and '(cascade . t), where t represents the
|
|
base indent size. More generally, you can supply '(straight . N)
|
|
to control the size of indentation.
|
|
|
|
See `ess-style-alist' for for an overview of ESS indentation.")
|
|
|
|
(defvar ess-align-nested-calls '("ifelse")
|
|
"List of strings for which `ess-offset-arguments-newline' is ignored.
|
|
These calls will be vertically aligned instead. For example, if
|
|
`ifelse' is a member of the list, nested ifelse calls are
|
|
indented like this:
|
|
|
|
object <- ifelse(condition1, out1,
|
|
ifelse(condition2, out2, out3))
|
|
|
|
See `ess-style-alist' for for an overview of ESS indentation.")
|
|
|
|
(defvar ess-align-arguments-in-calls '("function[ \t]*(")
|
|
"A list of refexes where `ess-offset-arguments' is ignored.
|
|
List of regexes specifying the calls where `ess-offset-arguments'
|
|
should have no effect on function declarations. The arguments of
|
|
those calls will be aligned from the opening parenthesis.
|
|
|
|
By default, function declarations are overridden. If for example
|
|
`ess-offset-arguments' is set to `prev-line', then function calls
|
|
are normally indented as in:
|
|
|
|
some_function(argument1,
|
|
argument2, argument3
|
|
)
|
|
|
|
However, the parameters of function declarations will be
|
|
vertically aligned:
|
|
|
|
fun <- function(argument1,
|
|
argument2
|
|
argument3) {
|
|
body
|
|
}
|
|
|
|
See `ess-style-alist' for further details.")
|
|
|
|
(defvar ess-align-continuations-in-calls t
|
|
"Whether continuations inside calls are indented from the opening delimiter.
|
|
This produces the following indentation:
|
|
|
|
10 + (1 + 2 +
|
|
3 + 4)
|
|
object[variable1 +
|
|
variable2]
|
|
|
|
if (test1 || test2 ||
|
|
test3 || test4) {
|
|
any(test5 &
|
|
test6)
|
|
}
|
|
|
|
instead of
|
|
|
|
10 + (1 + 2 +
|
|
3 + 4)
|
|
object[variable1 +
|
|
variable2]
|
|
|
|
if (test1 || test2 ||
|
|
test3 || test4) {
|
|
any(test5 &
|
|
test6)
|
|
}
|
|
|
|
Definition operators (`<-', `=', `:=' and `~') still trigger an
|
|
indentation in all cases. Also, operators at top level and in
|
|
curly brackets are not affected by this setting and always induce
|
|
an offset:
|
|
|
|
{
|
|
var1 +
|
|
var2
|
|
}
|
|
|
|
See `ess-style-alist' for for an overview of ESS indentation.")
|
|
|
|
(defvar ess-align-blocks '(control-flow)
|
|
"List of block types for which `ess-offset-blocks' is ignored.
|
|
The overridden blocks are vertically aligned. The list can
|
|
contain either or both of the symbols `control-flow' and
|
|
`fun-decl'.
|
|
|
|
With `control-flow', if, else for and while blocks will always be
|
|
aligned vertically. With `fun-decl', the body of a function
|
|
declaration will always be aligned with the call to
|
|
`function'.")
|
|
|
|
(define-obsolete-variable-alias 'ess-arg-function-offset 'ess-indent-from-lhs "15.09")
|
|
(defvar ess-indent-from-lhs '(arguments fun-decl-opening)
|
|
"List of elements that are indented from the left side of an assignment.
|
|
The list accepts the symbol `arguments' and `fun-decl-opening'.
|
|
|
|
For arguments, this setting only has an effect for offsets set to
|
|
`prev-call'. When set, this indentation is produced:
|
|
|
|
some_function(parameter = other_function(
|
|
argument
|
|
))
|
|
|
|
object <- some_function(
|
|
argument1,
|
|
argument2
|
|
)
|
|
|
|
instead of:
|
|
|
|
some_function(parameter = other_function(
|
|
argument
|
|
))
|
|
|
|
object <- some_function(
|
|
argument1,
|
|
argument2
|
|
)
|
|
|
|
|
|
`fun-decl-opening' refers to the opening curly following a function
|
|
declaration. Setting it produces:
|
|
|
|
object <-
|
|
function(argument)
|
|
{
|
|
body
|
|
}
|
|
|
|
instead of:
|
|
|
|
object <-
|
|
function(argument)
|
|
{
|
|
body
|
|
}
|
|
|
|
This is useful when (a) you have a long function name and want to
|
|
break a line after `<-' so that you have room to lay out the
|
|
arguments within `fill-column' characters; (b) you still want to
|
|
align the function body from the LHS to save horizontal space.
|
|
|
|
See `ess-style-alist' for for an overview of ESS indentation.")
|
|
|
|
(defvar ess-indent-from-chain-start t
|
|
"When non-nil, chained calls are treated as if they were one call.
|
|
Indentation will start from the first one. This setting only has
|
|
an effect for offsets set to `prev-call' or block offsets set to
|
|
`opening-delim'.
|
|
|
|
If nil:
|
|
|
|
some_function(other_function(
|
|
argument
|
|
))
|
|
|
|
If t:
|
|
|
|
some_function(other_function(
|
|
argument
|
|
))
|
|
|
|
See `ess-style-alist' for for an overview of ESS indentation.")
|
|
|
|
;;added rmh 2Nov97 at request of Terry Therneau
|
|
(define-obsolete-variable-alias 'ess-fancy-comments 'ess-indent-with-fancy-comments "15.09")
|
|
(defcustom ess-indent-with-fancy-comments t
|
|
"Non-nil means distinguish between #, ##, and ### for indentation.
|
|
See `ess-style-alist' for for an overview of ESS indentation."
|
|
:type 'boolean
|
|
:group 'ess-edit)
|
|
|
|
;;;*;;; Editing styles
|
|
|
|
(defvar ess-style-alist
|
|
`((BSD
|
|
(ess-indent-offset . 8)
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . prev-call)
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
(C++
|
|
(ess-indent-offset . 4)
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . prev-call)
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . (arguments))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
;; CLB added rmh 2Nov97 at request of Terry Therneau
|
|
(CLB
|
|
(ess-indent-offset . ,(default-value 'ess-indent-offset))
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . (straight 4))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
(GNU
|
|
(ess-indent-offset . ,(default-value 'ess-indent-offset))
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . (prev-call 4))
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
(K&R
|
|
(ess-indent-offset . 5)
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . prev-call)
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
;; added ajr 17.Feb'04 to match "common R" use (== DEFAULT apart from offset = 4)
|
|
(RRR
|
|
(ess-indent-offset . 4)
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
(RRR+
|
|
(ess-indent-offset . 4)
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . open-delim)
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . (arguments))
|
|
(ess-indent-from-chain-start . nil)
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments)))
|
|
|
|
(RStudio
|
|
(ess-indent-offset . ,(default-value 'ess-indent-offset))
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . prev-line)
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . nil)
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . nil)
|
|
(ess-align-blocks . nil)
|
|
(ess-indent-from-lhs . (arguments))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . nil))
|
|
|
|
(RStudio-
|
|
(ess-indent-offset . ,(default-value 'ess-indent-offset))
|
|
(ess-offset-arguments . prev-line)
|
|
(ess-offset-arguments-newline . prev-line)
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . nil)
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . nil)
|
|
(ess-align-blocks . nil)
|
|
(ess-indent-from-lhs . (arguments))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . nil))
|
|
|
|
(DEFAULT
|
|
(ess-indent-offset . ,(default-value 'ess-indent-offset))
|
|
(ess-offset-arguments . ,(default-value 'ess-offset-arguments))
|
|
(ess-offset-arguments-newline . ,(default-value 'ess-offset-arguments-newline))
|
|
(ess-offset-block . ,(default-value 'ess-offset-block))
|
|
(ess-offset-continued . ,(default-value 'ess-offset-continued))
|
|
(ess-align-nested-calls . ,(default-value 'ess-align-nested-calls))
|
|
(ess-align-arguments-in-calls . ,(default-value 'ess-align-arguments-in-calls))
|
|
(ess-align-continuations-in-calls . ,(default-value 'ess-align-continuations-in-calls))
|
|
(ess-align-blocks . ,(default-value 'ess-align-blocks))
|
|
(ess-indent-from-lhs . ,(default-value 'ess-indent-from-lhs))
|
|
(ess-indent-from-chain-start . ,(default-value 'ess-indent-from-chain-start))
|
|
(ess-indent-with-fancy-comments . ,(default-value 'ess-indent-with-fancy-comments))))
|
|
|
|
"Predefined formatting styles for ESS code.
|
|
Use `ess-set-style' to apply a style in all R buffers. The values of
|
|
all styles except OWN are fixed. To change the value of variables
|
|
in the OWN group, customize the variable `ess-own-style-list'.
|
|
DEFAULT style picks default (aka global) values from ESS
|
|
indentation variables. In addition, ESS provides many indentation
|
|
styles, the most important being the RRR and the RStudio
|
|
variants.
|
|
|
|
RRR is the common R style that adheres closely to R internal
|
|
standards. RRR+ is the same except it also aligns blocks in
|
|
function calls with the opening delimiter, producing more
|
|
indentation. The C++ style (named like this for historical
|
|
reasons rather than any resemblance to existing C++ indentation
|
|
schemes) is halfway between these two styles and indent block
|
|
arguments from the start of the surrounding function's name.
|
|
|
|
The RStudio style closely mimics the indentation of the RStudio
|
|
editor. RStudio- is the same except it does not align arguments
|
|
in function calls, which corresponds to the settings of some
|
|
RStudio users.
|
|
|
|
ESS indentation is fully specified by the following offsets and
|
|
variables. See the documentation of these variables for examples.
|
|
|
|
Offsets:
|
|
|
|
- `ess-indent-offset': main offset inherited by other settings
|
|
|
|
- `ess-offset-arguments': offset type for function and bracket
|
|
arguments
|
|
|
|
- `ess-offset-arguments-newline': offset type of arguments
|
|
when ( or [ is followed by a new line.
|
|
|
|
- `ess-offset-block': offset type for brace and anonymous
|
|
parenthesis blocks
|
|
|
|
- `ess-offset-continued': offset type for continuation lines in
|
|
multiline statements
|
|
|
|
|
|
Overrides (implies vertical alignment):
|
|
|
|
- `ess-align-nested-calls': functions whose nested calls
|
|
should be aligned.
|
|
|
|
- `ess-align-arguments-in-calls': calls where
|
|
`ess-offset-arguments' should be ignored
|
|
|
|
- `ess-align-continuations-in-calls': whether to ignore
|
|
`ess-offset-continued' in calls.
|
|
|
|
- `ess-align-blocks': whether to ignore `ess-offset-blocks' for
|
|
function declarations or control flow statements.
|
|
|
|
|
|
Control variables:
|
|
|
|
- `ess-indent-from-lhs': whether to indent arguments from
|
|
left-hand side of an assignment or parameter declaration.
|
|
|
|
- `ess-indent-from-chain-start': whether to indent arguments from
|
|
the first of several consecutive calls.
|
|
|
|
- `ess-indent-with-fancy-comments': whether to indent #, ## and
|
|
### comments distinctly.")
|
|
|
|
(defun ess-add-style (key entries)
|
|
"Add a new style to `ess-style-list'.
|
|
The new style has KEY and ENTRIES. Remove any existing entry with
|
|
the same KEY before adding the new one."
|
|
(setq ess-style-alist (assq-delete-all key ess-style-alist))
|
|
(add-to-list 'ess-style-alist (cons key entries)))
|
|
|
|
(defcustom ess-own-style-list (cdr (assoc 'RRR ess-style-alist))
|
|
"Indentation variables for your own style.
|
|
Set `ess-style' to 'OWN to use these values. To change
|
|
these values, use the customize interface. See the documentation
|
|
of each variable for its meaning."
|
|
:group 'ess-edit
|
|
:type 'alist
|
|
:initialize 'custom-initialize-set
|
|
:set (lambda (symbol value)
|
|
(set symbol value)
|
|
(ess-add-style 'OWN value)))
|
|
|
|
;;;###autoload
|
|
(put 'ess-style 'safe-local-variable #'symbolp)
|
|
|
|
(define-obsolete-variable-alias 'ess-default-style 'ess-style "ESS 19.04")
|
|
(defcustom ess-style 'RRR
|
|
"Current ESS indentation style, see `ess-style-alist' for more.
|
|
See the variable `ess-style-alist' for how these groups (RRR,
|
|
DEFAULT, GNU, BSD, ...) map onto different settings for
|
|
variables. OWN style is defined in `ess-own-style-list' and you
|
|
can customize it to your needs. DEFAULT style picks default (aka
|
|
global) values from ESS indentation variables.
|
|
|
|
Prefer `ess-set-style' to set the current style. This variable
|
|
has an effect if set before a buffer is visited (e.g. in your
|
|
Emacs initialization file) or as a file or directory local
|
|
variable (see Info node `(Emacs) File Variables'."
|
|
:type '(choice (const OWN)
|
|
(const GNU)
|
|
(const BSD)
|
|
(const C++)
|
|
(const CLB)
|
|
(const K&R)
|
|
(const RRR)
|
|
(const RRR+)
|
|
(const RStudio)
|
|
(const RStudio-)
|
|
(const DEFAULT))
|
|
:group 'ess-edit
|
|
:safe #'symbolp)
|
|
|
|
;;*;; Variables controlling behavior of dump files
|
|
|
|
(defcustom ess-source-directory
|
|
(or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP") temporary-file-directory)
|
|
"Directory in which to place dump files.
|
|
This can be a string (an absolute directory name ending in a slash) or
|
|
a lambda expression of no arguments which will return a suitable string
|
|
value. The lambda expression is evaluated with the process buffer as the
|
|
current buffer.
|
|
|
|
This always dumps to a sub-directory (\".Src\") of the current ess
|
|
working directory (i.e. first elt of search list)."
|
|
:group 'ess-edit
|
|
:type 'directory
|
|
:package-version '(ess . "18.10"))
|
|
|
|
(defvar ess-dump-filename-template nil
|
|
"Internal. Initialized by dialects.")
|
|
|
|
(defcustom ess-dump-filename-template-proto (concat (user-login-name) ".%s.S")
|
|
"Prototype template for filenames of dumped objects.
|
|
The ending `S' is replaced by the current \\[ess-suffix], to give
|
|
`ess-dump-filename-template' when an inferior ESS process starts.
|
|
|
|
By default, gives filenames like `user.foofun.S', so as not to clash with
|
|
other users if you are using a shared directory. Other alternatives:
|
|
\"%s.S\" ; Don't bother uniquifying if using your own directory(ies)
|
|
\"dumpdir\"; Always dump to a specific filename. This makes it impossible
|
|
to edit more than one object at a time, though.
|
|
(make-temp-name \"scr.\") ; Another way to uniquify"
|
|
;; MM: The last 3-4 lines above suck (I don't understand them) -- FIXME --
|
|
|
|
:group 'ess-edit
|
|
:type 'string)
|
|
|
|
(defcustom ess-pre-run-hook nil
|
|
"Hook to call before starting up ESS.
|
|
Good for setting up your directory."
|
|
:group 'ess-hooks
|
|
:type 'hook)
|
|
|
|
(defcustom ess-post-run-hook nil
|
|
"Hook to call just after the ESS process starts up.
|
|
Good for evaluating ESS code."
|
|
:group 'ess-hooks
|
|
:type 'hook)
|
|
|
|
(defcustom ess-send-input-hook nil
|
|
"Hook called just before line input is sent to the process."
|
|
:group 'ess-hooks
|
|
:type 'hook)
|
|
|
|
;; ---- ./ess-roxy.el : ------------
|
|
|
|
(defcustom ess-roxy-package "roxygen2"
|
|
"The name of the R package to use for Roxygen."
|
|
:group 'ess-roxy
|
|
:type 'string)
|
|
|
|
(defcustom ess-roxy-tags-noparam '("export" "noRd")
|
|
"The tags used in roxygen fields that can be used alone.
|
|
Used to decide highlighting and tag completion."
|
|
:group 'ess-roxy
|
|
:type '(repeat string))
|
|
|
|
(defcustom ess-roxy-tags-param '("author" "aliases" "concept" "details"
|
|
"examples" "format" "keywords"
|
|
"method" "exportMethod"
|
|
"name" "note" "param"
|
|
"include" "references" "return"
|
|
"seealso" "source" "docType"
|
|
"title" "TODO" "usage" "import"
|
|
"exportClass" "exportPattern" "S3method"
|
|
"inheritParams"
|
|
"importFrom" "importClassesFrom"
|
|
"importMethodsFrom" "useDynLib"
|
|
"rdname" "section" "slot" "description"
|
|
"md" "eval")
|
|
"The tags used in roxygen fields that require a parameter.
|
|
Used to decide highlighting and tag completion."
|
|
:group 'ess-roxy
|
|
:type '(repeat string))
|
|
|
|
(defcustom ess-roxy-template-alist
|
|
(list (cons "description" ".. content for \\description{} (no empty lines) ..")
|
|
(cons "details" ".. content for \\details{} ..")
|
|
(cons "title" "")
|
|
(cons "param" "")
|
|
(cons "return" "")
|
|
(cons "author" ess-user-full-name))
|
|
"The tags and defaults to insert when creating empty templates.
|
|
Param is a place holder for where to enter
|
|
parameters. Description and details do not use @ tags, but are
|
|
instead placed at the beginning of the entry (and should
|
|
therefore also be at the beginning of this template to give
|
|
syntactically correct roxygen entries)"
|
|
:group 'ess-roxy
|
|
:type '(alist :key-type string :value-type string))
|
|
|
|
(defcustom ess-roxy-fill-param-p nil
|
|
"Non-nil causes parameter descriptions to be filled (word-wrapped) upon `ess-roxy-update-entry'."
|
|
:group 'ess-roxy
|
|
:type '(choice (const :tag "Off" nil)
|
|
(const :tag "On" t)))
|
|
|
|
(defcustom ess-roxy-hide-show-p nil
|
|
"Non-nil means ess-roxy uses function `hs-minor-mode' for block hiding with TAB."
|
|
:group 'ess-roxy
|
|
:type '(choice (const :tag "Off" nil)
|
|
(const :tag "On" t)))
|
|
|
|
(defcustom ess-roxy-start-hidden-p nil
|
|
"Non-nil means all blocks should be hidden from start."
|
|
:group 'ess-roxy
|
|
:type '(choice (const :tag "Off" nil)
|
|
(const :tag "On" t)))
|
|
|
|
(defcustom ess-roxy-str "##'"
|
|
"Prefix string to insert before each line in new roxygen blocks.
|
|
In existing roxygen blocks, the prefix is taken from the line at
|
|
point"
|
|
:group 'ess-roxy
|
|
:type 'string)
|
|
|
|
(defvar ess-roxy-insert-prefix-on-newline t
|
|
"When non-nil, `ess-roxy-newline-and-indent' makes newlines start with the roxy prefix.")
|
|
|
|
; System variables
|
|
|
|
;; SJE -- this should not be defcustom - user does not set it.
|
|
(defvaralias 'ess-current-process-name 'ess-local-process-name)
|
|
(defvar-local ess-local-process-name nil
|
|
"The name of the ESS process associated with the current buffer.")
|
|
(put 'ess-local-process-name 'risky-local-variable t)
|
|
(put 'ess-local-process-name 'permanent-local t)
|
|
|
|
(defcustom ess-switch-to-end-of-proc-buffer t
|
|
"If non-nil, `ess-switch-to-inferior-or-script-buffer' goes to the end of the process buffer."
|
|
:group 'ess
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-gen-proc-buffer-name-function 'ess-gen-proc-buffer-name:project-or-simple
|
|
"Function used for generation of the buffer name of the new ESS processes.
|
|
It should accept one argument PROC-NAME, a string specifying
|
|
internal process name (R, R:2, etc).
|
|
|
|
Provided default options are:
|
|
|
|
`ess-gen-proc-buffer-name:simple'
|
|
*proc*
|
|
|
|
`ess-gen-proc-buffer-name:directory'
|
|
*proc:dir*
|
|
`ess-gen-proc-buffer-name:abbr-long-directory'
|
|
*proc:abbr-long-dir*
|
|
`ess-gen-proc-buffer-name:project-or-simple'
|
|
*proc:project-root* or *proc*
|
|
`ess-gen-proc-buffer-name:project-or-directory'
|
|
*proc:project-root* or *proc:dir*
|
|
|
|
Strategies based on projects default to built-in strategies if
|
|
there is no project root in the current directory."
|
|
:group 'ess
|
|
:type '(choice (const :tag "*proc*" ess-gen-proc-buffer-name:simple)
|
|
(const :tag "*proc:dir*" ess-gen-proc-buffer-name:directory)
|
|
(const :tag "*proc:abbr-long-dir*" ess-gen-proc-buffer-name:abbr-long-directory)
|
|
(const :tag "*proc:project-root* or *proc*" ess-gen-proc-buffer-name:project-or-simple)
|
|
(const :tag "*proc:project-root* or *proc:dir*" ess-gen-proc-buffer-name:project-or-directory)
|
|
function)
|
|
:package-version '(ess . "19.04"))
|
|
|
|
|
|
(defcustom ess-kermit-command "gkermit -T"
|
|
"Kermit command invoked by `ess-kermit-get' and `ess-kermit-send'."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defcustom ess-kermit-prefix "#"
|
|
"String files must begin with to use kermit file transfer."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defcustom ess-kermit-remote-directory "."
|
|
"Buffer local variable that designates remote directory of file."
|
|
:group 'ess
|
|
:type 'string)
|
|
(make-variable-buffer-local 'ess-kermit-remote-directory)
|
|
|
|
;;*;; Regular expressions
|
|
|
|
;; -- Note: Some variables not-to-customize moved to ./ess-mode.el :
|
|
;; ess-r-set-function-start
|
|
|
|
;; Fixme: the following is just for S dialects :
|
|
(defcustom ess-dumped-missing-re
|
|
"\\(<-\nDumped\n\\'\\)\\|\\(<-\\(\\s \\|\n\\)*\\'\\)"
|
|
"If a dumped object's buffer matches this re, then it is replaced by `ess-function-template'."
|
|
:group 'ess
|
|
:type 'regexp)
|
|
|
|
(defcustom ess-dump-error-re
|
|
(if (string= ess-language "S") "\nDumped\n\\'"
|
|
"[Ee]rror")
|
|
"Regexp used to detect an error when loading a file."
|
|
:group 'ess
|
|
:type 'regexp)
|
|
|
|
|
|
; ess-inf: variables for inferior-ess.
|
|
|
|
(defvar inferior-ess-own-frame nil
|
|
"Non-nil means that inferior ESS buffers should start in their own frame.
|
|
This variable is deprecated.
|
|
please add an entry to `display-buffer-alist' instead. See Info
|
|
node `(ess)Customizing startup'. For example:
|
|
|
|
\(add-to-list 'display-buffer-alist
|
|
'(\"*R\"
|
|
(display-buffer-reuse-window display-buffer-pop-up-frame)))")
|
|
(make-obsolete-variable 'inferior-ess-own-frame 'display-buffer-alist "ESS 19.04")
|
|
(make-obsolete-variable 'inferior-ess-frame-alist "It is ignored. Use `display-buffer-alist' and `pop-up-frame-alist' instead." "ESS 19.04")
|
|
(make-obsolete-variable 'inferior-ess-same-window 'display-buffer-alist "ESS 19.04")
|
|
|
|
(defcustom inferior-ess-jit-lock-chunk-size 10000
|
|
"Default for (buffer local) `jit-lock-chunk-size' in inferior ESS buffers."
|
|
:group 'ess-proc
|
|
:type 'integer)
|
|
|
|
|
|
(defvaralias 'inferior-R-program 'inferior-ess-r-program)
|
|
(define-obsolete-variable-alias 'inferior-R-program-name
|
|
'inferior-ess-r-program "ESS 18.10")
|
|
(define-obsolete-variable-alias 'inferior-ess-r-program-name
|
|
'inferior-ess-r-program "ESS 18.10")
|
|
(defcustom inferior-ess-r-program (if ess-microsoft-p
|
|
"Rterm"
|
|
"R")
|
|
"Program name for invoking an inferior ESS with \\[R]."
|
|
:group 'ess-R
|
|
:type '(choice (string) file))
|
|
|
|
(defcustom inferior-R-args ""
|
|
"String of arguments used when starting R.
|
|
See also `ess-R-readline'."
|
|
:group 'ess-R
|
|
:type 'string)
|
|
|
|
(defcustom ess-R-readline nil
|
|
"When non-nil, use readline in R.
|
|
nil indicates that \"--no-readline \" should be used as argument
|
|
when starting R. This may very slightly speedup interaction. On
|
|
the other hand, readline is necessary for expansion of
|
|
\"~username/\" in paths. Note that readline interprets
|
|
tabs (tabular characters) in R source files as asking for file
|
|
name completion. This can mess up evaluation completely."
|
|
:group 'ess-R
|
|
:type 'boolean)
|
|
|
|
(defcustom inferior-STA-start-args ""
|
|
"String of switches used when starting Stata.
|
|
Also see `inferior-STA-program'."
|
|
:group 'ess-Stata
|
|
:type 'string)
|
|
|
|
(defvaralias 'inferior-R-objects-command 'inferior-ess-r-objects-command)
|
|
(defcustom inferior-ess-r-objects-command "print(objects(pos=%d, all.names=TRUE), max=1e6)\n"
|
|
"Format string for R command to get a list of objects at position %d.
|
|
Used in e.g., \\[ess-execute-objects] or \\[ess-display-help-on-object]."
|
|
:group 'ess-command
|
|
:type 'string)
|
|
|
|
(defvar ess-getwd-command nil
|
|
"Command string retrieving the working directory from the process.")
|
|
|
|
(defvar ess-setwd-command nil
|
|
"Command string to set working directory.
|
|
Should contain a formatting %s to be replaced by a
|
|
path (as in 'setwd(%s)\\n'.")
|
|
|
|
(defcustom ess-program-files ;; 32 bit version
|
|
(if (and ess-microsoft-p
|
|
(fboundp 'w32-short-file-name))
|
|
(if (getenv "ProgramW6432")
|
|
(w32-short-file-name (getenv "ProgramFiles(x86)"));; always 32 on 64 bit OS
|
|
(w32-short-file-name (getenv "ProgramFiles"))) ;; always 32 on 32 bit OS
|
|
nil)
|
|
"Safe (no embedded blanks) 8.3 name for 32-bit programs that works across internationalization."
|
|
:group 'ess
|
|
:type '(choice (string) (const nil)))
|
|
|
|
(defcustom ess-program-files-64 ;; 64 bit version
|
|
(when (and ess-microsoft-p (fboundp 'w32-short-file-name) (getenv "ProgramW6432"))
|
|
(w32-short-file-name (getenv "ProgramW6432")))
|
|
"Safe (no embedded blanks) 8.3 name for 64-bit programs that works across internationalization."
|
|
:group 'ess
|
|
:type '(choice (string) (const nil)))
|
|
|
|
(defcustom ess-directory-containing-R nil
|
|
"When non-nil, a directory containing R.
|
|
nil means the search for all occurrences of R on the machine will
|
|
use the default location of the R directory
|
|
(inside \"c:/Program Files\" in English locale Windows systems).
|
|
Non-nil values mean use the specified location as the
|
|
directory in which \"R/\" is located. For example, setting
|
|
`ess-directory-containing-R' to \"c:\" will tell ESS to search
|
|
for R versions with path names of the form \"c:/R/R-x.y.z\".
|
|
|
|
Currently only used when `ess-microsoft-p'. If you change the
|
|
value of this variable, you need to restart Emacs for it to take
|
|
effect. It also needs to be set before you load ess-site as its
|
|
value is used once only when ESS is loaded."
|
|
:group 'ess
|
|
:type '(choice (directory) (const nil)))
|
|
|
|
(defcustom ess-rterm-version-paths nil
|
|
"Stores the full path file names of Rterm versions computed via \\[ess-find-rterm].
|
|
If you have versions of R in locations other than in
|
|
../../R-*/bin/Rterm.exe or ../../rw*/bin/Rterm.exe, relative to
|
|
the directory in the variable `exec-path' containing your default
|
|
location of Rterm, you will need to redefine this variable with a
|
|
`custom-set-variables' statement in your site-start.el or .emacs
|
|
file."
|
|
:group 'ess-R
|
|
:type '(repeat string))
|
|
|
|
(define-obsolete-variable-alias 'inferior-S3-program-name
|
|
'inferior-S3-program "ESS 18.10")
|
|
(defcustom inferior-S3-program "/disk05/s/S"
|
|
"Program name for invoking an inferior ESS with S3()."
|
|
:group 'ess-S
|
|
:type 'string)
|
|
|
|
(define-obsolete-variable-alias
|
|
'inferior-S-elsewhere-program-name
|
|
'inferior-S-elsewhere-program "ESS 18.10")
|
|
(defcustom inferior-S-elsewhere-program "sh"
|
|
"Program name to invoke an inferior ESS with S on a different computer."
|
|
:group 'ess-proc
|
|
:type 'string)
|
|
|
|
(defvaralias 'S+6-dialect-name 'S+-dialect-name)
|
|
(defcustom S+-dialect-name "S+"
|
|
"Name of 'dialect' for S-PLUS 6.x and later.
|
|
Easily changeable in a user's `.emacs'."
|
|
:group 'ess-SPLUS
|
|
:type 'string)
|
|
|
|
(define-obsolete-variable-alias 'inferior-S+-program-name
|
|
'inferior-S+-program "ESS 18.10")
|
|
(defcustom inferior-S+-program
|
|
(if ess-microsoft-p
|
|
(concat ess-program-files "/TIBCO/splus82/cmd/Splus.exe")
|
|
"Splus")
|
|
"Program name to invoke S+.
|
|
On Unix/Linux, use the Splus executable. On Windows, the default
|
|
value is correct for a default installation of S-Plus 8.1 and
|
|
with bash as the shell. For any other version or location,
|
|
change this value in ess-site.el or site-start.el. Use the 8.3
|
|
version of the path name. Use double backslashes if you use the
|
|
msdos shell."
|
|
:group 'ess-SPLUS
|
|
:type '(choice (string) (file)))
|
|
|
|
(defvaralias 'inferior-S+6-start-args 'inferior-S+-start-args)
|
|
(defvaralias 'inferior-Splus-args 'inferior-S+-start-args)
|
|
(defcustom inferior-S+-start-args ""
|
|
"String of arguments used when starting S.
|
|
These arguments are currently passed only to S+6 and higher."
|
|
:group 'ess-SPLUS
|
|
:type 'string)
|
|
|
|
(defcustom inferior-Splus-objects-command "objects(where=%d)\n"
|
|
"Format string for R command to get a list of objects at position %d.
|
|
Used in e.g., \\[ess-execute-objects] or \\[ess-display-help-on-object]."
|
|
:group 'ess-command
|
|
:type 'string)
|
|
|
|
(defcustom ess-S-quit-kill-buffers-p nil
|
|
"Controls whether S buffers should also be killed once a process is killed.
|
|
This is used only when an iESS process is killed using \\[ess-quit].
|
|
Possible values:
|
|
nil - do not kill any S buffers associated with the process.
|
|
t - kill S buffers associated with the process.
|
|
ask - ask the user whether the S buffers should be killed."
|
|
:group 'ess-S
|
|
:type '(choice (const nil) (const t) (const ask)))
|
|
|
|
(define-obsolete-variable-alias 'inferior-SAS-program-name
|
|
'inferior-SAS-program "ESS 18.10")
|
|
(defcustom inferior-SAS-program "sas"
|
|
"Program name for invoking an inferior ESS with SAS()."
|
|
:group 'ess-sas
|
|
:type '(choice (string) (file)))
|
|
|
|
(define-obsolete-variable-alias 'inferior-STA-program-name
|
|
'inferior-STA-program "ESS 18.10")
|
|
(defcustom inferior-STA-program "stata"
|
|
"Program name for invoking an inferior ESS with stata().
|
|
This is NOT Stata, because we need to call Stata with TERM=emacs in
|
|
order for it to work right. And Emacs is too smart for it."
|
|
:group 'ess-Stata
|
|
:type '(choice (string) (file)))
|
|
|
|
(defvaralias 'R-editor 'ess-r-editor)
|
|
(defcustom ess-r-editor "emacsclient"
|
|
"Editor called by R process with 'edit()' command."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defvaralias 'R-pager 'ess-r-pager)
|
|
(defcustom ess-r-pager 'nil ; Usually nil is correct as ESS and page() cooperate.
|
|
"Pager called by R process with 'page()' command."
|
|
:group 'ess
|
|
:type '(choice (const nil) string))
|
|
|
|
(defcustom S-editor "emacsclient"
|
|
"Editor called by S process with 'edit()' command."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defcustom S-pager
|
|
(if ess-microsoft-p "emacsclientw.exe" "emacsclient")
|
|
"Pager called by S process with 'page()' command."
|
|
:group 'ess
|
|
:type 'string)
|
|
|
|
(defvar-local ess-editor nil
|
|
"Editor by which the process sends information to an Emacs buffer
|
|
for editing and then to be returned to the process.")
|
|
|
|
(defvar-local ess-pager nil
|
|
"Pager by which the process sends information to an Emacs buffer.")
|
|
|
|
(defvar-local inferior-ess-language-start nil
|
|
"Initialization commands sent to the ESS process.")
|
|
|
|
(define-obsolete-variable-alias 'inferior-ess-program-name
|
|
'inferior-ess-program "ESS 18.10")
|
|
(defvar-local inferior-ess-program nil
|
|
"Default program name for invoking `inferior-ess'.
|
|
The other variables ...-program should be changed, for the
|
|
corresponding program.")
|
|
|
|
(make-obsolete-variable 'inferior-ess-start-args
|
|
"Use the language specific variables like `inferior-R-args'"
|
|
"ESS 19.04")
|
|
(defvar inferior-ess-start-args ""
|
|
"String of arguments passed to the ESS process.
|
|
If you wish to pass arguments to a process, see e.g. `inferior-R-args'.")
|
|
|
|
(defcustom inferior-ess-pager (if ess-microsoft-p "console" "cat")
|
|
"Pager to use for reporting help files and similar things."
|
|
:group 'ess-proc
|
|
:type 'string)
|
|
|
|
(defvar-local inferior-ess-primary-prompt "> "
|
|
"Regular expression used by `ess-mode' to detect the primary prompt.")
|
|
|
|
(defvar-local inferior-ess-secondary-prompt nil
|
|
"Regular expression used by ess-mode to detect the secondary prompt.
|
|
This is issued by S to continue an incomplete expression.
|
|
Set to nil if language doesn't support secondary prompt.")
|
|
|
|
(defvar ess-traceback-command nil
|
|
"Command to generate error traceback.")
|
|
|
|
;; Need this to recognize prompts of the form + + + > > >
|
|
;; and "+ . + ", but not "Abcd. "
|
|
(defvar inferior-S-prompt "[]a-zA-Z0-9.[]*[>+] \\(?:[>+.] \\)*"
|
|
"Regexp used in S and R inferior and transcript buffers for prompt navigation.
|
|
Must not be anchored to BOL.")
|
|
|
|
;;*;; Variables controlling interaction with the ESS process
|
|
|
|
(defcustom ess-execute-in-process-buffer nil
|
|
"Non-nil means the ess-execute- commands output to the process buffer.
|
|
Otherwise, they get their own temporary buffer."
|
|
:group 'ess-proc
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-eval-empty nil
|
|
"Non-nil means `ess-eval-line*' will send empty lines to the ESS process."
|
|
:group 'ess-proc
|
|
:type 'boolean)
|
|
|
|
(defvaralias 'ess-eval-visibly-p 'ess-eval-visibly)
|
|
|
|
(defcustom ess-eval-visibly t
|
|
"Non-nil means ess-eval- commands display commands in the process buffer.
|
|
If t, ESS waits after each line of the command for the process
|
|
output. This results in a nice sequence of input and output but
|
|
stalls Emacs on long output (like Sys.sleep(5) in R).
|
|
|
|
If 'nowait, ESS still shows the input commands, but don't wait
|
|
for the process. Thus all the output is printed after the input
|
|
lines.
|
|
|
|
If nil, ESS doesn't print input commands and doesn't wait for the process.
|
|
|
|
This variable also affect the evaluation of input code in
|
|
iESS. The effect is similar to the above. If t then ess waits for
|
|
the process output, otherwise not."
|
|
:group 'ess-proc
|
|
:type '(choice (const t) (const nowait) (const nil)))
|
|
|
|
(defcustom ess-eval-deactivate-mark (fboundp 'deactivate-mark); was nil till 2010-03-22
|
|
"Non-nil means that after ess-eval- commands the mark is deactivated."
|
|
:group 'ess-proc
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-use-R-completion t
|
|
"Non-nil means use R-builtin completion mechanism when available."
|
|
:group 'ess-proc
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-sleep-for-shell (if ess-microsoft-p 5 1)
|
|
"Pause before sending output to the shell."
|
|
:group 'ess-proc
|
|
:type 'number)
|
|
|
|
; System variables
|
|
;; VS[06-04-2016]: fixme: move all inf vars into ess-inf.el.
|
|
|
|
;;*;; Variables relating to multiple processes
|
|
|
|
(defvar-local ess--mode-line-process-indicator '("" ess-local-process-name)
|
|
"List of ESS mode-line indicators.
|
|
Local in process buffers and must start with a string. Changes of
|
|
this variable are automatically reflected in mode-lines of the
|
|
process and all associated with it buffers.
|
|
|
|
Each symbol must evaluate to one of the standard mode line
|
|
objects. See info node `(elisp)Mode Line Data'). Add a symbol
|
|
with `add-to-list' and remove with `delq'. Note that the symbols
|
|
which are part of this list should better have
|
|
'risky-local-variable property set to t, otherwise the text
|
|
properties are not displayed.
|
|
|
|
External utilities such as `ess-tracebug' and `ess-developer'
|
|
customize this variable to indicate changes in the process
|
|
status.
|
|
")
|
|
(put 'ess--mode-line-process-indicator 'risky-local-variable t)
|
|
|
|
(defvar-local ess--local-mode-line-process-indicator '("")
|
|
"List of local process indicators.
|
|
See `ess--mode-line-process-indicator' for how to set it.
|
|
|
|
This is an internal variable used by tools like `ess-developer'
|
|
and `ess-tracebug'.")
|
|
(put 'ess--local-mode-line-process-indicator 'risky-local-variable t)
|
|
|
|
;;*;; Inferior ESS commands
|
|
|
|
(defvar-local ess-load-command "source('%s')\n"
|
|
"Dialect specific format-string for building the ess command to load a file.
|
|
|
|
This format string should use %s to substitute a file name and should
|
|
result in an ESS expression that will command the inferior ESS to load
|
|
that file.")
|
|
|
|
(defvar-local ess-eval-command nil
|
|
"Dialect specific format-string for building the command to evaluate a string.
|
|
|
|
It is usually faster to send a string to remote processes than a
|
|
file. The latter involves Tramp and can be quite slow. When
|
|
possible, a dialect should implement that command and use it
|
|
preferentially.
|
|
|
|
This format string should use %s as a placeholder for the string
|
|
to be evaluated and, optionally, %f for the file name to be
|
|
reported in the error references.
|
|
|
|
The resulting command should not echo code or print any
|
|
transitory output. See also `ess-eval-visibly-command' and
|
|
`ess-eval-visibly-noecho-command'.")
|
|
|
|
(defvar-local ess-build-eval-message-function nil
|
|
"Dialect-specific function for formatting an evaluation message.")
|
|
|
|
(defcustom inferior-ess-dump-command "dump(\"%s\",file=\"%s\")\n"
|
|
"Format-string for building the ess command to dump an object into a file.
|
|
Use first %s to substitute an object name.
|
|
Use second %s to substitute the dump file name."
|
|
:group 'ess-command
|
|
:type 'string)
|
|
|
|
(defvar-local inferior-ess-help-command "help(\"%s\")\n"
|
|
"Format-string for building the ESS command to ask for help on an object.
|
|
This format string should use %s to substitute an object name.")
|
|
|
|
(defcustom inferior-ess-r-help-command ".ess.help('%s')\n"
|
|
"Format-string for building the R command to ask for help on an object.
|
|
This format string should use %s to substitute an object name.
|
|
If set, changes will take effect when next R session is started."
|
|
:group 'ess-command
|
|
:type 'string)
|
|
|
|
(defvar-local inferior-ess-exit-command "q()\n"
|
|
"Format-string for building the ess command to exit.
|
|
This format string should use %s to substitute an object name.")
|
|
|
|
(defvar-local inferior-ess-search-list-command nil
|
|
"`ess-language' command that prints out the search list;
|
|
i.e. the list of directories and (recursive) objects that `ess-language' uses
|
|
when it searches for objects.
|
|
|
|
Really set in <ess-lang>-customize-alist in ess[dl]-*.el")
|
|
|
|
(defcustom inferior-ess-safe-names-command
|
|
"tryCatch(base::print(base::names(%s), max=1e6), error=function(e){})\n"
|
|
"Format string for ESS command to extract names from an object *safely*.
|
|
|
|
%s is replaced by an \"object name\" -- usually a list or data
|
|
frame, but in R also e.g., 'package:stats'."
|
|
:group 'ess-command
|
|
:type 'string)
|
|
|
|
;;*;; Regular expressions
|
|
(defvar-local inferior-ess-prompt nil
|
|
"The regular expression used for recognizing prompts.
|
|
|
|
It is always used in transcript mode. In inferior ess mode it is
|
|
used only if `comint-use-prompt-regexp' is t.
|
|
|
|
If not set in language's customize-alist it is constructed at run time
|
|
from `inferior-ess-primary-prompt' and `inferior-ess-secondary-prompt'.")
|
|
|
|
|
|
(defvar-local ess-change-sp-regexp ""
|
|
"The regexp for matching the S/R/.. commands that change the search path.")
|
|
|
|
(defvar ess-S+-change-sp-regexp
|
|
"\\(attach(\\([^)]\\|$\\)\\|detach(\\|collection(\\|library(\\|module(\\|source(\\)"
|
|
"The regexp for matching the S-plus commands that change the search path.")
|
|
|
|
(defvaralias 'ess-R-change-sp-regexp 'ess-r-change-sp-regexp)
|
|
(defvar ess-r-change-sp-regexp
|
|
"\\(attach(\\([^)]\\|$\\)\\|detach(\\|library(\\|require(\\|source(\\)"
|
|
"The regexp for matching the R commands that change the search path.")
|
|
|
|
;;*;; Process-dependent variables
|
|
|
|
(defvar-local ess-sl-modtime-alist nil
|
|
"Alist of modification times for all ess directories accessed this session.")
|
|
|
|
(defvar-local ess-prev-load-dir/file nil
|
|
"This symbol saves the (directory . file) pair used in the last
|
|
`ess-load-file' command. Used for determining the default in the next one.")
|
|
|
|
(defvar-local ess-object-list nil
|
|
;; This is a list of the currently known object names. It is
|
|
;; current only for one command entry; it exists under the
|
|
;; assumption that the list of objects doesn't change while entering
|
|
;; a command.
|
|
"Cache of object names.")
|
|
|
|
(defvar-local ess-help-topics-list nil
|
|
;; List of currently known help topics.
|
|
"Cache of help topics.")
|
|
|
|
;;*;; Miscellaneous system variables
|
|
|
|
;; SJE: Wed 29 Dec 2004 - following 3 ess-object* variables can be removed
|
|
;; soon if no-one needs the completion code.
|
|
(defvar ess-object-name-db-file "ess-namedb"
|
|
"File containing definitions for `ess-object-name-db'.")
|
|
|
|
(defvar ess-object-name-db-file-loaded '()
|
|
"List of programs whose name-db file has been loaded.")
|
|
|
|
(defvar-local ess-object-name-db nil
|
|
"Alist of lists of object names, with directory names as keys.
|
|
The file ess-namedb.el is loaded (if it exists) to define this variable.
|
|
See also function `ess-create-object-name-db'.")
|
|
|
|
;;;*;;; Font-lock support
|
|
|
|
;; "Reserved Words" -- part 1 --
|
|
(defvar ess-RS-constants
|
|
'("TRUE" "FALSE" "NA" "NULL" "Inf" "NaN"))
|
|
(defvar ess-R-constants
|
|
(append ess-RS-constants
|
|
'("NA_integer_" "NA_real_" "NA_complex_" "NA_character_")))
|
|
(defvar ess-S-constants
|
|
(append ess-RS-constants
|
|
'("T" "F")))
|
|
|
|
(defvar ess-R-keywords
|
|
'("if" "else" "repeat" "while" "function" "for" "in" "next" "break"
|
|
"switch" "function" "return" "on.exit" "stop" ".Defunct" "tryCatch"
|
|
"withRestarts" "invokeRestart"
|
|
"recover" "browser")
|
|
"Reserved words or special functions in the R language.")
|
|
|
|
(defvar ess-S-keywords
|
|
(append ess-R-keywords '("terminate")))
|
|
|
|
;; only some of these keywords "look like functions but are not":
|
|
(defvar ess-S-non-functions
|
|
'("if" "for" "function" "while"))
|
|
|
|
;; first the common ones
|
|
(define-obsolete-variable-alias 'ess-S-modifyiers 'ess-S-modifiers "18.10")
|
|
(defvar ess-S-modifiers
|
|
'("library" "attach" "detach" "source" "module"
|
|
"message" "warning"))
|
|
|
|
(define-obsolete-variable-alias 'ess-R-modifyiers 'ess-R-modifiers "18.10")
|
|
(defvar ess-R-modifiers
|
|
'("library" "attach" "detach" "source" "require"
|
|
"setwd" "options" "par" "load" "rm"
|
|
"message" "warning" ".Deprecated"
|
|
"signalCondition" "withCallingHandlers"))
|
|
|
|
(defvar ess-R-message-prefixes
|
|
'("Error:" "Error in"
|
|
"Warning:" "Warning in"
|
|
"Warning messages"))
|
|
(defvar ess-S-message-prefixes
|
|
(append ess-R-message-prefixes
|
|
'("Syntax error:" "Dumped")))
|
|
|
|
(defvar ess-R-assign-ops
|
|
;; don't want "=" here which is not only for assign
|
|
'("<<-" "<-" "->" "->>"))
|
|
(defvar ess-S-assign-ops ess-R-assign-ops)
|
|
|
|
(defvar ess-R-function-name-regexp
|
|
(concat "\\(" "\\sw+" "\\)"
|
|
"[ \t]*" "\\(<-\\)"
|
|
"[ \t\n]*" "function\\b"))
|
|
|
|
(defvar ess-S-function-name-regexp
|
|
ess-R-function-name-regexp)
|
|
|
|
(defvar ess-font-lock-keywords nil
|
|
"A name of the dialect specific font-lock keywords in the current buffer.
|
|
See `ess-R-font-lock-keywords' for an example. This is an
|
|
internal variable.")
|
|
|
|
(defvar ess-fl-keyword:fun-calls
|
|
(cons "\\(\\sw+\\)[\t ]*(" '(1 ess-function-call-face keep))
|
|
"Font lock for function calls.")
|
|
|
|
(defvar ess-fl-keyword:numbers
|
|
(cons "\\b\\.?[0-9]+[.eEL]?[0-9]*\\b" 'ess-numbers-face)
|
|
"Font lock for numbers.")
|
|
|
|
(defvar ess-fl-keyword:delimiters
|
|
(cons "\\s(\\|\\s)" 'ess-paren-face)
|
|
"Font lock for parenthesis.")
|
|
|
|
(defvar ess-fl-keyword:=
|
|
(cons "=" 'ess-paren-face)
|
|
"Font lock for equal sign (=).")
|
|
|
|
(defvar ess-fl-keyword:operators
|
|
(cons "[-=+></]+" 'ess-operator-face)
|
|
"Operators.")
|
|
|
|
(defvar ess-S-fl-keyword:modifiers
|
|
(cons (regexp-opt ess-S-modifiers 'words)
|
|
'ess-modifiers-face) ; modify search list or source (i.e. directives)
|
|
"Font lock keyword R modifiers.")
|
|
|
|
(defvar ess-S-fl-keyword:fun-defs
|
|
(cons ess-S-function-name-regexp
|
|
'(1 font-lock-function-name-face t))
|
|
"Font-lock function definitions keyword.")
|
|
|
|
(defvar ess-S-fl-keyword:keywords
|
|
(cons (regexp-opt ess-S-keywords 'words) 'ess-keyword-face))
|
|
|
|
(defvar ess-S-fl-keyword:assign-ops
|
|
(cons (regexp-opt ess-S-assign-ops) 'ess-assignment-face)
|
|
"Font-lock assign operators.")
|
|
|
|
(defvar ess-S-fl-keyword:constants
|
|
(cons (regexp-opt ess-S-constants 'words) 'ess-constant-face)
|
|
"Font-lock constants keyword.")
|
|
|
|
(defcustom ess-S-font-lock-keywords
|
|
'((ess-S-fl-keyword:modifiers . t)
|
|
(ess-S-fl-keyword:fun-defs . t)
|
|
(ess-S-fl-keyword:keywords . t)
|
|
(ess-S-fl-keyword:assign-ops . t)
|
|
(ess-S-fl-keyword:constants . t)
|
|
(ess-fl-keyword:fun-calls)
|
|
(ess-fl-keyword:numbers)
|
|
(ess-fl-keyword:operators)
|
|
(ess-fl-keyword:delimiters)
|
|
(ess-fl-keyword:=))
|
|
"An alist of available font-lock keywords for the S mode.
|
|
The key of each cons cell is a name of the keyword. The value
|
|
should be t or nil to indicate if the keyword is activated by
|
|
default or not."
|
|
:group 'ess-S
|
|
:group 'ess-faces
|
|
:type '(repeat (cons symbol boolean)))
|
|
|
|
(defvar ess-R-fl-keyword:modifiers
|
|
'(eval . (cons (concat "\\(" (regexp-opt ess-R-modifiers 'words) "\\)\\s-*(")
|
|
'(1 ess-modifiers-face)))
|
|
"Font-lock keyword R modifiers.
|
|
See `ess-R-modifiers' for the list of modifiers.")
|
|
|
|
(defvar ess-R-fl-keyword:fun-defs
|
|
'(eval . (cons ess-R-function-name-regexp
|
|
'(1 font-lock-function-name-face nil)))
|
|
"Font-lock keyword for function names in function definitions.
|
|
When this keyword is on, function names on the left hand side of
|
|
<- are highlighted with `font-lock-function-name-face'.")
|
|
|
|
(defvar ess-R-fl-keyword:keywords
|
|
'(ess-r--find-fl-keyword . ess-keyword-face)
|
|
"Font lock keyword for `ess-R-keywords'.")
|
|
|
|
(defvar ess-R-fl-keyword:assign-ops
|
|
'(eval . (cons (regexp-opt ess-R-assign-ops) 'ess-assignment-face))
|
|
"Font-lock assign operators.
|
|
See `ess-R-assign-ops' for the ops.")
|
|
|
|
(defvar ess-R-fl-keyword:constants
|
|
'(eval . (cons (regexp-opt ess-R-constants 'words) 'ess-constant-face))
|
|
"Font-lock constants keyword.
|
|
See `ess-R-constants' for the list of constants.")
|
|
|
|
(defvar ess-R-fl-keyword:F&T
|
|
'("\\b[FT]\\b" . ess-constant-face)
|
|
"Highlight T and F in addition to TRUE and FALSE in R.")
|
|
|
|
(defvar ess-R-fl-keyword:%op% nil
|
|
"Highlight %op% operators.")
|
|
|
|
(defcustom ess-R-font-lock-keywords
|
|
'((ess-R-fl-keyword:keywords . t)
|
|
(ess-R-fl-keyword:constants . t)
|
|
(ess-R-fl-keyword:modifiers . t)
|
|
(ess-R-fl-keyword:fun-defs . t)
|
|
(ess-R-fl-keyword:assign-ops . t)
|
|
(ess-R-fl-keyword:%op% . t)
|
|
(ess-fl-keyword:fun-calls)
|
|
(ess-fl-keyword:numbers)
|
|
(ess-fl-keyword:operators)
|
|
(ess-fl-keyword:delimiters)
|
|
(ess-fl-keyword:=)
|
|
(ess-R-fl-keyword:F&T))
|
|
"An alist of available font-lock keywords for the R mode.
|
|
The key of each cons cell is a name of the keyword. The value
|
|
should be t or nil to indicate if the keyword is active or not."
|
|
:group 'ess-R
|
|
:group 'ess-faces
|
|
:type '(repeat (cons symbol boolean)))
|
|
|
|
(defvar ess-S-fl-keyword:prompt
|
|
(cons (concat "^" inferior-S-prompt) 'comint-highlight-prompt)
|
|
"Highlight prompts missed by comint.")
|
|
|
|
(defvar ess-fl-keyword:matrix-labels
|
|
;; also matches subsetting
|
|
(cons "\\[,?[1-9][0-9]*,?\\]" 'ess-matrix-face)
|
|
"Matrix and vector numeric labels.")
|
|
|
|
(defvar ess-R-fl-keyword:messages
|
|
(cons (regexp-opt ess-R-message-prefixes 'enc-paren)
|
|
'font-lock-warning-face)
|
|
"Inferior-ess problems or errors.")
|
|
|
|
(defvaralias 'inferior-R-font-lock-keywords 'inferior-ess-r-font-lock-keywords)
|
|
(defcustom inferior-ess-r-font-lock-keywords
|
|
'((ess-S-fl-keyword:prompt . t)
|
|
(ess-R-fl-keyword:keywords . t)
|
|
(ess-R-fl-keyword:constants . t)
|
|
(ess-R-fl-keyword:modifiers . t)
|
|
(ess-R-fl-keyword:messages . t)
|
|
(ess-R-fl-keyword:fun-defs . t)
|
|
(ess-R-fl-keyword:assign-ops . t)
|
|
(ess-fl-keyword:matrix-labels . t)
|
|
(ess-fl-keyword:fun-calls)
|
|
(ess-fl-keyword:numbers)
|
|
(ess-fl-keyword:operators)
|
|
(ess-fl-keyword:delimiters)
|
|
(ess-fl-keyword:=)
|
|
(ess-R-fl-keyword:F&T))
|
|
"Font-lock patterns used in `inferior-ess-r-mode' buffers.
|
|
The key of each cons cell is a name of the keyword. The value
|
|
should be t or nil to indicate if the keyword is active or not."
|
|
:group 'ess-R
|
|
:group 'ess-faces
|
|
:type '(repeat (cons symbol boolean)))
|
|
|
|
(defvar ess-S-fl-keyword:messages
|
|
(cons (regexp-opt ess-S-message-prefixes 'enc-paren)
|
|
'font-lock-warning-face)
|
|
"Inferior-ess problems or errors.")
|
|
|
|
(defcustom inferior-S-font-lock-keywords
|
|
'((ess-S-fl-keyword:prompt . t)
|
|
(ess-S-fl-keyword:messages . t)
|
|
(ess-S-fl-keyword:modifiers . t)
|
|
(ess-S-fl-keyword:fun-defs . t)
|
|
(ess-S-fl-keyword:keywords . t)
|
|
(ess-S-fl-keyword:assign-ops . t)
|
|
(ess-S-fl-keyword:constants . t)
|
|
(ess-fl-keyword:fun-calls)
|
|
(ess-fl-keyword:numbers)
|
|
(ess-fl-keyword:operators)
|
|
(ess-fl-keyword:delimiters)
|
|
(ess-fl-keyword:=))
|
|
"Font-lock patterns used in inferior-S-mode buffers.
|
|
The key of each cons cell is a name of the keyword. The value
|
|
should be t or nil to indicate if the keyword is active by
|
|
default."
|
|
:group 'ess-S
|
|
:group 'ess-faces
|
|
:type '(repeat (cons symbol boolean)))
|
|
|
|
|
|
;;;*;;; ess-help variables
|
|
|
|
;; This will never need to be loaded independently of any of the other modules,
|
|
;; but they can all call it so we may as well put it here.
|
|
|
|
(defcustom ess-help-pop-to-buffer t
|
|
"If non-nil ess-help buffers are given focus during the display.
|
|
If non-nil, `ess-display-help' uses `pop-to-buffer' to display
|
|
help, otherwise it uses `display-buffer', which does not select
|
|
the help window."
|
|
:group 'ess-help
|
|
:type 'boolean)
|
|
|
|
(defcustom ess-help-own-frame nil
|
|
"Controls whether ESS help buffers should start in a different frame.
|
|
|
|
Possible values are:
|
|
nil: Display help in current frame.
|
|
'one: All help buffers are shown in one dedicated frame.
|
|
t: Each help buffer gets its own frame.
|
|
|
|
If this is non-nil,`ess-help-reuse-window' is ignored. The
|
|
parameters of the own frame are stored in
|
|
`ess-help-frame-alist'."
|
|
:group 'ess-help
|
|
:type '(choice (const :tag "Display in current frame" nil)
|
|
(const :tag "Display in one frame" one)
|
|
(const :tag "Always display in a new frame" t)))
|
|
|
|
(defcustom ess-help-reuse-window t
|
|
"If t, ESS tries to display new help buffers in the existing help window.
|
|
This variable is ignored if `ess-help-own-frame' is non-nil."
|
|
:type 'boolean
|
|
:group 'ess-help)
|
|
|
|
(defcustom ess-help-frame-alist default-frame-alist
|
|
"Alist of frame parameters used to create help frames.
|
|
This defaults to `default-frame-alist' and is used only when
|
|
the variable `ess-help-own-frame' is non-nil."
|
|
:group 'ess-help
|
|
:type 'alist
|
|
:package-version '(ess . "18.10"))
|
|
|
|
; Faces
|
|
;;;=====================================================
|
|
|
|
(defconst comint-highlight-prompt 'comint-highlight-prompt)
|
|
|
|
(defconst ess-function-call-face 'ess-function-call-face)
|
|
(defface ess-function-call-face
|
|
'((default (:slant normal :inherit font-lock-function-name-face)))
|
|
"Font Lock face used to highlight function calls in ess buffers."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-numbers-face 'ess-numbers-face)
|
|
(defface ess-numbers-face
|
|
'((default (:slant normal :inherit font-lock-type-face)))
|
|
"Font Lock face used to highlight numbers in ess-mode buffers."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-operator-face 'ess-operator-face)
|
|
(defface ess-operator-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font Lock face for operators."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-%op%-face 'ess-%op%-face)
|
|
(defface ess-%op%-face
|
|
'((default (:inherit ess-operator-face)))
|
|
"Font Lock face used to highlight %op% operators in ess-mode buffers."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-assignment-face 'ess-assignment-face)
|
|
(defface ess-assignment-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font lock face used to highlight assignment operators."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-paren-face 'ess-paren-face)
|
|
(defface ess-paren-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font lock face used to highlight parentheses."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-operator-face 'ess-operator-face)
|
|
(defface ess-operator-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font lock face used to highlight operators."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-modifiers-face 'ess-modifiers-face)
|
|
(defface ess-modifiers-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font lock face used to highlight modifiers.
|
|
In `R-mode', for example, this includes \"library,\" \"attach,\"
|
|
and others. See `ess-R-modifiers'."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-constant-face 'ess-constant-face)
|
|
(defface ess-constant-face
|
|
'((default (:inherit font-lock-type-face)))
|
|
"Font lock face used to highlight constants.
|
|
In `ess-r-mode', for example, this includes TRUE, FALSE, Inf and
|
|
others. See `ess-R-constants'."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-matrix-face 'ess-matrix-face)
|
|
(defface ess-matrix-face
|
|
'((default (:inherit font-lock-constant-face)))
|
|
"Font lock face used to highlight row/column labels in matrices."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-keyword-face 'ess-keyword-face)
|
|
(defface ess-keyword-face
|
|
'((default (:inherit font-lock-keyword-face)))
|
|
"Font lock face used to highlight reserved keywords.
|
|
In `ess-r-mode', for example, this includes \"while,\" \"if/else\",
|
|
\"function,\" and others. See `ess-R-keywords'."
|
|
:group 'ess-faces)
|
|
|
|
(defconst ess-r-control-flow-keyword-face 'ess-r-control-flow-keyword-face)
|
|
(defface ess-r-control-flow-keyword-face
|
|
'((default (:inherit ess-keyword-face)))
|
|
"Font lock face used to highlight control flow keywords.
|
|
In `R-mode', for example, this includes \"switch(),\"
|
|
\"tryCatch()\", and \"stop(),\". See
|
|
`ess-R-control-flow-keywords'. By default, these keywords are
|
|
highlighted with the same face as `ess-R-keywords'"
|
|
:group 'ess-faces)
|
|
|
|
(defcustom ess-help-kill-bogus-buffers t
|
|
"Non-nil means kill ESS help buffers immediately if they are \"bogus\"."
|
|
:group 'ess-help
|
|
:type 'boolean)
|
|
|
|
(defvar ess-execute-screen-options-command nil
|
|
"Dialect specific command run by `ess-execute-screen-options'.")
|
|
|
|
(defvar-local ess-funargs-command nil
|
|
"Dialect specific command to return a list of function arguments.
|
|
See `ess-function-arguments' and .ess_funargs command in R and
|
|
S+ for details of the format that should be returned.")
|
|
|
|
; System variables
|
|
;;;=====================================================
|
|
;;; Users note: You will rarely have to change these
|
|
;;; variables.
|
|
|
|
;;*;; Variables relating to ess-help-mode
|
|
|
|
;;-- ess-help-S-.. and ess-help-R-.. : in ess-s-lang.el (are used in ess-inf).
|
|
|
|
(defvar-local ess-help-sec-keys-alist nil
|
|
"Alist of (key . string) pairs for use in section searching.")
|
|
|
|
(defvar-local ess-help-sec-regex nil
|
|
"Reg(ular) Ex(pression) of section headers in help file.")
|
|
|
|
; julia-mode
|
|
(define-obsolete-variable-alias 'inferior-julia-program-name
|
|
'inferior-julia-program "ESS 18.10")
|
|
(defcustom inferior-julia-program (or (executable-find "julia-basic")
|
|
"julia")
|
|
"Executable for Julia.
|
|
Should be an absolute path to the julia executable."
|
|
:group 'ess-Julia
|
|
:type '(choice (string) (file)))
|
|
|
|
;; FIXME
|
|
(defvar-local ess-mode-completion-syntax-table nil "Completion and help syntax table for `ess-mode'.")
|
|
|
|
; Buffer local customization stuff
|
|
|
|
(defcustom ess-error-buffer-name "*ESS-errors*"
|
|
"Name of buffer to keep process error messages in.
|
|
Created for each process."
|
|
:group 'ess-proc
|
|
:type 'string)
|
|
|
|
(defvar ess-error-regexp-alist nil
|
|
"List of symbols which are looked up in `compilation-error-regexp-alist-alist'.")
|
|
|
|
(defcustom ess-write-to-dribble t
|
|
"Non-nil means write to `ess-dribble-buffer'.
|
|
See also `ess-verbose'."
|
|
:group 'ess-proc
|
|
:type 'boolean
|
|
:package-version '(ess . "18.10"))
|
|
|
|
(defcustom ess-verbose nil
|
|
"Non-nil means write more information to `ess-dribble-buffer' than usual."
|
|
:group 'ess-proc
|
|
:type 'boolean)
|
|
|
|
(defvar ess-dribble-buffer "*ESS*"
|
|
"Buffer or name of buffer for printing debugging information.")
|
|
|
|
(defvar-local ess-local-customize-alist nil
|
|
"Buffer local settings for proper behavior.
|
|
Used to store the values for passing on to newly created buffers.")
|
|
|
|
(defvar ess-mode-editing-alist nil
|
|
"Variable settings for `ess-mode'.")
|
|
|
|
(defvar-local ess-transcript-minor-mode nil
|
|
"Non-nil if using `ess-transcript-mode' as a minor mode of some other mode.")
|
|
|
|
(defvar-local ess-listing-minor-mode nil
|
|
"Non-nil if using `ess-listing-minor-mode'.")
|
|
|
|
(defvar ess--enable-experimental-projects nil
|
|
"Enable experimental project support in ESS.")
|
|
|
|
(defvar ess-STERM nil
|
|
"Placeholder for dialect-specific STERM.")
|
|
|
|
(make-obsolete-variable 'ess-S-loop-timeout "It is ignored." "ESS 18.10")
|
|
(make-obsolete-variable 'ess-mode-load-hook "It is ignored." "ESS 18.10")
|
|
(make-obsolete-variable 'ess-speedbar-use-p "It is ignored." "ESS 18.10")
|
|
(make-obsolete-variable 'ess-synchronize-evals "It is ignored." "ESS 18.10")
|
|
(make-obsolete-variable 'ess-eval-visibly-at-end "It is ignored." "ESS 18.10")
|
|
(make-obsolete-variable 'ess-font-lock-mode 'global-font-lock-mode "ESS 18.10")
|
|
(provide 'ess-custom)
|
|
|
|
;;; ess-custom.el ends here
|