ESS: ess-request-a-process по умолчанию равен "S" - PullRequest
3 голосов
/ 08 декабря 2010

Довольно часто я сталкиваюсь с множеством процессов R, работающих в буферах ESS.Есть удобная функция 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 и Emacsv. 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 голосов
/ 08 декабря 2010

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

[править: C-c C-k действительно связан с ess-request-a-process в 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 C-s ) может быть правильным решением. [edit: он не перейдет к процессу, а просто сбросит связанный процесс текущего буфера ESS]

[править: После более глубокого рассмотрения вопроса выяснилось, что ess-request-a-process использует переменную ess-language, где ess-dialect представляется более подходящим. Проблема заключается в том, что каждый раз, когда запускается процесс, подчиненный ess, он сбрасывает глобальное значение 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)

]

...