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 ответ:
Я не знал об этой функции до сих пор. 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)
]