ESS: ess-request-a-process по умолчанию имеет значение " S"


Довольно часто я сталкиваюсь с кучей процессов R, работающих в ESS buffers. Есть удобная функция Lisp ess-request-a-process, которая запрашивает процесс R и выводит его на передний план. Единственным недостатком является то, что он каким-то образом по умолчанию принимает значение S, поэтому каждый раз, когда я собираюсь сделать переключение, я должен ввести R, ad nauseam.

Я попытался настроить переменную ess-language, но даже если я установлю значение "R", то есть 4 для текущей сессии, или даже если я сохраню настройки для будущей сессии, как только я Тип C-c C-k, автоматически S появляется еще раз. Это очень раздражает, и я действительно не хочу заканчивать с C-x C-b, а затем C-s для желаемой сессии R! =)

Я даже попытался установить (setq-default ess-language "R") в .emacs, но безуспешно...

Кстати, я запускаю Emacs V. 23.1.1 на Linux Mint и Emacs V. 23.2 на Arch Linux, с ESS V. 5.12. Если это уместно, я запускаю Emacs из терминала с аргументом -nw. Вот мой .emacs:

;; start server
(server-start)

;; load ESS
(require 'ess-site)
(require '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)

Итак... как установить R раз и навсегда все? (Я не использую S / S+ / SAS)

1 3

1 ответ:

Я не знал об этой функции до сих пор. C-c C-k связан с ess-force-buffer-current в буферах ESS.

[edit: C-c-k действительно привязан к ess-запросу-a-процессу в iESS, в ESS это ess-force-buffer-current]

В любом случае переменная, которую вы должны настроить, является ess-dialect

(setq-default ess-dialect "R")

Это буферно-локальная переменная, и некоторые другие вещи в ess-mode-hook могут задать ей другое значение.

Проверьте его в каждом буфере с помощью C-h v ess-dialect

Дополнительно, если вы тогда уже запущено несколько процессов ess-switch-process (C-c-s ) может быть правильным путем. [edit: он не будет переходить к процессу, а просто сбросит связанный процесс текущего буфера ESS]

[редактировать: после того, как жилище глубже по этому вопросу выяснилось, что ess-request-a-process используется ess-language переменной были ess-dialect представляется более уместным. Проблема заключается в том, что каждый раз, когда запускается процесс ess-inferior, он сбрасывает глобальное значение ess-language. Вот почему установка его в вашем случае не сделала работа.

Вот краткое исправление:

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

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

]