开发者

ESS: ess-request-a-process defaults to "S"

开发者 https://www.devze.com 2023-01-29 15:53 出处:网络
Quite often I find myself with bunch of R processes running in ESS buffers. There\'s a convenient Lisp function ess-request-a-process that asks for R process, and brings it to front. The only downside

Quite often I find myself with bunch of R processes running in ESS buffers. There's a convenient Lisp function ess-request-a-process that asks for R process, and brings it to front. The only downside is that it somehow defaults to S, so each time I'm about to make a switch, I have to type R, ad nauseam.

I tried customising the ess-language variable, but even if I set value to "R", i.e. 4 for current session, or even if I save settings for future session, as soon as I type C-c C-k, automagically S appears once again. It's very annoying, and I really don't want to end up with C-x C-b and then C-s for desired R session! =)

I even tried setting (setq-default ess-language "R") in .emacs, but with no luck...

BTW, I'm running Emacs v. 23.1.1 on Linux Mint and Emacs v. 23.2 on Arch Linux, with ESS v. 5.12. If that's relevant, I run Emacs from terminal with -nw argument. Here's my .emacs:

;; start server
(server-start)

;; load ESS
(require 'ess-site)
(requ开发者_开发问答ire 'ess-rutils)

;; set HTML help as default
(setq inferior-ess-r-help-command "help(\"%s\", help_type = \"html\")\n")

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(ess-help-kill-bogus-buffers t)
 '(ess-rutils-keys nil)
 '(show-paren-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(put 'upcase-region 'disabled nil)

So... how to set R once and for all? (I don't use S/S+/SAS)


I did not know about this function so far. C-c C-k is bound to ess-force-buffer-current in ESS buffers.

[edit: C-c C-k is indeed bound to ess-request-a-process in iESS, in ESS it's ess-force-buffer-current]

In any case the variable you have to customize is ess-dialect

(setq-default ess-dialect "R")

It's buffer-local variable and some other stuff in ess-mode-hook might set it a different value.

Check it in each buffer with C-h v ess-dialect

Additionally, if you already running several processes then ess-switch-process (C-c C-s) might be the right way to go. [edit: it will not jump to a process but just reset the associated process of the current ESS buffer]

[edit: After dwelling deeper on the issue it turned out that ess-request-a-process uses ess-language variable were the ess-dialect seems to be more appropriate. The problem is that each time an ess-inferior process starts it resets the global value of ess-language. This is why setting it in your case didn't work.

Here is a quick fix:

(defun ess-set-language ()
  (setq-default ess-language "R")
  (setq ess-language "R")
  )

(add-hook 'ess-post-run-hook 'ess-set-language t)

]

0

精彩评论

暂无评论...
验证码 换一张
取 消