获取Spacemacs / Emacs GUI版本以识别nix-shell环境

时间:2015-10-17 15:03:33

标签: shell emacs development-environment nix

我在Nix shell中进行开发(在我的项目根目录中创建一个default.nix文件,然后运行nix-shell .给我一个可以访问项目依赖项的shell)。

Spacemacs是我的主编辑器,但当我尝试通过emacs &运行GUI版本时,我无法访问我的nix-shell中的程序(如果我在Ruby on Rails项目中)例如,Ruby在我的default.nix中被声明为依赖项,我在Spacemacs中没有语法高亮,因为Emacs的GUI版本没有看到我的Nix-shell依赖项。如果我运行:!which ruby,它甚至无法找到which命令。

现在,我正在通过emacs -nw运行spacemacs并且只是从控制台使用它,但我真的希望能够使用GUI编辑器并获得完整的颜色方案而不是受限制在256色模式下看起来不错的那些。我在终端和编辑器之间切换比在tmux窗格或终端拆分之间切换到我的CLI编辑器更快。

with import <nixpkgs> {}; {
  cannyFreeRadicalEnv = stdenv.mkDerivation rec {
    name = "rails-project-env";
    version = "0.1";
    src = ./.;
    buildInputs = [
        stdenv
        ruby_2_2_2
        bundler
        zlib
        postgresql94
        sqlite
        zsh
        git
        nodejs-0_12
    ];
  };
}

3 个答案:

答案 0 :(得分:4)

您可以将GUI Emacs作为

运行
setsid nix-shell . --command "emacs" &> /dev/null

另请参阅有关nix-shell integrationflycheckghc-mode的讨论。

提示:您可以在 .zshrc .bashrc

中使用别名
run-nix-emacs () {
  setsid nix-shell . --command "emacs" &> /dev/null
}

alias ne='run-nix-emacs'

答案 1 :(得分:4)

我能够通过在守护进程模式下运行空间emacs来解决此问题。 https://www.emacswiki.org/emacs/EmacsAsDaemon

使用default.nix的目录中的

nix-shell . emacs --daemon emacsclient -c -a emacs

答案 2 :(得分:0)

我推荐this nix-shell.el。我的fork提供了一些配置示例。将direnv集成到Emacs的过程中,它的速度非常慢。这并不是说速度更快,但是它会在执行M-x nix-shell-activate时发生,因此您可以控制延迟的发生时间。例如,如果您在多语言环境中的组织源代码块的组织目录中有一个shell.nix,并且在打开组织文件时并不总是希望direnv延迟,则这变得很重要。 Mario的nix-shell.el应该更广为人知。 Here是我发现它的地方。