Как выбрать/переключить профили Leiningen с помощью Emacs nREPL?

У меня есть профиль :dev, настроенный в моем файле проекта leiningen. Это определяет настройку :init и :init-ns для моего сеанса repl. Если я запускаю nrepl в emacs (M-x nrepl-jack-in) с курсором над ключевым словом :dev в моем проекте.clj, запускается repl и используются настройки :init и :init-ns. Если у меня есть курсор в другом месте, начальное пространство имен другое (тест ns, а не пользователь), и :init не был оценен.

Я предполагаю, что это какая-то функция (сейчас я больше склоняюсь к тому, что это случайное ошибочное поведение), но может ли кто-нибудь объяснить это или указать мне на документы, которые это делают? Кроме того, есть ли способ изменить профиль после запуска реплики?

Спасибо


person Graham MacDonald    schedule 18.08.2013    source источник
comment
Я просмотрел исходный код nrepl.el и нигде не вижу ссылок на запуск lein with-profiles - также я не могу воспроизвести поведение профиля в зависимости от того, где находится курсор - вы уверены, что это что происходит? Я думаю, что nrepl, вероятно, просто использует профиль :default, который состоит из [:base :system :user :provided :dev] (github.com/technomancy/leiningen/blob/master/doc/PROFILES.md)   -  person Daniel Neal    schedule 19.08.2013
comment
Сначала я подозревал преднамеренное поведение, но оно кажется непоследовательным — теперь это больше похоже на ошибку. В проекте есть и файлы clj, и файлы cljs, так что, возможно, что-то путается...   -  person Graham MacDonald    schedule 22.08.2013


Ответы (4)


Вопреки тому, что сказал комментатор @user7610, в сидре нет функции cider-jack-in-with-profile. Cider pull-request #544 в этом отношении немного вводил в заблуждение.

Если вы хотите, чтобы cider загружал ваш собственный профиль special-snowflake, сделайте это в emacs:

  • M-x set-variable cider-lein-parameters to e.g. with-profile +my-special-snowflake repl :headless

или установить переменную в интерактивном режиме (чтобы вы могли видеть ее текущее значение перед его изменением):

  • C-h, v cider-lein-parameters, а затем нажмите или нажмите Enter на «настроить» и установите его там, например. with-profile +my-special-snowflake repl :headless и примените его

Это приведет к тому, что ваш следующий cider-jack-in загрузит профиль my-special-snowflake в дополнение к профилю base (который необходим для запуска nrepl и, следовательно, сидра).

person Bill Burcham    schedule 19.03.2015

Попробуй это:

(defun start-cider-repl-with-profile ()
  (interactive)
  (letrec ((profile (read-string "Enter profile name: "))
           (lein-params (concat "with-profile +" profile " repl :headless")))
    (message "lein-params set to: %s" lein-params)
    (set-variable 'cider-lein-parameters lein-params)
    (cider-jack-in)))

Тест на CIDER 0.16.0 (Рига)

person Jiacai Liu    schedule 28.03.2018
comment
Немного более идиоматично: возьмите profile в качестве аргумента, а затем выполните (interactive "sEnter profile name: "). - person drewr; 13.04.2018

Я просто ищу ту же функцию и нашел эту открытую проблему в clojure-emacs/nrepl.el «Добавить аргумент в nrepl-jack-in, чтобы разрешить указание профилей» https://github.com/clojure-emacs/nrepl.el/issues/327

он все еще открыт

person tangrammer    schedule 15.10.2013
comment
он стал cider-jack-in-with-profile, доступен с 1 квартала 2014 г. - person user7610; 08.03.2015

Я пробую автора функции Jiacai Liu на своем компьютере (GNU Emacs 26.2 (сборка 1, x86_64-apple-darwin18 .2.0, NS appkit-1671.20, версия 10.14.3 (сборка 18D109)) от 13 апреля 2019 г.). Я получаю сообщение об ошибке:

eval-region: Wrong number of arguments: (1 . 1), 0

И затем я пытаюсь использовать elisp как:

(defun start-cider-repl-with-profile ()
  (interactive)
  (letrec ((profile (read-string "Enter profile name: "))
           (lein-params (concat "with-profile +" profile " repl :headless")))
    (message "lein-params set to: %s" lein-params)
    (set-variable 'cider-lein-parameters lein-params)
    (cider-jack-in '())))

Теперь это работает. Спасибо за Цзякай Лю!

person Mars Liu    schedule 22.05.2019