ESS: ess-request-a-process по подразбиране е S

Доста често се оказвам с куп 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 и 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)


person aL3xa    schedule 08.12.2010    source източник


Отговори (1)


Досега не знаех за тази функция. 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) може да е правилният начин. [редактиране: няма да премине към процес, а просто да нулира свързания процес на текущия 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)

]

person VitoshKa    schedule 08.12.2010
comment
Изглежда не мога да намеря променлива ess-dialect. C-c C-v е запазено за R функция помощ, докато C-c C-s е запазено за ess-execute-search. Имам чувството, че правя нещо ужасно грешно тук... - person aL3xa; 08.12.2010
comment
@aL3xa, съжалявам, променливата help е разбира се C-h v ess-dialect, коригирана сега.C-c C-s е обвързана с ess-execute-search в iESS буфер, а не в ESS буфери. Какъв е смисълът да превключвате процеса в буфера на процеса? :) - person VitoshKa; 08.12.2010
comment
Ами... Бих искал да направя безсмисленото превключване! =) Сега, възможно ли е просто да зададете R вместо S? - person aL3xa; 08.12.2010
comment
@aL3xa, сега виждам, че има известно объркване в терминологията. Превключване на процес означава промяна на асоциацията на подпроцеса за текущия буфер. Това прави ess-switch-process. И не можете да промените свързания подпроцес на буфера, в който се изпълнява процесът (долен ESS). Това, което вероятно имате предвид, е превключване към друг буфер на процеса (т.е. прескачане). Но тази напълно различна функционалност, C-c C-z например. - person VitoshKa; 08.12.2010
comment
Задаването на ess-dialect трябва да работи. Всички вътрешни функции го използват като име по подразбиране за стартиране или превключване към процеси. Не работи за вас? - person VitoshKa; 08.12.2010
comment
Добре, навлязох по-дълбоко в това. Това е грешка в ess. - person VitoshKa; 08.12.2010
comment

Не трябва да виждате никаква разлика между извикването на #destroy от вашите контролери или от rake. Може би бъркате #delete и #destroy? #delete игнорира обратните извиквания и следователно няма да позволи на кламер да изчисти своите прикачени файлове.

Разбира се, има и проблеми, свързани с разрешенията за файлове. Изпълнявате ли рейк задачата като същия потребител, който изпълнява приложението за мрежата?

- person aL3xa; 08.12.2010
comment
Всъщност не работи правилно... Не мога да осъществя достъп до ess-smart-underscore от клавиатурното свързване по подразбиране. =/ Това е грешка, ще я публикувам в пощенския списък на ESS. - person aL3xa; 08.12.2010
comment
@aL3xa, корекцията не трябва да засяга нищо във вашата конфигурация. Работи перфектно за мен. Планирах да изпратя корекцията директно на разработчиците заедно с някои други малки корекции. - person VitoshKa; 09.12.2010
comment
Изчакайте малко, ако приложите вашата корекция, можете да получите достъп до A-_? Защото не мога! О_о - person aL3xa; 09.12.2010
comment
@aL3xa Да, точно така, функцията за интелигентно подчертаване работи при мен, но имам много персонализирана конфигурация. Вижте в имейла, който публикувах днес в помощния списък на ESS за директна корекция. Просто променете ess-езика в ess-диалект във функцията ess-request-a-process. - person VitoshKa; 09.12.2010
comment
Добре, това определено не работи за мен. Интелигентното подчертаване не работи, но C-c C-k със сигурност работи. Предполагам, че човек не може да спечели всички... =) Благодаря все пак! - person aL3xa; 10.12.2010