在Emacs中,我想在不同的缓冲区中改变环境变量的值.
我的emacs环境依赖于环境变量(flymake,编译等),但是我希望能够在一个emacs会话中同时打开多个项目,但这些项目可能存在冲突的环境.
例如,类似于flymake的不同INCLUDE_PATH环境变量.
use*_*342 15
你可以通过建立process-environment缓冲区本地来做到这一点:
(defun setup-some-mode-env ()
(make-local-variable 'process-environment)
;; inspect buffer-file-name and add stuff to process-environment as necessary
...)
(add-hook 'some-major-mode 'setup-some-mode-env)
Run Code Online (Sandbox Code Playgroud)
更详细的示例是此代码导入由外部脚本创建的Guile环境设置.该脚本设计为在shell中"源",但此处将其结果导入到单个Emacs缓冲区中:
(defun my-guile-setup ()
(make-local-variable 'process-environment)
(with-temp-buffer
(call-process "bash" nil t nil "-c"
"source ~/work/guileenv; env | egrep 'GUILE|LD_LIBRARY_PATH'")
(goto-char (point-min))
(while (not (eobp))
(setq process-environment
(cons (buffer-substring (point) (line-end-position))
process-environment))
(forward-line 1))))
(add-hook 'guile-hook 'my-guile-setup)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |