This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/ess/funcs.el
Seong Yong-ju ee5a5e8b73
Add LSP backend support for R
Change some leader keys for Julia, R, Inferior. Remove noweb bindings for Julia
and R since it no longer works. Add LSP backend support for R.
2020-02-08 08:02:46 +00:00

110 lines
3.8 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

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

;;; funcs.el --- ESS Layer functions File
;;
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
;; R
(defun spacemacs//ess-r-backend ()
"Returns selected backend."
(if ess-r-backend
ess-r-backend
(cond ((configuration-layer/layer-used-p 'lsp) 'lsp)
(t 'ess))))
(defun spacemacs//ess-may-setup-r-lsp ()
"Conditionally setup LSP based on backend."
(when (eq (spacemacs//ess-r-backend) 'lsp)
(spacemacs//ess-setup-r-lsp)))
(defun spacemacs//ess-setup-r-lsp ()
"Setup LSP backend."
(if (configuration-layer/layer-used-p 'lsp)
(lsp)
(message "`lsp' layer is not installed, please add `lsp' layer to your dotfile.")))
;; Key Bindings
(defun spacemacs//ess-bind-keys-for-mode (mode)
"Bind the keys in MODE."
(spacemacs/declare-prefix-for-mode mode "md" "debug")
(spacemacs/declare-prefix-for-mode mode "mD" "devtools")
(spacemacs/declare-prefix-for-mode mode "mDc" "check")
(spacemacs/declare-prefix-for-mode mode "mE" "extra")
(spacemacs/declare-prefix-for-mode mode "mh" "help")
(spacemacs/set-leader-keys-for-major-mode mode
"h" 'ess-doc-map ;; help
"d" 'ess-dev-map ;; debug
"D" 'ess-r-package-dev-map ;; devtools
"E" 'ess-extra-map ;; extra
))
(defun spacemacs//ess-bind-repl-keys-for-mode (mode)
"Set the REPL keys in MODE."
(spacemacs/declare-prefix-for-mode mode "ms" "repl")
(spacemacs/set-leader-keys-for-major-mode mode
"," #'ess-eval-region-or-function-or-paragraph-and-step
"'" #'spacemacs/ess-start-repl
"si" #'spacemacs/ess-start-repl
"ss" #'ess-switch-to-inferior-or-script-buffer
"sS" #'ess-switch-process
"sB" #'ess-eval-buffer-and-go
"sb" #'ess-eval-buffer
"sd" #'ess-eval-region-or-line-and-step
"sD" #'ess-eval-function-or-paragraph-and-step
"sL" #'ess-eval-line-and-go
"sl" #'ess-eval-line
"sR" #'ess-eval-region-and-go
"sr" #'ess-eval-region
"sF" #'ess-eval-function-and-go
"sf" #'ess-eval-function))
(defun spacemacs/ess-bind-keys-for-julia ()
(spacemacs//ess-bind-keys-for-mode 'ess-julia-mode)
(spacemacs//ess-bind-repl-keys-for-mode 'ess-julia-mode))
(defun spacemacs/ess-bind-keys-for-r ()
(when ess-assign-key
(define-key ess-r-mode-map ess-assign-key #'ess-insert-assign))
(spacemacs//ess-bind-keys-for-mode 'ess-r-mode)
(spacemacs//ess-bind-repl-keys-for-mode 'ess-r-mode))
(defun spacemacs/ess-bind-keys-for-inferior ()
(define-key inferior-ess-mode-map (kbd "C-j") #'comint-next-input)
(define-key inferior-ess-mode-map (kbd "C-k") #'comint-previous-input)
(when ess-assign-key
(define-key inferior-ess-r-mode-map ess-assign-key #'ess-insert-assign))
(spacemacs/declare-prefix-for-mode 'inferior-ess-mode "ms" "repl")
(spacemacs/declare-prefix-for-mode 'inferior-ess-mode "me" "eval")
(spacemacs/declare-prefix-for-mode 'inferior-ess-mode "mg" "xref")
(spacemacs/set-leader-keys-for-major-mode 'inferior-ess-mode
"," #'ess-smart-comma
"ss" #'ess-switch-to-inferior-or-script-buffer))
;; REPL
(defun spacemacs/ess-start-repl ()
"Start a REPL corresponding to the ess-language of the current buffer."
(interactive)
(cond
((string= "S" ess-language) (call-interactively 'R))
((string= "STA" ess-language) (call-interactively 'stata))
((string= "SAS" ess-language) (call-interactively 'SAS))
((string= "julia" ess-language) (call-interactively 'julia))))
(defun spacemacs//ess-fix-read-only-inferior-ess-mode ()
"Fixes a bug when `comint-prompt-read-only' in non-nil.
See https://github.com/emacs-ess/ESS/issues/300"
(setq-local comint-use-prompt-regexp nil)
(setq-local inhibit-field-text-motion nil))