2015-05-15 1 views
3

я на OSX Yosemite работает Emacs 24.5 и R 3.2Почему моя сессия ESS R возвращается к языку C?

У меня есть это в моем ~/.bash_profile:

export LANG=en_US.UTF-8 
export LANGUAGE=en_US:en 
export LC_CTYPE="en_US.UTF-8" 
export LC_NUMERIC="en_US.UTF-8" 
export LC_TIME="en_US.UTF-8" 
export LC_COLLATE="en_US.UTF-8" 
export LC_MONETARY="en_US.UTF-8" 
export LC_MESSAGES="en_US.UTF-8" 
export LC_PAPER="en_US.UTF-8" 
export LC_NAME="en_US.UTF-8" 
export LC_ADDRESS="en_US.UTF-8" 
export LC_TELEPHONE="en_US.UTF-8" 
export LC_MEASUREMENT="en_US.UTF-8" 
export LC_IDENTIFICATION="en_US.UTF-8" 
export LC_ALL=en_US.UTF-8 

это в мои настройки Emacs:

(setq current-language-environment "UTF-8") 

(add-hook 'ess-R-post-run-hook 
     (lambda() (set-buffer-process-coding-system 
        'utf-8-nfd-unix 'utf-8-nfd-unix))) 

и я даже в следующем порядке:

defaults write org.R-project.R force.LANG en_US.UTF-8 

Когда я запускаю R из в командной строке или в RStudio, он использует правильную локаль. Когда я запускаю процесс R в Emacs, хотя, я получаю следующее предупреждение:

During startup - Warning messages: 
1: Setting LC_CTYPE failed, using "C" 
2: Setting LC_COLLATE failed, using "C" 
3: Setting LC_TIME failed, using "C" 
4: Setting LC_MESSAGES failed, using "C" 
5: Setting LC_MONETARY failed, using "C" 

и любые не-ASCII символы являются деформированные ошибки, продуцирующие. Как установить правильный язык?

+0

Проблема не возникает при запуске Emacs из терминала, что привело меня к решению, см. Ниже – kliron

ответ

3

Итак, проблема не в Emacs, ESS или R, так это то, что в процессах OSX, запущенных с помощью запуска, не наследуются какие-либо переменные среды в .profile, .bash_profile или .bashrc. Вместо этого нужно установить среду через launchd.

Делать это решить мою проблему:

/bin/launchctl setenv LANG en_US.UTF-8 
/bin/launchctl setenv LC_ALL en_US.UTF-8 
/bin/launchctl setenv LC_CTYPE en_US.UTF-8 
/bin/launchctl setenv LC_COLLATE en_US.UTF-8 
/bin/launchctl setenv LC_MESSAGES en_US.UTF-8 
/bin/launchctl setenv LC_TIME en_US.UTF-8 
/bin/launchctl setenv LC_MONETARY en_US.UTF-8 

упорствовать переменные окружения перезагрузок, добавить запись в /Library/LaunchDaemons/ (OSX> 10,9). Для более ранних версий вместо этого добавьте его в /etc/launchd.conf.

Вышеуказанные будут заданы переменные окружения для всех процессов, запущенных через launchd. Если это нежелательно, вы можете отредактировать файл Info.plist в отдельном файле .app и установить переменные в качестве значений ключа в файле с ключом LSEnvironment

Например, чтобы решить проблему в Emacs, я редактировал файл :

/usr/local/Cellar/emacs/24.5/Emacs.app/Contents/Info.plist

Добавление следующую запись в Словаре верхнего уровня:

<key>LSEnvironment</key> 
<dict> 
    <key>LANG</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_ALL</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_CTYPE</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_COLLATE</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_PAPER</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_ADDRESS</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_MONETARY</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_NUMERIC</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_TELEPHONE</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_MESSAGES</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_IDENTIFICATION</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_MEASUREMENT</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_TIME</key> 
    <string>en_US.UTF-8</string> 
    <key>LC_NAME</key> 
    <string>en_US.UTF-8</string> 
</dict> 

(Не все переменные строго необходимы, конечно)

2

Я только что узнал, что вы просто должны добавить

(unless (getenv "LANG") (setenv "LANG" "en_US.UTF-8")) 

в файл .emacs.el.

Это устанавливает переменную окружения LANG в emacs, если она еще не установлена. Это все, что требуется R.

Это гораздо менее назойливый подход и работает изнутри emacs.