2012-03-12 15 views

cevap

26

Sen nasıl bir şey eklemeyi deneyebilirsiniz senin .emacs:

(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $PATH"))) 
    (setenv "PATH" path) 
    (setq exec-path 
     (append 
     (split-string-and-unquote path ":") 
     exec-path))) 

.bashrc Eğer .bash_profile veya env değişkenleri kurdum olmadığını size bağlı Bu snippet'i hafifçe ayarlamanız gerekebilir. Örnek, PATH değişken için biraz daha özel olan (exec-path'u Emacs'te de ayarlamanız gerektiğinden), ancak isteğe bağlı değişkenler için çalışacak şekilde genişletilebilir - buradan okunması gereken değişkenlerin bir listesi olabilir. .bashrc ve Emacs olarak ayarlayın.

OS X veya GNU/Linux kullanıp kullanmadığınızdan emin değilim. Linux'taki GUI'nin menü çubuğundan Emacs'i başlatmak, genellikle komut satırından başlatılanla aynı PATH'a sahip olmayan bir Emacs ile sonuçlanacaktır. Bu sorun ilk xdm Xsession betiklerine kadar uzanır ve düzeltmek oldukça kolay olsa da (temelde exec $SHELL -c Xsession komutunu kullanan ve kullanıcının Xsession'ı çalıştırmadan önce kabuk çalıştırılırsa), kimse çok uzun bir süre uğraşmak zorunda kalmaz zaman (ve kimsenin bundan şüpheliyim). Bildiğim kadarıyla problem, kdm ve gdm gibi moder xdm türlerine bile var.

OS X'te, env değişkenlerinin işlenmesi tamamen başka bir sorundur ve ENV değişkenlerinizin elde edilmesi için genellikle Emacs'i komut satırından bu /Applications/Emacs.app/Contents/MacOS/Emacs gibi çalıştırmak veya ~/.MacOSX/environment.plist ile oynamak zorundasınız. Sağladığım kod snippet'i her iki durumda da sizi kapsamalıdır.

Güncelleme

Son zamanlarda bu süreç exec-path-from-shell uzantısı kolay yapıldı. Emacs $PATH'u aşağı yukarı aynı şekilde ayarlar, ancak çözümün kendiliğinden kesilmesi için genellikle bir uzantı kullanılması tercih edilir.

+0

Bu Flymake perlbrew doğru Perl kullanmayan ile benim sorunu çözmek. Perlbrew-mini.el dosyasının aksine, – titanofold

+1

_exec-path-from-shell_ harika bir programdır ve başarımı _ensime_ ile başlatıp "yanlış tip argüman stringp nil" hatası veremedi. – cyrillk

+0

Neden split-string yerine split-string-and-unquote kullanıyorsunuz? –

1

Sorunuzu kesinlikle yanıtlamıyor, ancak ortam değişkenlerini her zaman make komut satırında geçirebilirsiniz. Örneğin: MxcompileRETmake -k CXXFLAGS='-Wall'RET

4

Bu emacs başlayan sürecin ortam değişkenleri ise nerede:

- Komut: Bu fonksiyon bir dize olarak ortam değişkeni var değerini verir

getenv var . var bir dize olmalı. Var ortamda tanımsız ise, getenv sıfırlanır. Varsa, ancak null ise ‘" "’ değerini döndürür. Emacs içinde, ortam değişkenlerinin bir listesi ve değerleri değişken süreç ortamında tutulur.

 (getenv "USER") 
      ⇒ "lewis" 

- Değişken: işlem ortamı Bu değişken şeritlerinin listesidir

, bir ortam değişkeni tarif eden her. Getenv ve setenv fonksiyonları bu değişken ile çalışır.

 process-environment 
     ⇒ ("PATH=/usr/local/bin:/usr/bin:/bin" 
      "USER=lewis" 
      "TERM=xterm" 
      "SHELL=/bin/bash" 
      "HOME=/home/lewis" 
      ...) 

Sen emacs bir bash oturumdan başlatıldı varsayarak gibi görünüyor. Ancak, X altındaki işlemler genellikle sh oturumundan başlatılır, bu değil ~/.bashrc komut dosyasında ayarladığınız ortam değişkenlerini okur. Bu atlatmak için basit bir yol bash yerine sh kullanmak için ~/.xinitrc dosya değiştirmek için (o dosyanın üst kısmında #!/bin/bash eklemek kadar basit olabilir).

Kaynak: gnu.org

+1

Bunu mu demek istediniz: #!/Bin/bash'? – Elena

+0

Teşekkürler, @Elena. Sabit. :) – dmvianna

İlgili konular