2010-12-08 2 views
3

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

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

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

BTW, я бегу Emacs v. 23.1.1 на Linux Mint и Emacs против. 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)

ответ

3

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

[править: Cc Ck действительно связан с ESS-запрос-а-процесса в МСО, в ESS это ess-force-buffer-current]

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

(setq-default ess-dialect "R") 

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

Проверьте это в каждом буфере с C-ч противess-dialect

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

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

]

+0

Я не могу найти `ESS-dialect` переменной. `C-c C-v` зарезервирован для справки функции R, а` C-c C-s` зарезервирован для `ess-execute-search`.Мне кажется, что я делаю что-то ужасное здесь ... – aL3xa 2010-12-08 09:48:21