Получите версию графического интерфейса Spacemacs / Emacs для распознавания среды nix-shell

Я занимаюсь разработкой в ​​оболочке Nix (создаю файл default.nix в корне моего проекта, а затем запускаю nix-shell ., чтобы предоставить мне оболочку с доступом к зависимостям проекта).

Spacemacs - мой главный редактор, но когда я пытаюсь запустить версию с графическим интерфейсом через emacs &, у меня нет доступа к программам в моей nix-оболочке (например, если бы я был в проекте Ruby on Rails, а Ruby был объявлен как зависимости в моем default.nix, у меня не было бы подсветки синтаксиса в Spacemacs, потому что версия Emacs с графическим интерфейсом не видит мои зависимости Nix-shell). Если я запускаю :!which ruby, он не может найти даже команду which.

Прямо сейчас я запускаю spacemacs через emacs -nw и просто использую его с консоли, но мне бы очень хотелось иметь возможность использовать редактор графического интерфейса и получать полные цветовые схемы, а не ограничиваться теми, которые хорошо выглядят в 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
    ];
  };
}

person josiah    schedule 17.10.2015    source источник
comment
Что не так с этим вопросом?   -  person josiah    schedule 19.10.2015


Ответы (3)


Мне удалось исправить эту проблему, запустив space emacs в режиме демона. https://www.emacswiki.org/emacs/EmacsAsDaemon

в каталоге с default.nix: nix-shell . emacs --daemon emacsclient -c -a emacs

person user514156    schedule 20.01.2017
comment
Открывает ли это какое-то время новое окно или буфер? Что делать, если у меня несколько проектов nix-shell? Будет ли каждый запускаться в собственном окне? Можно ли вместо этого заставить его работать в собственных буферах? - person CMCDragonkai; 22.04.2018
comment
@CMCDragonkai Я больше не использую космические emacs. Я делаю то, что сейчас делает Нэцу. Единственная уловка заключается в том, что вам нужно также добавить emacs в ваш shell.nix, если вы хотите, чтобы он мог найти все библиотеки, которые включает ваш shell.nix. - person user514156; 25.03.2019

Вы можете запустить свой Emacs с графическим интерфейсом как

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

Также см. Обсуждение nix-shell интеграции с flycheck и ghc-mode.


Совет: вы можете использовать для этого псевдоним в своем .zshrc или .bashrc

run-nix-emacs () {
  setsid nix-shell . --command "emacs" &> /dev/null
}

alias ne='run-nix-emacs'
person Netsu    schedule 24.10.2015
comment
Я попробовал это. Ответ таков: запуск :!which ruby по-прежнему говорит о том, что не может найти команду which, а мой уровень конфигурации Ruby по-прежнему недоступен, потому что команды irb и ruby ​​не могут быть найдены. Я прочитаю ссылку, которую вы предоставили для обсуждения flycheck и ghc-mod, но мне кажется, что это скорее проблема Emacs с Nix, чем общая проблема с Nix. - person josiah; 25.10.2015
comment
@josiah, вы установили which? - person Netsu; 26.10.2015
comment
не в масштабе всей системы, а в среде разработки Nix-shell, которая доступна, поскольку является частью nixpkgs.stdenv. - person josiah; 26.10.2015
comment
Похоже, это действительно проблема Spacemacs. Мои Emacs даже с графическим интерфейсом просто работают в этом случае. - person Netsu; 26.10.2015
comment
Я покопаюсь и попытаюсь получить дополнительную информацию по проблеме - person josiah; 26.10.2015
comment
На это не влияет: github.com/syl20bnr/spacemacs/issues/2294 - person CMCDragonkai; 09.07.2017

Я рекомендую этот nix-shell.el . Моя вилка содержит несколько примеров конфигурации. Хотя интеграция direnv с Emacs работает, она очень медленная. Не то чтобы это быстрее, но это происходит, когда вы выполняете M-x nix-shell-activate, и поэтому вы контролируете, когда возникает задержка. Это становится импортом, если, например, у вас есть shell.nix в вашем org-каталоге для исходных блоков org в многоязычной среде, и вам не всегда нужна задержка direnv при открытии файла org. Nix-shell.el Марио должен получить более широкую известность. Здесь я обнаружил это.

person Joe    schedule 11.04.2019